Supongo que no, ya que las claves externas son las claves principales en sus propias tablas, por lo que serán únicas.¿Debe una tabla de base de datos que contiene dos columnas que son claves externas tener una tercera columna que es la clave principal?
Más información
estoy usando MySQL y las siguientes tres tablas están utilizando el motor de InnoDB
.
======================= =======================
| galleries | | images |
|---------------------| |---------------------|
| PK | gallery_id | | PK | image_id |
| | name | | | title |
| | description | | | description |
| | max_images | | | filename |
| | enabled | | | enabled |
======================= =======================
========================
| galleries_images |
|----------------------|
| FK | gallery_id |
| FK | image_id | <----- Should I add a PK to this table?
========================
Epílogo
Gracias por las respuestas excelentes. Aprendí sobre claves compuestas y, después de considerar mi caso específico, decidí hacer de la columna image_id
en la tabla galleries_images
una clave principal. De esta manera, las imágenes solo pueden estar asociadas a una galería, que es lo que quiero.
También voy a implementar una columna order_num
en galleries_images
que utilizaré la lógica PHP para mantener. De esta forma, el usuario puede colocar imágenes en un orden específico en cada galería. Terminé con esto:
============================
| galleries_images |
|--------------------------|
| PK, FK | image_id |
| FK | gallery_id |
| | order_num |
============================
¡Gracias otra vez!
Epílogo II
Gracias a aquellos de ustedes que indiqué que ni siquiera necesito esta tabla. No proporcioné la información más completa para empezar. Terminé dejando caer la tabla galleries_images
por completo y acabo de agregar gallery_id
como clave externa a la tabla images
. De todos modos, todavía aprendí más de lo que pensé que sería y estoy agradecido por la ayuda.
+1. Incluso yo lo estoy pensando, pero necesitaríamos más detalles. Normalmente, cualquier DB creará un índice único en la clave principal de una tabla. Si su tabla solo tiene esas dos claves externas y ninguna clave principal, entonces me temo que el índice no se creará (no se confirma, se especula). Luego depende de qué y cómo se usa la tabla. – Guru
El hecho de que las claves externas se asocien a claves principales en las tablas principales, eso no significa que la combinación de claves externas deba ser única. – David
¡ESPERE! la única necesidad de una tabla de asignación es que si su modelo requiere una relación de muchos a muchos entre la galería y la imagen. Si crea PK Image_ID, ya no es muchos, muchos ... simplemente coloque Gallery_ID en su tabla de imágenes y termine con esto. No sé qué es InnoDB, pero si crea basura como esta de que una de dos cosas sea cierta, no puede diferenciar entre muchas y muchas o no puede. Este es el problema con comenzar una base de datos desde un diseño físico. No se ha molestado en considerar cuáles son sus relaciones. –