Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Consulto - relacion de tablas

Estas en el tema de Consulto - relacion de tablas en el foro de Bases de Datos General en Foros del Web. 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 ****** ...
  #1 (permalink)  
Antiguo 04/01/2017, 08:10
 
Fecha de Ingreso: marzo-2015
Mensajes: 183
Antigüedad: 9 años, 7 meses
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.
  #2 (permalink)  
Antiguo 04/01/2017, 08:12
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Consulto - relacion de tablas

Cual es el punto para crear menos tablas? No siempre el tener menos tablas implica que tu diagrama/diseño sea el mas optimo, de lo de las FK puedes usar la opcion de delete on cascade para que si eliminas un registro en la tabla padre este sea eliminado en la tabla hija.
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 04/01/2017, 08:23
 
Fecha de Ingreso: marzo-2015
Mensajes: 183
Antigüedad: 9 años, 7 meses
Puntos: 8
Respuesta: Consulto - relacion de tablas

Cita:
Iniciado por Libras Ver Mensaje
Cual es el punto para crear menos tablas? No siempre el tener menos tablas implica que tu diagrama/diseño sea el mas optimo, de lo de las FK puedes usar la opcion de delete on cascade para que si eliminas un registro en la tabla padre este sea eliminado en la tabla hija.
Me refería a eliminar un registro de la tabla hijo no del padre. Si no le pongo FK a la tabla padre el usuario podría eliminar los registros de la tabla hijo (tabla item).

Con respecto al diseño del diagrama. Sí es justamente lo que pasa por mi mente, no se ve tan optimo haciendo este tipo de restricciones.

El punto del porque tener menos tablas en algunos casos se debe a que algunas tablas sólo tendrían pocos registros (3-10reg).
EJM:
- Turno (MAÑANA, TARDE Y NOCHE),
- Estado Civil (SOLTERO, CASADO, VIUDO, DIVORCIADO)
- TIPO DE PACIENTE (NUEVO, ANTIGUO, INDIGENTE)

Espero dejarme entender
Básicamente había creado esa tabla para almacenar información de posibles tablas que no manejan mucha información.

Aun así no seria una buena práctica? En sí hasta ahora no lo aplico los FK por el diagrama, por como se vería.

Gracias por tu aporte.
  #4 (permalink)  
Antiguo 04/01/2017, 08:34
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Consulto - relacion de tablas

Y que tiene que las tablas tengan pocos registros? para el modelo que planteas es mejor tener esa informacion en tablas separadas que meterte en rollos de programacion para "tener menos tablas" aunque dichas tablas tengan pocos registros, no le veo lo optimo en tener pocas tablas........
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: bd, int, registros, relacion, tabla, tablas, tipo, valor
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:21.