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 :

Créer une clé secondaire avec deux colonnes en même temps


Sujet :

PostgreSQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Novembre 2014
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur après-vente

    Informations forums :
    Inscription : Novembre 2014
    Messages : 367
    Points : 9
    Points
    9
    Par défaut Créer une clé secondaire avec deux colonnes en même temps
    Bonjour,

    Avec postgres et pgadmin3 je ne parviens pas à lier les deux colonnes numclictr et numctr toutes les deux ensemble en tant que clé étrangère à la table CONTRAT. Voici ci-dessous mon code qui n'est pas accepté (avec le message d'erreur de pgadmin) et les tables en question :


    Nom : sgbdcle.jpg
Affichages : 1236
Taille : 47,7 Ko


    Nom : sgbdcle2.jpg
Affichages : 2362
Taille : 197,0 Ko


    Merci pour votre aide.

  2. #2
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Il est préférable d'attendre qu'un autre membre avec une grande expérience dans le domaine.
    Cependant, les clés étrangères composites sont souvent une mauvaise idées.

    Il serai peut-être plus prudent d'ajouter un ID technique ou simplement se basé sur le numéro de contrat. Il y a bien une contrainte d'unicité sur les numéro de contrat non ?

    De plus, d'un point de vue conception métier, est-il normal d'avoir deux champs "client" pour un même véhicule ? Que ce passe-t-il si le client du contrat n'est pas celui de la voiture ?

    Quand la voiture change de "client" le client de la voiture est-il mise à jour ?
    Ne serait-il pas plus logique qu'un contrat soit pointe vers une voiture et non l'inverse ? Est-il possible d'avoir plusieurs voiture pour un même contrat ? Et inversement ?

    Cordialement,
    Patrick Kolodziejczyk.

    Note :
    Cette question aurai plus sa place dans le forum Langage SQL
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Novembre 2014
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur après-vente

    Informations forums :
    Inscription : Novembre 2014
    Messages : 367
    Points : 9
    Points
    9
    Par défaut
    Merci pour la réponse mais j'ai vraiment besoin d'effectuer l'opération contenue dans ma question initiale toutes choses égales par ailleurs.

  4. #4
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Peux-tu nous donner l'ensemble du SQL utilisé pour la déclaration de tables / index en utilisant la balise code ? (Bouton # dans l'éditeur)
    De même peut-tu nous donnée la base de données utilisé ?

    Mais il semble étrange que tu ne précise pas les colonnes dans la déclaration actuelle ...
    Logiquement, le code SQL devrait ressemblé à :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    foreign key (colA, colB) 
        references tableRef (colA, colB)

    Note : Pour information, tu ne devrais pas à "devoir" faire ce genre de construction, si cela n'as pas de logique. Un problème technique de ce niveau va forcement se payer plus tard.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Novembre 2014
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur après-vente

    Informations forums :
    Inscription : Novembre 2014
    Messages : 367
    Points : 9
    Points
    9
    Par défaut
    Voici comment j'ai créé la table véhicule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    create table vehicule
    (numveh integer not null primary key,
    marque char(15) not null,
    modele char(15) not null,
    annee integer not null,
    cylindree integer not null,
    numcli integer not null references client,
    numclictr integer not null,
    numctr integer not null,
    FOREIGN KEY (numclictr, numctr) REFERENCES CONTRAT (numctr, numcli));
    Toutefois, impossible d'y insérer des valeurs :

    Nom : cle4.jpg
Affichages : 1076
Taille : 161,1 Ko

  6. #6
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    La clé étrangère n’existe pas dans la table de référence. Donc, impossible de faire l'insertion.
    C'est le job de ta clé étrangère... Il faut lire les messages d'erreur à un moment.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  7. #7
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    L'ordre des colonnes dans la clé étrangère a son importance.
    Tu déclares : FOREIGN KEY (numclictr, numctr) REFERENCES CONTRAT (numctr, numcli).
    Donc avec les valeurs que tu tentes d'insérer, la référence cherchée est (2001, 501) dans CONTRAT (numctr, numcli). Référence qui est bien absente de la table que tu affiches.
    En revanche, il s'y trouve bien la référence (501, 2001)... mais ce n'est pas du tout la même chose !!!
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Novembre 2014
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur après-vente

    Informations forums :
    Inscription : Novembre 2014
    Messages : 367
    Points : 9
    Points
    9
    Par défaut
    al1_24 a résolu mon problème, un grand merci !

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

Discussions similaires

  1. Exécuter 2 boucles while avec deux variables en même temps.
    Par gagnant16 dans le forum Shell et commandes GNU
    Réponses: 13
    Dernier message: 16/04/2014, 22h04
  2. Remplir une ComboBox avec DEUX colonnes (ou plus ^_^)
    Par DashRendar dans le forum VB.NET
    Réponses: 3
    Dernier message: 07/02/2008, 08h54
  3. Réponses: 1
    Dernier message: 21/05/2007, 10h33
  4. [JTable] Créer une JTable vide avec des noms de colonnes.
    Par Cyborg289 dans le forum Composants
    Réponses: 2
    Dernier message: 27/09/2005, 15h54

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