Meilleur auteur de réponses
comment créer 2 ou plusieurs clés étrangères dans une table sous SQL Server 2005

Question
-
bonjour, j'ai créé une table nommée "HumanResources.employe" qui contient une clé primaire nommée "id_employe" et 2 clés étrangères "id_client" et "adresse_client".En effet j'essaie de créer une seule contrainte de clé étrangere pour les 2 clés étrangeres(c'est faisable j'espere).voici ce que j'ai écrit:
CREATE TABLE HumanResources.employe
(
id_employe int CONSTRAINT pkemploye PRIMARY KEY,
adresse_client varchar(50) NOT NULL,
id_client int CONSTRAINT fkemploye FOREIGN KEY
REFERENCES CustomerDetails.client(id_client,adresse_client) NOT NULL
)
J'ai bien evidemment créer la table "client" d'abord .
Le probléme est que je recois le message d'erreur suivant:
Msg 8140, Level 16, State 0, Line 1
More than one key specified in column level FOREIGN KEY constraint, table 'HumanResources.employe'.
J'ai compris qu'on me dit qu'il ne peut pas y avoir 2 clés étrangères dans la table HumanResources.employe.
Maintenant j'aimerais savoir comment insérer 2 clés étrangères dans une même table.
Merci d'avance...
Réponses
-
Bonjour,
Vous ne pouvez pas créer une telle clé. (raison expliquée par Papy Normand)
J'attire votre attention sur votre modèle qui n'est pas normalisé. (voir 3FN). Vous risquez de générer inutilement de la redondance à moins que vous ayez un but très précis. En effet l'adresse du client dépend uniquement du champ id_client et non de votre clé primaire id_employe.
Le script suivant serait plus dans la norme à mon avis :
CREATE TABLE HumanResources.employe
(
id_employe int CONSTRAINT pkemploye PRIMARY KEY,
id_client int CONSTRAINT fkemploye FOREIGN KEY REFERENCES CustomerDetails.client(id_client) NOT NULL
)++
- Marqué comme réponse Roxana PANAITMicrosoft employee mercredi 22 juillet 2009 12:35
Toutes les réponses
-
Bonjour,
Je crois que vous avez un début de réponse avec :
- La clause REFERENCES d'une contrainte FOREIGN KEY au niveau des colonnes, ne peut lister qu'une colonne de référence. Cette colonne doit avoir le même type de données que la colonne pour laquelle la contrainte est définie.
- La clause REFERENCES d'une contrainte FOREIGN KEY de niveau table doit avoir le même nombre de colonnes de référence que le nombre de colonnes de la liste des colonnes de la contrainte. Le type de données de chaque colonne de référence doit également être identique à la colonne de référence correspondante dans la liste des colonnes
extrait de :
http://msdn.microsoft.com/fr-fr/library/ms174979(SQL.90).aspx
Avez-vous essayer d'utiliser Sql Server Management Studio pour créer des clés étrangères au lieu d'utiliser des scripts DDL en T-SQL ?
Les messages d'erreurs sont en général plus clairs
Bonne journée
- La clause REFERENCES d'une contrainte FOREIGN KEY au niveau des colonnes, ne peut lister qu'une colonne de référence. Cette colonne doit avoir le même type de données que la colonne pour laquelle la contrainte est définie.
-
Bonjour,
Vous ne pouvez pas créer une telle clé. (raison expliquée par Papy Normand)
J'attire votre attention sur votre modèle qui n'est pas normalisé. (voir 3FN). Vous risquez de générer inutilement de la redondance à moins que vous ayez un but très précis. En effet l'adresse du client dépend uniquement du champ id_client et non de votre clé primaire id_employe.
Le script suivant serait plus dans la norme à mon avis :
CREATE TABLE HumanResources.employe
(
id_employe int CONSTRAINT pkemploye PRIMARY KEY,
id_client int CONSTRAINT fkemploye FOREIGN KEY REFERENCES CustomerDetails.client(id_client) NOT NULL
)++
- Marqué comme réponse Roxana PANAITMicrosoft employee mercredi 22 juillet 2009 12:35