Está escrito en cada libro que las claves externas son en realidad claves principales en alguna otra tabla pero podemos tener una clave externa que no es clave primaria en ninguna otra tabla¿podemos tener una clave externa que no sea la clave principal en ninguna otra tabla?
Respuesta
Sí, puede tener una clave externa que haga referencia a índice único en otra tabla.
CREATE UNIQUE INDEX UX01_YourTable ON dbo.YourTable(SomeUniqueColumn)
ALTER TABLE dbo.YourChildTable
ADD CONSTRAINT FK_ChildTable_Table
FOREIGN KEY(YourFKColumn) REFERENCES dbo.YourTable(SomeUniqueColumn)
Esto es correcto en Microsoft SQL Server pero no es stanard SQL y no es compatible con todos los demás DBMS. En el estándar ISO SQL, no existe un índice y siempre se requieren restricciones FOREIGN KEY para hacer coincidir las restricciones UNIQUE o PRIMARY KEY. Personalmente, siempre preferiría usar restricciones únicas en lugar de índices únicos sin restricción. Creo que una restricción hace que el significado deseado sea más claro y la sintaxis de restricción es más probable que otro desarrollador de bases de datos lo entienda. – sqlvogel
@David: sí, pero el OP preguntaba por SQL Server ..... –
Por definición, una clave foránea debe hacer referencia a una clave candidata de alguna tabla. No necesariamente tiene que ser la clave principal.
Como una cuestión de detalles, la restricción llamada FOREIGN KEY en SQL no es exactamente equivalente a la definición del libro de texto de una clave foránea en el modelo relacional. Restricción FOREIGN KEY de SQL es diferente porque:
- se puede hacer referencia a cualquier conjunto de columnas sujetas a una restricción de unicidad, incluso si no son claves candidatas (superclaves o columnas anulables por ejemplo).
- puede incluir valores nulos, en cuyo caso la restricción no se aplica
- su sintaxis depende de orden de las columnas, por lo que una restricción fk en (A, B) referencia (A, B) es diferente a una restricción en (B , A) referencia (A, B).
APC no está seguro de por qué quiere editar esto para reemplazar "SQL" por "SQL Server". Mis comentarios se aplican a SQL (es decir, el lenguaje estándar definido por ISO). Se aplican a todas las implementaciones de SQL con las que estoy familiarizado, no solo SQL Server. – sqlvogel
Sí, ¿qué pasa con estas personas que editan publicaciones sin saber lo que están haciendo? Voto por no permitir ediciones en Respuestas. – PerformanceDBA
Sí, puede haber una clave externa que es clave única en otra tabla, ya que la clave única es un subconjunto de la clave principal pero no la clave primaria exacta.
De modo que es posible que la clave externa sea clave única en otra tabla.
Respuesta estándar general es no. Solo es posible si la clave externa se refiere a cualquier columna de forma única en otra tabla. Eso significa que la clave externa debe ser la clave candidata en otra tabla y la clave primaria también es una clave candidata en la tabla.
- 1. ¿Puede la misma columna tener clave principal y restricción de clave externa en otra columna
- 2. ¿la clave externa siempre hace referencia a una clave única en otra tabla?
- 3. SortedList indexado por otra cosa que no sea la clave
- 4. MySQL - Usar clave externa como clave principal también
- 5. ¿Debería hacer que una columna de tabla autorreferencial sea una clave externa?
- 6. clave externa que hace referencia una clave principal 2 columnas en SQL Server
- 7. Clave externa de tabla SQL que es parte de una clave primaria compuesta
- 8. Pregunta principal compuesta/clave externa Oracle pregunta
- 9. clave externa en la tabla myisam alternativa?
- 10. clave externa cakephp no la clave primaria
- 11. ¿Alguna vez es una buena idea no tener una clave principal 'id' para una tabla?
- 12. ¿Cómo crear una clave externa que también es una clave principal en MySQL?
- 13. Clave principal/externa en Entity Framework
- 14. Seleccione todos los elementos en una tabla que no aparezcan en una clave externa de otra tabla
- 15. Backbone-relational: la clave de asociación no funcionará a menos que sea la misma que la clave externa
- 16. Clave principal de actualización del Servidor SQL que también es una clave externa en dos tablas
- 17. La clave externa en línea de Django no coincide con la clave primaria principal
- 18. mysqldump tabla sin volcar la clave principal
- 19. Para usar una clave externa en MySQL o no?
- 20. ¿Es posible establecer una restricción única como una clave externa en otra tabla?
- 21. ¿Obtener la clave principal de la tabla?
- 22. Clave externa para la clave compuesta
- 23. ¿Cómo se actualiza una tabla con una clave externa a otra tabla en el modelo de entidad ADO.Net?
- 24. Tamaño de clave principal/externa de MySQL?
- 25. clave principal y clave externa al mismo tiempo con la doctrina 2
- 26. Podemos negar un objeto java de la serialización que no sea la palabra clave transitoria
- 27. SQL - muchos-a-muchos tabla principal clave
- 28. ¿Cómo leer la clave principal de una clave externa sin cargar el elemento correspondiente?
- 29. cómo agregar una clave principal a una tabla en rieles
- 30. ¿Cómo hacer que una clave compuesta sea única?
¿Por qué le gustaría? – JeffO
no hay una razón específica para que alguien me pregunte esto y me confundí por eso solo quería saber que es eso – Mac
¿Por qué? Bueno, eso depende de cuáles sean tus razones para elegir una clave primaria: formalmente hablando, no hay una razón absoluta para elegir una clave principal sobre otra, por lo que no hay motivos particulares para decir por qué sería o no la misma. uno usado para referencias de claves extranjeras. Además, es potencialmente deseable en algunos casos utilizar más de una clave candidata por tabla como referencia de clave externa. En ese caso, una de esas referencias obviamente no es la clave principal, a menos que quiera llamar a más de una tecla la "primaria". – sqlvogel