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é étrangère] Référence 1 seul champ d'une clé double...


Sujet :

PostgreSQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 20
    Points : 42
    Points
    42
    Par défaut [Clé étrangère] Référence 1 seul champ d'une clé double...
    Salut,
    Voila mon pb:
    J'ai une table Famille_Produit avec une clé primaire double (2 champs) et je veux ne référencer qu'un de ces champs dans ma clé étrangère d'une table Produit.

    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
     
    CREATE TABLE produit (
        id_produit INT4 DEFAULT NEXTVAL('seq_id_produit') NOT NULL,
        id_famille_produit INT4 NOT NULL,
        nom_article VARCHAR(40),
        PRIMARY KEY (id_produit)
    );
    CREATE TABLE famille_produit (
        id_famille_produit INT4 DEFAULT NEXTVAL('seq_id_famille') NOT NULL,
        id_langue INT4 NOT NULL,
        nom_famille VARCHAR(40),
        PRIMARY KEY (id_famille_produit, id_langue)
    );
    ALTER TABLE produit
        ADD FOREIGN KEY (id_famille_produit) REFERENCES famille_produit (id_famille_produit);
    Réponse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ERROR:  UNIQUE constraint matching given keys for referenced table "famille_produit" not found
    y a t'il un moyen de "forcer" la clé étrangère?

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 176
    Points : 258
    Points
    258
    Par défaut
    Pouvez vous essayer ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE produit ADD COLUMN id_famille_produit INT4 REFERENCES famille_produit (id_famille_produit);
    En effet, le champ id_famille_produit seul, n'est pas cle de la table famille_produit et ne peut donc pas être clé etrangère dans une autre table.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 176
    Points : 258
    Points
    258
    Par défaut
    Ou alors directement lors de la création de la table

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE produit (
        id_produit INT4 DEFAULT NEXTVAL('seq_id_produit') NOT NULL,
        id_famille_produit INT4 NOT NULL references famille_produit(id_famille_produit),
        nom_article VARCHAR(40),
        PRIMARY KEY (id_produit)
    );

Discussions similaires

  1. Réponses: 4
    Dernier message: 28/01/2009, 12h59
  2. Load d'un seul champ d'une structure
    Par nahouto dans le forum MATLAB
    Réponses: 5
    Dernier message: 08/01/2009, 16h07
  3. Remplir un seul champ d'une table en une requête
    Par Lenezir dans le forum Langage SQL
    Réponses: 4
    Dernier message: 16/02/2008, 14h32
  4. comment inserer un seul champ d'une table dans une autre
    Par kesamba dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 05/12/2007, 04h48
  5. delete un seule champs d'une table
    Par speedylol dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 17/02/2006, 11h50

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