Si tengo una relación entre dos tablas (ambas tablas tienen sus propias claves principales) ¿qué debería guiar mi decisión sobre qué tabla debe almacenar la clave externa? Entiendo que la naturaleza de la relación probablemente sea importante (uno a uno, uno a muchos, muchos a muchos, unidireccional, bidireccional), y probablemente también sean importantes los patrones de acceso. Sin embargo, ¿qué es una forma sistemática de tomar esa decisión?¿Dónde debo almacenar una clave externa?
Respuesta
¿Qué tabla es el niño en la relación?
Responde eso, y sabes qué tabla necesita la columna de clave externa, haciendo referencia a la clave principal [típica] del padre. Eso es para una relación de uno a muchos ...
Un número de muchos requeriría que agregue una tercera tabla, usando las claves de ambas tablas como su clave principal.
Una clave foránea es simplemente un campo en una tabla que hace referencia a un campo clave de otra tabla. No es absolutamente crítico identificar el campo de la clave externa como tal. Es decir, no es necesario agregar explícitamente la restricción FOREIGN KEY ... REFERENCES a la tabla para que sea una clave externa. Cuando une las dos tablas, la clave principal de la tabla principal se establecerá igual a la clave externa de la tabla secundaria. Cualquiera que sea no, la clave principal es la clave externa.
En relaciones uno a muchos, el FK va en el lado "muchos". No puede ir del lado "uno" porque es allí donde va la PK y la definición de una clave principal incluye rechazar duplicados.
Si tiene una relación de varios a varios, deberá volver a trabajar las tablas para que termine con dos relaciones uno a muchos y una tabla de resolución intermedia.
"¿Qué es una forma sistemática de tomar esa decisión?"
Parece haber dos opciones: el lado "Uno" como FK del lado "Muchos lados", o el lado "Muchos" tiene FK al lado "Uno".
Busquemos realmente las opciones.
Todas las filas de los "muchos" lado pueden hacer referencia fácilmente una fila en el lado "uno".
La fila uno en el lado "Uno" no puede hacer referencia a TODAS las filas en el lado "Muchos".
Solo funciona una técnica: "Muchos" lado tiene FK a "Uno" lado.
Solo hay una opción de implementación real. No hay "decisión".
En resumen: es una cuestión de cardinalidad. Si tiene una relación de muchos a uno, la clave debe residir en el lado 'muchos'. Si es one-to-maybe-one, en el lado 'uno'. Si es many-to-many, necesita una tabla intermedia. Si es uno a uno, puede elegir libremente. – reinierpost
Como un primary key
, un foreign key
es también un tipo de constraint
colocado en una o más columnas en una tabla.
El foreign key
establece un enlace entre las columnas clave y las columnas relacionadas en otra tabla. (También puede vincular las columnas de clave externa a las columnas dentro de la misma tabla.)
La tabla que contiene la clave externa se considera la tabla secundaria y la tabla a la que hace referencia la clave externa es la tabla principal.
Puntos clave
- El
foreign key
debe hacer referencia a una clave principal o restricción única, a pesar de que la referencia puede estar en la misma mesa o en una tabla diferente - Un
foreign key
también deben tener la misma número de columnas como el número de columnas en la restricción a la que se hace referencia, y los tipos de datos deben coincidir entre las columnas correspondientes. - A diferencia de
Primary key
,Foreign key
las columnas pueden contener NULL values.
- 1. ¿Dónde debo almacenar una referencia a mi contenedor DI?
- 2. Dónde almacenar la clave de cifrado
- 3. ¿Dónde debo guardar la clave de acceso en rails3?
- 4. MySQL - Clave externa única
- 5. MySQL: ¿Cómo encontrar dónde se usa una clave primaria específica como clave externa en otras tablas?
- 6. ¿Dónde debo almacenar los datos de mi aplicación?
- 7. Mac OS X: ¿Dónde debo almacenar datos de aplicaciones comunes?
- 8. dónde almacenar funciones auxiliares?
- 9. diferencias entre "clave externa" y "restricción de clave externa"
- 10. clave externa condicional PostgreSQL
- 11. Unir tablas, clave externa
- 12. clave externa a varias tablas
- 13. ¿Clave externa a una de muchas tablas?
- 14. MySQL: Insertar si existe una clave externa
- 15. Cuándo utilizar una clave externa en MySQL
- 16. ¿Qué es exactamente una clave externa?
- 17. MySQL 5.5 restricción de clave externa falla cuando existe una clave externa
- 18. Clave externa para la clave compuesta
- 19. Usar clave primaria compuesta como clave externa
- 20. clave externa cakephp no la clave primaria
- 21. Dejar caer una columna con una clave externa
- 22. Clave múltiple como clave externa (SQL)
- 23. ¿Dónde debo almacenar la configuración de configuración de todo el sitio para una aplicación de Rails?
- 24. ¿Cómo encontrar dependencias de clave externa de una fila específica?
- 25. clave externa condicional en SQL
- 26. clave externa no puede crear
- 27. Almacenar una clave secreta en Android
- 28. clave natural vs clave sustituta un innodb clave externa
- 29. Adición de clave externa en varias columnas
- 30. ¿Cómo puedo soltar una clave externa en SQL Server?
"¿Qué es una forma sistemática de tomar esa decisión?" "entiendo que la naturaleza de la relación probablemente importe". Correcto. La naturaleza de la relación importa. No entiendo la pregunta ¿Desea saber cómo definir cuál depende del otro? –
La [documentación de MySQL de claves externas] (https://dev.mysql.com/doc/refman/5.5/en/create-table-foreign-keys.html#idm139680617903472) proporciona un ejemplo simple de la relación entre 2 padres tablas: 'cliente',' producto' y una tabla secundaria: 'product_order'. En ese ejemplo, 'product_order' es la tabla secundaria que debe contener las claves externas. –