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

PostgreSQL Discussion :

Clé primaire composées de plusieurs clés étrangères


Sujet :

PostgreSQL

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Novembre 2006
    Messages : 60
    Points : 41
    Points
    41
    Par défaut Clé primaire composées de plusieurs clés étrangères
    Bonjour,

    je suis au niveau de la conception de ma base de données. Et donc je ne l'ai pas encore implémentée.

    Je dispose de trois tables (periode, lieu et r_lieu_lieu_periode). r_lieu_periode est composées de trois champs (per_id, lieu_id_parent, lieu_id_enfant), de plus cette table est issus d'une relation ternaire (lieu, lieu (récursive) et periode).

    Donc ma clé primaire est l'ensemble des clé étrangères (per_id, lieu_id_parent, lieu_id_enfant). Dans certains cas, la clé étrangère per_id, ne sera pas nécessaire.

    Est-il possible avec PostGreSQL d'avoir une clé primaire composée d'un champs vide ???
    Exemplae : lieu_id_parent = 2, lieu_id_enfant = 5, per_id = null

    N'hésitez pas à me demander plus d'explication si vous ne comprenez pas mon problème.

    En attente de vous lire en retour,

    2berte

  2. #2
    Membre à l'essai
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    20
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 20
    Points : 23
    Points
    23
    Par défaut
    Je ne pense pas, il y a peut être un problème de conception.
    Une clé étrangère faisant référence à une clé primaire qui ne peut être NULL, lors de l'insertion d'une ligne dans la table avec un NULL, tu violeras une contrainte d'intégrité des données.

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Non il n'est pas possible d'avoir une clef primaire avec des champs null.
    Mais il est possible d'avoir un index unique avec des champs null.
    c.a.d tu peux faire CREATE UNIQUE INDEX idx ON t(a,b,c)
    et insérer (1,2,null).
    Mais il faut voir que le test d'unicité est court-circuité dès qu'une des valeurs est à null. c.a.d que tu peux insérer N fois (1,2,null) mais pas 2 fois (1,2,3) ou n'importe quel autre triplet sans aucun null dedans.
    Si c'est ce que tu cherches, super, sinon un changement de conception de tes tables s'impose certainement.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2006
    Messages : 83
    Points : 59
    Points
    59
    Par défaut
    Je pense que tu as un problème de conception. Peut-être que per_id doit rester une clé étrangère , et dans ce cas il peut être NULL.

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/04/2011, 13h23
  2. Réponses: 8
    Dernier message: 26/03/2008, 16h58
  3. Réponses: 2
    Dernier message: 14/12/2007, 22h38
  4. insertion dans table avec plusieurs clés étrangères
    Par philippe281281 dans le forum Administration
    Réponses: 2
    Dernier message: 14/06/2006, 18h35
  5. clé primaire composée de 2 clés étrangères
    Par Tigresse dans le forum Installation
    Réponses: 5
    Dernier message: 28/07/2003, 14h38

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