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

MS SQL Server Discussion :

foreign key en sql server


Sujet :

MS SQL Server

  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 57
    Par défaut foreign key en sql server
    bonsoir,
    j'ai crée deux tables T_VOL et t_ESCALE sous sql server2005

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    create table T_VOL(
    sa_Num_VOL int not null,
    sa_Dat_dep_VOL datetime not null,
     ...
    primary key(sa_Num_VOL,sa_Dat_dep_VOL)
    );
     
    create table T_ESCALE(
    sa_Num_VOL int  constraint fk_Num_VOL1 foreign key references T_VOL(sa_Num_VOL),
    sa_Dat_dep_ESC datetime constraint fk_Dat_dep_VOL1 foreign key references T_VOL(sa_Dat_dep_VOL),
    ...
    sa_Heu_dep_ESC datetime primary key
     
    );
    il m'affiche cet erreur
    Msg 1776, Level 16, State 0, Line 1
    There are no primary or candidate keys in the referenced table 'T_VOL' that match the referencing column list in the foreign key 'fk_Num_VOL1'.
    franchement j'ai pas connai la faute, surtout que le primary key de T_VOL est 2 champs; je connais seulement comment faire le Foreign key d'un seul champ
    merci de votre collaboration

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    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 998
    Billets dans le blog
    6
    Par défaut
    Une contrainte de clef étrangère se greffe sur une contrainte de clef primaire ou bien une contrainte d'unicité de la table mère.

    Or à l'évidence votre table mère T_VOL possède une contrainte de clef primaire MULTI COLONNE (sa_Num_VOL,sa_Dat_dep_VOL)...

    Il faut donc que la contrainte FK reprenne ces deux colonnes

    A lire sur les clefs étrangères : http://sqlpro.developpez.com/cours/s...partie2#L7.2.4

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 291
    Par défaut
    Que conseilles-tu lorsque la FK clef est multi-colonnes? Car dans mon cas, pour une plus grande lisibilité (humaine) c'est plus facile, de plus je ne comprends pas pourquoi le wizad de sql server 2008 permet de le faire en multi-colonnes mais pas de l'enregistrer je reçois le même message d'erreur.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 291
    Par défaut
    Je suis bête mais c'est quand même bizare.
    On sait utiliser plusieurs colonnes mais mais l'ordre des colonnes on de l'importance.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Table  A(
    Id_A int identity(1,1) primary key,
    FK B2 int not null ,
    DATA varchar(20)
    , constraint Primary key (id_A, FK_B2)
    )
     
     
    Table  B(
    Id_B_A int  not null,
    B2 int not null ,
    DATA varchar(20)
    , counstraint primary key(B1,B2) )
     
     
    ALTER TABLE B
    ADD CONSTRAINT fk_A_B
    FOREIGN KEY (ID_A,FK B2) 
    REFERENCES  B(Id_B_A,B2 )
    -----> Message d'erreur
    Mais si on inverse id avec le fk ca fonctionne Pourquoi ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ALTER TABLE B
    ADD CONSTRAINT fk_A_B
    FOREIGN KEY (FK B2,ID_A) 
    REFERENCES  B(B2,Id_B_A )
    Merci

  5. #5
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    Lorsque l'on définit une clef primaire, un index est automatiquement généré et dans un index, l'ordre d'insertion des colonnes dans celui-ci à de l'importance.
    Il ne sera pas construit de la même manière en fonction de l'ordre de définition des colonnes.

Discussions similaires

  1. [SQL server CE] Créer foreign key graphiquement
    Par afrodje dans le forum VB.NET
    Réponses: 2
    Dernier message: 03/04/2009, 11h23
  2. [SQL Server 2005] Mais où se cache le MASTER KEY ?
    Par Chauve souris dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/06/2007, 18h40
  3. auto-incrémentation sur une primary key avec sql server
    Par pops4 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 24/05/2007, 14h24
  4. [SQL] FOREIGN KEY lors de la création de la base
    Par R.L. dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 31/05/2006, 15h36
  5. [SQL SERVER duplicate key]
    Par snetechen dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 05/01/2006, 10h20

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