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, comment un tel code? J'ai cherché et est venu avec rien.

34
demandé sur Eduard Luca 2012-01-13 01:51:13

4 réponses

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

c'est assez couramment utilisé pour modéliser les relations de plusieurs à plusieurs.

47
répondu Marnix van Valen 2012-01-12 22:08:47

ce sont des constructions totalement différentes.

Un Clé Primaire est utilisé pour renforcer l'unicité au sein d'une table, et d'un identifiant unique pour un enregistrement précis.

Un Clé Étrangère est utilisé pour l'intégrité référentielle, afin de s'assurer qu'une valeur existe dans une autre table.

la clé étrangère doit renvoyer à la clé primaire dans un autre tableau.

si vous vous voulez avoir une clé étrangère qui est aussi unique, vous pouvez faire une contrainte FK et Ajouter un index/contrainte unique à ce même champ.

à titre de référence, SQL Server permet à un FK de faire référence à un champ UNIQUE CONSTRAINT ainsi qu'à un champ PRIMARY KEY .

7
répondu JNK 2012-01-12 21:57:33

ce n'est probablement pas une bonne idée car souvent vous voulez permettre de dupliquer des clés étrangères dans la table. Même si tu ne le fais pas maintenant, dans le futur, tu pourrais, donc mieux ne pas le faire. Voir c'Est bien d'avoir de clé étrangère en tant que clé primaire?

3
répondu thebiggestlebowski 2017-05-23 12:34:53

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

" une contrainte de clé étrangère ne doit pas nécessairement être liée uniquement à une contrainte de clé primaire dans un autre tableau; elle peut également être définie pour renvoyer aux colonnes d'une contrainte UNIQUE dans un autre tableau."

pas utilisé souvent, mais utile dans certaines circonstances.

1
répondu KeithFearnley 2014-06-02 09:11:27