44 votes

Clé primaire et clé étrangère en même temps

Serait-il possible dans SQL Server 2008 d'avoir une table créée avec 2 colonnes qui sont à la fois des clés primaires et étrangères ? Si oui, à quoi ressemblerait un tel code ? J'ai cherché et je n'ai rien trouvé.

61voto

Marnix van Valen Points 6197

Bien sûr pas de problème:

 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
);

Ceci est assez couramment utilisé pour modéliser des relations plusieurs-à-plusieurs.

3voto

user1483903 Points 35

Ce n'est probablement pas une bonne idée car vous souhaitez souvent autoriser les clés étrangères en double dans la table. Même si vous ne le faites pas maintenant, à l'avenir, vous pourriez le faire, alors il vaut mieux ne pas le faire. Voir Est-il acceptable d'avoir une clé étrangère comme clé primaire ?

1voto

KeithFearnley Points 71

Juste une note rapide - des pages Microsoft ( http://msdn.microsoft.com/en-us/library/ms189049.aspx )...

"Une contrainte de clé étrangère ne doit pas être liée uniquement à une contrainte de clé primaire dans une autre table ; elle peut également être définie pour référencer les colonnes d'une contrainte UNIQUE dans une autre table."

Pas souvent utilisé, mais utile dans certaines circonstances.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X