Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/01/2017, 08:10
oggy_15_3
 
Fecha de Ingreso: marzo-2015
Mensajes: 183
Antigüedad: 9 años, 1 mes
Puntos: 8
Consulto - relacion de tablas

Hola a toda la comunidad.
Tengo una duda con respecto a un tipo de relación de tablas.
Veran tengo las siguientes 3 tablas:

TABLA
******
cod_tabla
nom_tabla
..
INSERT INTO tabla values(1,'OCUPACION');
INSERT INTO tabla values(2,'GRADO DE INSTRUCCIÓN');

TABLA_ITEM
**********
cod_item
nom_item
cod_tabla (fk)
..
INSERT INTO tabla_item(1,'PROFESOR PRIMARIA',1);
INSERT INTO tabla_item(2,'INGENIERO DE SISTEMAS',1);
INSERT INTO tabla_item(3,'SECUNDARIA COMPLETA',2);
INSERT INTO tabla_item(4,'SECUNDARIA INCOMPLETA',2);

NOTA: Para evitar crear una tabla para ocupación, grado de instrucción, estado civil, etc.
He decidido crear 2 tablas que me permitan almacenar esa información (tabla, tabla_item) hasta ahí todo bien. El tipo de relación tiene buena pinta.

Ahora.. describo la siguiente tabla:

PACIENTE
********
cod_pac
nom_pac
cod_ocu
cod_grains
..
..
donde: en cod_ocu se podría almacenar los valores (1,2) y en cod_grains (3,4).
Todo funciona bien, pero si se dan cuenta mis campos cod_ocu y cod_grains no son campos FK
por lo tanto si elimino los registros de la tabla_item se borrarian fácilmente ya que no son FK en la tabla paciente (restricciones).

En resumen... que pasaría si hago que los campos cod_ocu y cod_grains sean FK

En MySQL
ALTER TABLE paciente add FOREIGN KEY fk_tabla_item_cod_ocu(cod_ocu)REFERENCES tabla_item(cod_item);
ALTER TABLE paciente add FOREIGN KEY fk_tabla_item_cod_grains(cod_grains)REFERENCES tabla_item(cod_item);


Esto en el modelado (utilizo Workbench) haría que el campo cod_item este relacionada a 2 campos distintos de la tabla paciente.

Sinceramente este tipo de relación no las he visto, pero si debo mencionar que lo tome de referencia de una compañia llamada SICO (tengo acceso a una BD en postgres de un cliente) y vi que trabajaban de esa manera, pero ellos no utilizaban campos FK la cuál me imagino que fácilmente pueden eliminar registros de la tabla item, perdiendo así información de otras tablas (como en mi caso de la tabla paciente).

Me gustaría saber si les parece una buena practica ya que me permite a mi reducir la creación de varias tablas, pero a la vez el modelado no se ve tan agradable...

Espero sus comentarios.

Saludos.