Ver Mensaje Individual
  #4 (permalink)  
Antiguo 22/11/2010, 16:07
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: ayuda con relacion ternaria o binaria

Cita:
si la tabla fuere ternaria

tendría que repetir el campo id_caja

como tendría que ir pues la ternaria
así serian de M:N tendría el campo id_caja repetido
id_caja id_color id_caja id_unidad
Damos por entendido esto:

- Las relaciones ternarias no son conceptos del modelo físico de datos sino del modelo lógico. Esto implica que en el modelo lógico se representan abstracciones del mundo real. No puedes pasar de la abstracción a las tablas en una relación 1:1. No son equivalentes, sino que deben someterse a un proceso de transformación.

- Toda relación M:N determina la existencia de una tabla nueva (que no existe en el modelo lógico como entidad) que determina la relación. Debe contener como PK, la PK de las dos tablas relacionadas.

- Si tienes una relación entre tres entidades (ternaria), y la relación es N:N;N, esa relación se transforma también en una tabla nueva que represente la relación y contenga las PK de las tablas. En ella las PK de las tres son la PK de la tabla.

- En las ternarias de clase 1:1:1, o 1:1:N se debe analizar la lógica de la relación para saber qué claves migran a cuales tablas.

- Lo que es admisible, luego del proceso de normalización de bases de datos (que aún no has enfrentado, asumo).

Lo que no tiene ningún sentido es que esté sucediendo esto:
Código SQL:
Ver original
  1. CONSTRAINT fk_caja_color_unidad_id_caja
  2.      FOREIGN KEY (id_caja) REFERENCES caja(id_caja),
  3. CONSTRAINT fk_caja_color_unidad_id_color
  4.      FOREIGN KEY (id_color) REFERENCES caja(id_color),
  5. CONSTRAINT fk_caja_color_unidad_id_unidad
  6.      FOREIGN KEY (id_unidad) REFERENCES caja(id_unidad)

Porque la tabla caja, o tiene por PK id_caja, o la PK es id_color, o lo es id_unidad.
Si lo que quieres manejar es una clave de tres campos, entonces esa tabla está mal definida (dos de los campos son UNIQUE), y esta tabla en cuestión tiene mal definida las FK, porque si es un a PK de tres campos debería decir:
Código SQL:
Ver original
  1. CONSTRAINT fk_caja_color_unidad_PK
  2.      FOREIGN KEY (id_caja) REFERENCES caja(id_caja, id_color, id_unidad)

¿Se comprende lo que digo?

Aclarame ese detalle.

Cita:
el problema en si no es insertar datos sino diseñar la base de datos correctamente
Craso error: Si diseñas bien y entras los datos sin respetar las restricciones, el problema es tan grave como diseñar mal, porque significa que no estás entendiendo el concepto de restricciones de clave foránea.


¿Quince tablas y tienes problemas de lógica?

Eso es una nimiedad. Espera que tengas que enfrentar bases de datos de más de 50 tablas y hablamos.

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)