válida una tipos tener tabla restricciones referencial referencia puede más integridad hace foránea foreign foranea externa definida datos clave database foreign-keys primary-key

database - una - restricciones foreign key



¿Está bien tener una clave externa como clave principal? (7)

Depende de la empresa y del sistema.

Si su ID de usuario es único y será único todo el tiempo, puede usar ID de usuario como su clave principal. Pero si alguna vez quiere expandir su sistema, esto dificultará las cosas. Le aconsejo que agregue una clave externa en el usuario de la tabla para establecer una relación con el perfil de la tabla en lugar de agregar una clave externa en el perfil de la tabla.

Tengo la tabla "Usuario" (nombre de usuario, contraseña) y la tabla "Perfil" (ID de perfil, género, fecha de nacimiento, ...). Actualmente estoy usando este enfoque: cada registro de perfil tiene un campo llamado "userId" como clave externa que enlaza con la tabla de usuarios. Cuando un usuario se registra, su registro de perfil se crea automáticamente. Estoy confundido con la sugerencia de mi amigo: tener el campo "userId" como clave principal y externa y eliminar el campo "profileId". ¿Qué enfoque es mejor?


Generalmente se considera una mala práctica tener una relación de uno a uno. Esto se debe a que simplemente podría tener los datos representados en una tabla y lograr el mismo resultado.

Sin embargo, hay casos en los que es posible que no pueda realizar estos cambios en la tabla a la que hace referencia. En este caso, no hay ningún problema al utilizar la clave externa como clave principal. Podría ser útil tener una clave compuesta que consiste en una clave primaria única y la clave externa que se incrementa automáticamente.

Actualmente estoy trabajando en un sistema donde los usuarios pueden iniciar sesión y generar un código de registro para usar con una aplicación. Por razones que no voy a entrar no puedo simplemente agregar las columnas requeridas a la tabla de usuarios. Así que voy por una ruta uno a uno con la tabla de códigos.


Las claves externas casi siempre son "Permitir duplicados", lo que las haría inadecuadas como claves principales.

En su lugar, busque un campo que identifique de forma única cada registro en la tabla, o agregue un nuevo campo (ya sea un entero de incremento automático o un GUID) para que actúe como la clave principal.

La única excepción a esto son las tablas con una relación de uno a uno, donde la clave externa y la clave principal de la tabla vinculada son la misma.


Las claves primarias siempre deben ser únicas, las claves externas deben permitir valores no únicos si la tabla es una relación de uno a varios. Es perfectamente correcto utilizar una clave foránea como la clave principal si la tabla está conectada por una relación uno a uno, no por una relación uno a varios. Si desea que el mismo registro de usuario tenga la posibilidad de tener más de 1 registro de perfil relacionado, vaya con una clave principal separada, de lo contrario, quédese con lo que tiene.


Sí, es legal tener una clave principal que sea una clave externa. Esta es una construcción rara, pero se aplica a:

  • Una relación 1: 1. Las dos tablas no se pueden combinar en una porque los diferentes permisos y privilegios solo se aplican a nivel de tabla (a partir de 2017, tal base de datos sería impar).

  • Una relación 1: 0..1. El perfil puede o no existir, dependiendo del tipo de usuario.

  • el rendimiento es un problema, y ​​el diseño actúa como una partición: rara vez se accede a la tabla de perfiles, se aloja en un disco separado o tiene una política de fragmentación diferente en comparación con la tabla de usuarios. No tendría sentido si el almacenamiento de subrayado es columnar.


Sí, una clave externa puede ser una clave principal en el caso de una relación uno a uno entre esas tablas


Yo no haría eso. Mantendría el profileID como clave principal de la tabla Profile

Una clave externa es solo una restricción referencial entre dos tablas

Se podría argumentar que una clave principal es necesaria como objetivo de cualquier clave externa que se refiera a ella desde otras tablas. Una clave externa es un conjunto de una o más columnas en cualquier tabla (no necesariamente una clave candidata, por no hablar de la clave primaria, de esa tabla) que puede contener los valores encontrados en las columnas de clave primaria de algunos otra mesa Por lo tanto, debemos tener una clave principal para que coincida con la clave externa. ¿O debemos? El único propósito de la clave principal en el par de clave principal / clave externa es proporcionar una unión no ambigua: para mantener la integridad referencial con respecto a la tabla "externa" que contiene la clave primaria referenciada. Esto asegura que el valor al que se refiere la clave externa siempre será válido (o nulo, si está permitido).

http://www.aisintl.com/case/primary_and_foreign_key.html