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és étrangères


Sujet :

PostgreSQL

  1. #1
    Membre régulier Avatar de greg64
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 154
    Points : 103
    Points
    103
    Par défaut clés étrangères
    comment dois je faire sur phppgadmin pour que mes clés étrangéres ne soient pas saisies sur la table car ma cardinalité est 0,1

  2. #2
    Membre habitué Avatar de champijulie
    Inscrit en
    Mai 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 147
    Points : 131
    Points
    131
    Par défaut
    Pourrais-tu être un peu plus précis? Je ne vois pas de quelle cardinalité tu parles.
    @+
    champijulie

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 13
    Points : 16
    Points
    16
    Par défaut
    Evidemment moi aussi je ne vois pas de quoi tu veux parler.

  4. #4
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 13
    Points : 16
    Points
    16
    Par défaut
    Tu peux créer une table auxiliaire pour enregistrer tes clés.
    Supposons les tables Pere(NP) et Enfants(NE) la table Estenfant associant les deux auront pour clés NP et NE.
    Si la cardinalite est de o,1 comme ici latable Estenfant aura seulement pour clé NE car un enfant as un seul père.

    create table Pere (
    NP serial primary key,
    nom varchar[20]);

    create table Enfant (
    NE serial primary key,
    prenom varchar);

    create table Estenfant (
    NE integer references Enfants(NE) primary key,
    NP integer references Pere(NP));

  5. #5
    Membre régulier Avatar de greg64
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 154
    Points : 103
    Points
    103
    Par défaut repondre
    dans mon schéma entité association mes cardinalités entre deux table sont 0,n et 0,1.
    donc dans mon schéma relationnel la clé primaire de lune de mes tables devient clé étrangère de lautre.
    mais comme la cardinalité est 0,1 et non pas 1,1 sa valeur n'est donc pas obligatoire.
    comment puis je faire

    merci

    jespere que vous comprenez

  6. #6
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 13
    Points : 16
    Points
    16
    Par défaut

    Supposons que c'est la table2 qui a le cardinal 0,1 et que le nom de la clé de la table1 est id. Que la colonne qui doit normalement etre clé étrangère dans table2 porte le même nom id mais ne réfference pas la table1.
    Crée une fonction trigger avec les contraintes suivantes:
    check(id='' or id= (select id from table1))
    Crée ensuite un trigger qui va maintenant s'appliquer sur la table2
    create trigger verification
    after insert or update on table2
    for each row execute fonctiontigger;

  7. #7
    Nouveau membre du Club
    Inscrit en
    Janvier 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Janvier 2005
    Messages : 41
    Points : 38
    Points
    38
    Par défaut
    Sur cet exemple la cardinalité de la relation categorie /produit
    est 0,1

    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
     
    CREATE TABLE categorie
    (
      cat_id serial NOT NULL,
      cat_label varchar,
      CONSTRAINT categorie_pkey PRIMARY KEY (cat_id)
    ) 
     
    CREATE TABLE produit
    (
      pro_id serial NOT NULL,
      pro_label varchar,
      cat_id int4,
      CONSTRAINT produit_pkey PRIMARY KEY (pro_id),
      CONSTRAINT "$1" FOREIGN KEY (cat_id) REFERENCES categorie (cat_id) ON UPDATE RESTRICT ON DELETE CASCADE
    )
    Dans ce cas tu peux faire un INSERT dans la table produit
    - si cat_id existe dans la table categorie
    ou
    - si cat_id est NULL

    Si tu veux faire une relation 1,1 entre les 2 tables il faudrait spécifier pour la table produit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      cat_id int4 NOT NULL

    Dans ce cas tu peux faire un INSERT dans la table produit uniquement si cat_id existe dans la table categorie.

    J'espere avoir répondu a ta question


    Moog

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

Discussions similaires

  1. Suppression Index, Clés étrangères, etc....
    Par nodule dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/11/2004, 09h42
  2. Contraintes de clés étrangères non respectées
    Par parfait dans le forum Requêtes
    Réponses: 7
    Dernier message: 28/07/2004, 12h48
  3. [EJB2.1 Entity] [BES] Mapping automatique et clés étrangères
    Par Bobby McGee dans le forum Java EE
    Réponses: 3
    Dernier message: 15/10/2003, 10h33
  4. 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
  5. [Script]prob de clés étrangères
    Par Seb7 dans le forum Langage SQL
    Réponses: 13
    Dernier message: 08/07/2003, 17h37

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