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é.
Réponses
Trop de publicités?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.
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 ?
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.