Evilnapsis

Programming, Hacking and More

Databases

[SQL] Almacenar diferentes tipos de datos o entidades en una misma tabla

A veces un proyecto tiene datos que tienen los mismos campos o las tablas resultantes son iguales lo que nos llevaría a tener muchas tablas iguales, una solución seria almacenar todos los datos en una tabla con un identificador de tipo.

Me ha pasado muchas veces para almacenar en tablas sencillas, por ejemplo: tipos de usuario, categorías, tipos de evento, tipos de deporte, clasificaciones, tipos de empresa, giro, etc.

También me ha pasado en tablas mas grandes, por ejemplo: noticias, articulos, anuncios, productos, etc.

La tabla

La base es una tabla.

[code language=”sql”] create table table1(
id int not null auto_increment primary key,
name varchar(255)
);
[/code]

Suponiendo que ese patrón se repita en todas las tablas, solo vamos a agregar un campo de tipo para identificar cada entidad, seria un numero entero, por ejemplo: el tipo 1 = categorias, tipo 2 = tipos de usuario, tipo 3 = tipos de evento,  y asi cada tipo debe ser diferente.

[code language=”sql”] create table table1(
id int not null auto_increment primary key,
name varchar(255),
tipo int
);
[/code]

Insertando datos

Para insertar datos siempre vamos a agregar o usar el tipo.

[code langauge=”sql”] insert into table1 (name, tipo) value ("Nombre X", 1);
insert into table1 (name, tipo) value ("Nombre Y", 2);
[/code]

El tipo hará la diferencia a la hora de hacer consultas tipo select.

Seleccionar datos

Para mostrar los datos, siempre vamos a usar el tipo.

[code language=”sql”] select * from table1 where tipo=1;
[/code]

Esto debe ser así para que los datos nunca se mezclen y no se pierda el efecto deseado.

Este tipo de consultas nos puede servir para mostrar tablas o campos de selección combobox.

Incluso si tenemos que hacer una búsqueda debemos usar el tipo.

[code language=”sql”] select * from table1 where tipo=1 and name = "xdf";
[/code]

Eliminando datos

Para eliminar datos se hace como toda la vida, solo usando el ID o llave primaria, recordando que en una vista solo se muestran los ID correspondiente para cada tipo.

[code language=”sql”] delete from table1 where id=1;
[/code]

Otro caso seria eliminar todos los datos de un tipo, entonces si usaremos el tipo.

[code language=”sql”] delete from table1 where tipo=1;
[/code]

Así eliminamos todos los datos de un tipo en especifico.

Actualizar datos

Para actualizar datos, de igual manera siempre usamos el id o llave primaria.

[code language=”sql”] update table1 set name="s1sxs1sx" where id=2;
[/code]

Conclusión

Puede parecer incorrecto desde el punto de vista de la normalizacion de la base de datos.

Pero desde el punto de vista del desarrollador se optimiza mucho y ademas se deja abierta la posibilidad de que si se agregan mas entidades similares la base de datos no cambiara y en las consultas solo se agrega un id de tipo nuevo.

Cuando se relacionan con otras tablas solo hay que cuidar que el ID  de tipo correspondiente siempre se muestre en la vista correcta.

Ustedes que opinan?

Agustin Ramos

Desarrollador de Software

Leave a Reply