¿Sería posible en SQL Server 2008 tener una tabla creada con 2 columnas que son al mismo tiempo claves primarias y externas? En caso afirmativo, ¿cómo se vería ese código? He buscado y no encontré nada.Clave primaria y externa al mismo tiempo
Respuesta
Claro, no hay problema:
CREATE TABLE dbo.[User]
(
Id int NOT NULL IDENTITY PRIMARY KEY,
Name nvarchar(1024) NOT NULL
);
CREATE TABLE [Group]
(
Id int NOT NULL IDENTITY PRIMARY KEY,
Name nvarchar(1024) NOT NULL
);
CREATE TABLE [UserToGroup]
(
UserId int NOT NULL,
GroupId int NOT NULL,
PRIMARY KEY CLUSTERED (UserId, GroupId),
FOREIGN KEY (UserId) REFERENCES [User] (Id) ON UPDATE NO ACTION ON DELETE CASCADE,
FOREIGN KEY (GroupId) REFERENCES [Group] (Id) ON UPDATE NO ACTION ON DELETE CASCADE
);
Esto se usa muy comúnmente para modelar muchos-a-muchos de relaciones.
Al igual que un FYI, en 'information_schema.key_column_usage' para la tabla' UserToGroup', tanto 'UserID' como' GroupID 'devolverán dos filas cada una ... una para PK, una para FK ... [en referencia a ...] (http://stackoverflow.com/a/15622288/623952) –
Estas construcciones son totalmente diferentes.
A La clave principal se utiliza para imponer la exclusividad dentro de una tabla y ser un identificador único para un determinado registro.
A La clave externa se utiliza para integridad referencial, para asegurarse de que exista un valor en otra tabla.
La clave externa necesita hacer referencia a la clave primaria en otra tabla.
Si desea tener una clave externa que también sea única, puede hacer una restricción FK y agregar un índice/restricción único al mismo campo.
Como referencia, SQL Server permite que un FK haga referencia a un UNIQUE CONSTRAINT
, así como a un campo PRIMARY KEY
.
Sólo una nota rápida - de las páginas de Microsoft (http://msdn.microsoft.com/en-us/library/ms189049.aspx) ...
"Una restricción de clave externa no tiene que estar vinculado únicamente a una restricción de clave primaria en otra tabla, sino que también se puede definir para hacer referencia las columnas de una restricción ÚNICA en otra tabla ".
No se usa con frecuencia, pero es útil en algunas circunstancias.
Probablemente no sea una buena idea ya que a menudo quiere permitir la duplicación de claves foráneas en la tabla. Incluso si no lo hace ahora, en el futuro, podría, así que mejor no hacer esto. Consulte Is it fine to have foreign key as primary key?
¿Por qué no? Al igual que el enlace que has puesto, dice que hay casos como relación de 1 a 1 en los que puede ser necesario –
No dije que SIEMPRE es una mala idea;) Tienes razón, puede haber excepciones donde lo hará siempre sea un 1: 1. Mi comentario está aquí para hacer que las personas piensen en la opción correcta para ellos. – thebiggestlebowski
- 1. clave principal y clave externa al mismo tiempo con la doctrina 2
- 2. Cómo cambiar el valor de la clave principal y actualizar la clave externa al mismo tiempo
- 3. clave externa cakephp no la clave primaria
- 4. Usar clave primaria compuesta como clave externa
- 5. Clave primaria múltiple de ScalaQuery y clave externa
- 6. Clave primaria compuesta, clave externa. ¿Referencia a objeto o clave?
- 7. clave externa Hibernate como parte de la clave primaria
- 8. clave primaria versus clave
- 9. diferencias entre "clave externa" y "restricción de clave externa"
- 10. Foldmethod = marcador y sintaxis al mismo tiempo?
- 11. jQuery: ¿objeto y función al mismo tiempo?
- 12. Cómo ACTUALIZAR y SELECCIONAR al mismo tiempo
- 13. VIM: ¿Guardar y ejecutar al mismo tiempo?
- 14. Reproducir y grabar audio al mismo tiempo
- 15. ¿Usar accept() y select() al mismo tiempo?
- 16. Estirable y Patrón UIImage al mismo tiempo
- 17. Conexión USB y depuración al mismo tiempo
- 18. fadeOut() y slideUp() al mismo tiempo?
- 19. ¿Puedo seleccionar y actualizar al mismo tiempo?
- 20. perlbrew y local :: lib al mismo tiempo?
- 21. usando onTouch y onCreateContextMenu al mismo tiempo
- 22. clave primaria compuesta
- 23. IntegrityError: violación de clave externa al eliminar
- 24. MySQL: ¿Cómo encontrar dónde se usa una clave primaria específica como clave externa en otras tablas?
- 25. Clave externa de tabla SQL que es parte de una clave primaria compuesta
- 26. La clave externa en línea de Django no coincide con la clave primaria principal
- 27. clave primaria compuesta de PostgreSQL
- 28. Django: list_filter y campos de clave externa
- 29. Consulta de criterios de Hibernate usando proyección Max() en campo clave y grupo por clave primaria externa
- 30. NHibernate - Nombre ¿Restricción de clave primaria?
¿Quiere decir cómo sería el SQL para crear la tabla? –
Este es un caso muy común en los marcos ORM que soportan mapeo de herencia haciendo mapeo de tabla por clase. Por ejemplo, si una clase B hereda de una clase A y se mapean a table_a y table_b, es común que las instancias de B tengan el mismo id en table_a y table_b, y table_b define un FK en su columna id en la table_a columna de id. Intente definir el FK y el PK utilizando SQLServer Management Studio. –