none
comment créer 2 ou plusieurs clés étrangères dans une table sous SQL Server 2005 RRS feed

  • 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...
    mercredi 3 décembre 2008 00:45

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
    )

     

    ++

     

     

    dimanche 18 janvier 2009 09:58
    Modérateur

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

samedi 13 décembre 2008 23:25
  • 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
    )

     

    ++

     

     

    dimanche 18 janvier 2009 09:58
    Modérateur