IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Déclarer une clé étrangère sous SQL server 2005


Sujet :

Développement SQL Server

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2011
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 10
    Points : 8
    Points
    8
    Par défaut Déclarer une clé étrangère sous SQL server 2005
    Bonsoir à tous , je veux déclarer une clé étagère sous SQL server 2005 mais j'ai un souci , en fait cette FK est récurrente dans 3 tables , j'ai réussi à créer la première table mais dans la seconde j'ai ce message

    Msg 2714, Level 16, State 4, Line 2
    There is already an object named 'Id_communes' in the database.
    Msg 1750, Level 16, State 0, Line 2
    Could not create constraint. See previous errors.


    sachant que j'utilise ce code

    constraint Id_communes foreign key (Id_communes) references communes(Id_communes),

    communes étant une table que j'ai crée et dont la PK est Id_communes , alors en créant ma seconde table dans laquelle Id_communes est une FK , ça passe mais dans la nouvelle table , j'obtiens le message d’erreur,que j'ai cité plus haut , merci d'avance pour votre aide .

  2. #2
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    en fait cette FK est récurrente dans 3 tables
    Ceci n'a pas de sens, la FK est différente pour chaque table puisqu'elle est précisemment sur trois tables différentes
    There is already an object named 'Id_communes' in the database.
    C'est simple, une contrainte FOREIGN KEY doit avoir un nom unique sur ta base...

    En général on la nomme quelques chose comme: FK_NOMTABLEFILLE_NOMTABLE_MERE
    Ce qui t'assure d'avoir un nom unique sur ta base...


    En clair il te suffit de nommer différemment tes trois FK...

  3. #3
    Futur Membre du Club
    Inscrit en
    Janvier 2011
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par mia06 Voir le message
    Bonsoir à tous , je veux déclarer une clé étagère sous SQL server 2005 mais j'ai un souci , en fait cette FK est récurrente dans 3 tables , j'ai réussi à créer la première table mais dans la seconde j'ai ce message

    Msg 2714, Level 16, State 4, Line 2
    There is already an object named 'Id_communes' in the database.
    Msg 1750, Level 16, State 0, Line 2
    Could not create constraint. See previous errors.


    sachant que j'utilise ce code

    constraint Id_communes foreign key (Id_communes) references communes(Id_communes),

    communes étant une table que j'ai crée et dont la PK est Id_communes , alors en créant ma seconde table dans laquelle Id_communes est une FK , ça passe mais dans la nouvelle table , j'obtiens le message d’erreur,que j'ai cité plus haut , merci d'avance pour votre aide .
    Citation Envoyé par iberserk Voir le message
    Ceci n'a pas de sens, la FK est différente pour chaque table puisqu'elle est précisemment sur trois tables différentes


    C'est simple, une contrainte FOREIGN KEY doit avoir un nom unique sur ta base...

    En général on la nomme quelques chose comme: FK_NOMTABLEFILLE_NOMTABLE_MERE
    Ce qui t'assure d'avoir un nom unique sur ta base...


    En clair il te suffit de nommer différemment tes trois FK...

    merci pour ton aide mais comme je suis une vraie tâche en BDD et que j'ai trouvé 30 façon de déclarer une FK sur le net je me retrouve à errer comme une âme en peine sur les forums et le pire c'est que je parle Anglais ..

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    En ce qui concerne l'ajout de contraintes à des tables qui existent déjà, j'ai donné comment ajouter chacune d'entre-elles ici, ce que l'on trouve facilement avec un moteur de recherche, en Français

    Msg 2714, Level 16, State 4, Line 2
    There is already an object named 'Id_communes' in the database.
    Msg 1750, Level 16, State 0, Line 2
    Could not create constraint. See previous errors.
    Ceci suggère qu'il existe déjà un objet (contrainte, table, vue, trigger, procédure stockée, fonction) portant déjà ce nom.
    Les noms des objets doivent être unique dans un schéma de base de données.
    Pour le savoir, et en supposant que vous êtes sous SQL Server 2005 ou 2008 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT		S.name AS nom_schema
    		, O.name AS nom_objet
    		, O.type_desc AS type_objet
    FROM		sys.objects AS O
    INNER JOIN	sys.schemas AS S ON O.schema_id = S.schema_id
    WHERE		O.name = 'Id_communes'
    Pouvez-vous donner la structure de vos 4 tables, ainsi que la liste des relations que vous voulez créer ? J'ai publié un tutoriel ici à ce sujet (ne scriptez pas les données, nous n'en avons pas besoin).

    @++

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 856
    Points : 52 992
    Points
    52 992
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par iberserk Voir le message
    C'est simple, une contrainte FOREIGN KEY doit avoir un nom unique sur ta base...
    C'est faux.... une contrainte doit avoir un nom unique au sein du SCHEMA SQL (norme SQL) et non de la base.

    Démo :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    USE tempdb;
    GO
     
    CREATE TABLE dbo.T0 (K INT PRIMARY KEY);
    CREATE TABLE dbo.T1 (K1 INT CONSTRAINT FK FOREIGN KEY REFERENCES dbo.T0 (K));
     
    CREATE SCHEMA S1
    CREATE TABLE T1 (K1 INT CONSTRAINT FK FOREIGN KEY REFERENCES dbo.T0 (K));
     
    CREATE SCHEMA S2
    CREATE TABLE T1 (K1 INT CONSTRAINT FK FOREIGN KEY REFERENCES dbo.T0 (K));
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_TYPE = 'FOREIGN KEY'
    Résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CONSTRAINT_CATALOG      CONSTRAINT_SCHEMA     CONSTRAINT_NAME   
    ----------------------- --------------------- ------------------
    tempdb                  dbo                   FK                
    tempdb                  S1                    FK                
    tempdb                  S2                    FK
    A +

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 856
    Points : 52 992
    Points
    52 992
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par mia06 Voir le message
    merci pour ton aide mais comme je suis une vraie tâche en BDD et que j'ai trouvé 30 façon de déclarer une FK sur le net je me retrouve à errer comme une âme en peine sur les forums et le pire c'est que je parle Anglais ..
    Le mieux serait de commencer à apprendre SQL ! Mon site web, comme mon livre peuvent vous y aider...
    Notamment : http://sqlpro.developpez.com/cours/s...partie2#L7.1.7

    A +

  7. #7
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    C'est faux.... une contrainte doit avoir un nom unique au sein du SCHEMA SQL (norme SQL) et non de la base.

    Certes... il faut être précis même si je doute que la notion de schéma lui parle ici...

  8. #8
    Futur Membre du Club
    Inscrit en
    Janvier 2011
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Merci pour votre aide messieurs , vous m'avez été d'un grand secours

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Performance d'une requête sous SQL Server 2005
    Par Menoto dans le forum Développement
    Réponses: 4
    Dernier message: 20/03/2008, 09h58
  2. Performance d'une requête sous SQL Server 2005
    Par Menoto dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 20/03/2008, 09h58
  3. création d'une table de fait sous sql server 2005
    Par kev0631 dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 19/07/2007, 14h45
  4. Réponses: 5
    Dernier message: 03/07/2007, 14h43
  5. Réponses: 1
    Dernier message: 13/12/2006, 14h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo