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

Requêtes et SQL. Discussion :

probleme clef primaire et etrangere pour creation table


Sujet :

Requêtes et SQL.

  1. #1
    Invité
    Invité(e)
    Par défaut probleme clef primaire et etrangere pour creation table
    Bonsoir

    J'ai un bug avec ma clef primaire et etrangere , le compilateur trouve une erreur sur le constraint de " idanimal " , je ne voit d'ou peux venir l'erreur

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    CREATE TABLE [LISTE_ANIMAUX]
    ( [typeanimal] TEXT(70),
    CONSTRAINT [PRIMARY KEY] PRIMARY KEY ( [typeanimal]) ) ; 
     
     
    CREATE TABLE [CLIENT]
    ( [numclient ] TEXT(70) ,
    [typeclient ] LONG,
    [nomclient ] TEXT(70),
    [rue] TEXT (70),
    [localite] TEXT(70),
    [departement] TEXT(70),
    [codepostal] TEXT(70),
    [telephone] TEXT(70),
    [siteweb] TEXT(70),
    [clientdepuis ] DATETIME,
    [remise ] LONG,
    [balance] LONG, 
    CONSTRAINT [PRIMARY KEY] PRIMARY KEY ( [numclient] ) ) ;
     
     
    CREATE TABLE [ANIMAL]
    ( [idanimal] TEXT(70),
    [numclient] TEXT (70),
    [nomanimal] TEXT(70),
    [typeanimal] TEXT(70),
    [race] TEXT(70),
    [dn] DATETIME,
    [sexe] TEXT(70),
    [couleur] TEXT(70),
    [sterilisation] YESNO,
    [taille] LONG,
    [poids] LONG ,
    [decede] YESNO,
    [commentaires] TEXT (250),
    CONSTRAINT [FOREIGN KEY] FOREIGN KEY ( [numclient] )
    CONSTRAINT [PRIMARY KEY ] PRIMARY KEY ([idanimal] ) ) ;
    merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 128
    Points : 31 675
    Points
    31 675
    Billets dans le blog
    16
    Par défaut
    Votre clause FOREIGN KEY est incomplète :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CONSTRAINT [FOREIGN KEY] FOREIGN KEY ( [numclient] )
    Il manque la partie REFERENCES CLIENT.

    A noter que des attributs de type TEXT(70) qui entrent dans la composition des clés primaires ça n'est pas du tout conseillé. Il est d'usage en l'occurrence que ces attributs soient du type INTEGER (ou apparenté, LONG INTEGER par exemple).

    Par ailleurs, se souvenir que les attributs qui entrent dans la composition des clés primaires doivent être NOT NULL.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonsoir

    j'ai encore un souci avec mes clefs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE [DETAIL_VISITE]
    ( [numvis] TEXT(70) REFERENCES VISITE ( [numvis] ),
    [numlig] LONG,
    [typevisite] TEXT(70)	,
    [codetrai] LONG REFERENCES TRAITEMENT ( [codetrai] )  ,
    [codemedi] LONG  REFERENCES MEDICAMENT ( [codemedi] ) ,
    CONSTRAINT [PRIMARY KEY] PRIMARY KEY ( [numlig])) ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE TABLE VISITE 
     
    ( [numvis] TEXT(70) ,
    [idanimal] TEXT(70) REFERENCES ANIMAL ( [idanimal] ) ,
    [datevisite] DATETIME,
    [typesuivi] TEXT(70),
    [datesuivi] DATETIME,
    [typepaiement] MONEY,
    [datepaiement] DATETIME,
    [envoi] YESNO,
    [details] TEXT(70) ,
    CONSTRAINT [PRIMARY KEY] PRIMARY KEY ( [numvis] )  );
    Dans la table "detail_visite" j'ai logiquement 2 clef primaire (numvis et numlig ). Petit probleme (numvis) qui est clef primaire dans "visite" doit être aussi clef primaire mais aussi êtrangére en la table "detail_visite" .

    Hors si je fais cette manip je me retrouve avec un message d'erreur du type :
    " instruction ou constrainte non trouvée "

    Pour remedier au probleme je propose ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    CREATE TABLE [DETAIL_VISITE]
    ( [numvis] TEXT(70) REFERENCES VISITE ( [numvis] ),
    [numlig] LONG,
    [typevisite] TEXT(70)	,
    [codetrai] LONG REFERENCES TRAITEMENT ( [codetrai] )  ,
    [codemedi] LONG  REFERENCES MEDICAMENT ( [codemedi] ) ,
    CONSTRAINT [PRIMARY KEY] PRIMARY KEY ( [numlig]),
    CONSTRAINT [FOREIGN KEY] FOREIGN KEY ( [numvis] ) ) ;
    ou alors ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TABLE [DETAIL_VISITE]
    ( [numvis] TEXT(70),
    [numlig] LONG,
    [typevisite] TEXT(70)	,
    [codetrai] LONG REFERENCES TRAITEMENT ( [codetrai] )  ,
    [codemedi] LONG  REFERENCES MEDICAMENT ( [codemedi] ) ,
    CONSTRAINT [PRIMARY KEY] PRIMARY KEY ( [numlig]),
    CONSTRAINT [FOREIGN KEY] FOREIGN KEY ( [numvis] ) ) ;
    Je tiens à préciser que "numvis" et bien du type text/varchar c'est des nombres de la forme avec tirait " 00000-00 " .

    Merci d'avance

  4. #4
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 128
    Points : 31 675
    Points
    31 675
    Billets dans le blog
    16
    Par défaut
    Bonsoir,


    Citation Envoyé par tanaka59 Voir le message
    Dans la table "detail_visite" j'ai logiquement 2 clef primaire (numvis et numlig ).
    Non. Nuance, vous avez une clé primaire composée des deux attributs numvis et numlig. Il faut donc coder :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE [DETAIL_VISITE]
    ( [numvis] TEXT(70) REFERENCES VISITE ( [numvis] ),
    [numlig] LONG,
    [typevisite] TEXT(70),
    [codetrai] LONG REFERENCES TRAITEMENT ( [codetrai] )  ,
    [codemedi] LONG  REFERENCES MEDICAMENT ( [codemedi] ) ,
    CONSTRAINT [PRIMARY KEY] PRIMARY KEY ( [numvis], [numlig])) ;


    Citation Envoyé par tanaka59 Voir le message
    Petit probleme (numvis) qui est clef primaire dans "visite" doit être aussi clef primaire mais aussi êtrangére en la table "detail_visite".
    Il n’y a aucun problème. Un attribut de l’en-tête d’une table peut très bien à la fois entrer dans la composition de la clé primaire de cette table et dans la composition d’une clé étrangère :

    L’attribut numvis entre ainsi dans la composition de la clé primaire {numvis, numlig} de la table DETAIL_VISITE et dans la clé étrangère {numvis} qui fait référence à la table VISITE.


    Citation Envoyé par tanaka59 Voir le message
    Je tiens à préciser que "numvis" et bien du type text/varchar c'est des nombres de la forme avec tirait " 00000-00 "
    Que l’attribut numvis soit du type TEXT ou VARCHAR, avec des traits tout partout, ça n'est pas un problème, mais faites en une clé alternative (l'unicité des valeurs sera garantie par le SGBD). En pratique, une clé primaire ne doit pas pouvoir être manipulée par les utilisateurs :

    Table VISITE. Clé primaire : {VisiteId} ; clé alternative (doublons interdits là aussi) : {numvis}

    Code SQL : 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 VISITE 
     
    ( [numvis] TEXT(70) ,
    [idanimal] TEXT(70) REFERENCES ANIMAL ( [idanimal] ) ,
    [datevisite] DATETIME,
    [typesuivi] TEXT(70),
    [datesuivi] DATETIME,
    [typepaiement] MONEY,
    [datepaiement] DATETIME,
    [envoi] YESNO,
    [details] TEXT(70) ,
    [VisiteId] LONG,
    CONSTRAINT [PRIMARY KEY] PRIMARY KEY ( [VisiteId] ),
    CONSTRAINT [UNIQUE] UNIQUE ([numvis])) ;

    Table DETAIL_VISITE. Clé primaire : {VisiteId, numlig} ; clé étrangère : {VisiteId}

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE [DETAIL_VISITE]
    ([VisiteId] LONG REFERENCES VISITE ( [VisiteId] ),
    [numlig] LONG,
    [typevisite] TEXT(70),
    [codetrai] LONG REFERENCES TRAITEMENT ( [codetrai] )  ,
    [codemedi] LONG  REFERENCES MEDICAMENT ( [codemedi] ) ,
    CONSTRAINT [PRIMARY KEY] PRIMARY KEY ( [VisiteId], [numlig])) ;



    Bonne lecture.

Discussions similaires

  1. probleme clé primaire, clé etrangere
    Par Francky44003 dans le forum Débuter
    Réponses: 3
    Dernier message: 18/07/2012, 15h10
  2. Clef primaire unique pour table mère et fille
    Par K-LiBR3 dans le forum SQL
    Réponses: 5
    Dernier message: 07/11/2011, 18h40
  3. [GD] Probleme d'utilisation de la bibliotheque GD pour creation image
    Par SL_Fredouille dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 07/06/2006, 01h06
  4. Comment comment définir une clef primaire dans une table??
    Par nek_kro_kvlt dans le forum Bases de données
    Réponses: 4
    Dernier message: 07/02/2005, 22h06
  5. récupérer la clef primaire d'une table
    Par orionis69 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 28/02/2004, 14h00

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