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 PostgreSQL Discussion :

pb creation table


Sujet :

Requêtes PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    chargé d'études
    Inscrit en
    Janvier 2015
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chargé d'études

    Informations forums :
    Inscription : Janvier 2015
    Messages : 93
    Par défaut pb creation table
    bonjour,
    j'essaie de suivre un tuto du site sur les requêtes récursives...

    ici : https://sqlpro.developpez.com/cours/...te-recursives/

    dans l'exemple 5 il faut créer une table, mais la requête ne passe pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE TABLE T_VEHICULE
    (VHC_ID         INTEGER NOT NULL PRIMARY KEY,
     VHC_ID_FATHER  INTEGER FOREIGN KEY REFERENCES T_VEHICULE (VHC_ID),
     VHC_NAME       VARCHAR(16))
    Est-ce que quelqu'un voit d'où vient le problème ? merci

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 059
    Par défaut
    Bonjour,

    Comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE TEMP TABLE T_VEHICULE
    (VHC_ID         INTEGER NOT NULL PRIMARY KEY,
     VHC_ID_FATHER  INTEGER REFERENCES T_VEHICULE (VHC_ID),
     VHC_NAME       VARCHAR(16));
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Membre confirmé
    Homme Profil pro
    chargé d'études
    Inscrit en
    Janvier 2015
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chargé d'études

    Informations forums :
    Inscription : Janvier 2015
    Messages : 93
    Par défaut
    bonjour,

    merci beaucoup Ced !


    l'auteur du cours indique "Habituellement, une hiérarchie se représente en utilisant une autoréférence, c'est-à-dire à l'aide d'une clef étrangère provenant de la clef même de la table. "

    si je comprends bien il évoque "le principe" d'une clé étrangère mais on ne doit pas utiliser le mot clé FOREIGN quand il n'y a une table. C'est cela?

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 600
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 600
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Pour vous simplifier la vie et éviter ce genre de piège, utilisez un logiciel de modélisation, le script sera généré automatiquement en fonction du choix du SGBD.
    Par exemple, ici avec looping (gratuit), le MCD suivant (et son MLD associé généré en temps réel) :

    Pièce jointe 594098


    Génère le script suivant pour PostGreSQL :
    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 VH_vehicule(
       VH_ident SERIAL,
       VH_immat CHAR(7) NOT NULL,
       PRIMARY KEY(VH_ident),
       UNIQUE(VH_immat)
    );
     
    CREATE TABLE Asso_1(
       VH_ident_Parent INTEGER,
       VH_ident INTEGER,
       PRIMARY KEY(VH_ident_Parent, VH_ident),
       FOREIGN KEY(VH_ident_Parent) REFERENCES VH_vehicule(VH_ident),
       FOREIGN KEY(VH_ident) REFERENCES VH_vehicule(VH_ident)
    );

    La table Asso_1 (j'ai oublié de nommer l'association, d'où son nom sibyllin ) correspond à votre besoin

  5. #5
    Membre confirmé
    Homme Profil pro
    chargé d'études
    Inscrit en
    Janvier 2015
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chargé d'études

    Informations forums :
    Inscription : Janvier 2015
    Messages : 93
    Par défaut
    merci Escartefigues !

  6. #6
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 059
    Par défaut
    Citation Envoyé par fcka0001 Voir le message
    si je comprends bien il évoque "le principe" d'une clé étrangère mais on ne doit pas utiliser le mot clé FOREIGN quand il n'y a une table. C'est cela?
    Non, c'est juste que pour créer la clé étrangère depuis la colonne dans le CREATE TABLE, sous PostgreSQL, il ne faut pas utiliser l'expression FOREIGN KEY. Un des points où la syntaxe de PostgreSQL ne suit pas la norme SQL...

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 600
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 600
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par ced Voir le message
    Non, c'est juste que pour créer la clé étrangère depuis la colonne dans le CREATE TABLE, sous PostgreSQL, il ne faut pas utiliser l'expression FOREIGN KEY. Un des points où la syntaxe de PostgreSQL ne suit pas la norme SQL...

    ced
    FOREIGN KEY est tout à fait accepté par PostGre (cf. le script que j'ai proposé et qui fonctionne), mais cet exemple est différent car la colonne référencée se situe dans la même table, ce n'est donc pas une FK

  8. #8
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 059
    Par défaut
    Bien sûr que FOREIGN KEY est accepté par PostgreSQL, mais pas n'importe où et c'est ça qui provoquait l'erreur dans le premier post.

    Les deux syntaxes suivantes sont équivalentes sous PostgreSQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE TEMPORARY TABLE T_VEHICULE
    (VHC_ID         INTEGER NOT NULL PRIMARY KEY,
     VHC_ID_FATHER  INTEGER REFERENCES T_VEHICULE (VHC_ID),
     VHC_NAME       VARCHAR(16));
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TEMPORARY TABLE T_VEHICULE
    (VHC_ID         INTEGER NOT NULL PRIMARY KEY,
     VHC_ID_FATHER  INTEGER,
     VHC_NAME       VARCHAR(16),
     CONSTRAINT t_vehicule_vhc_id_father_fkey FOREIGN KEY (VHC_ID_FATHER) REFERENCES T_VEHICULE (VHC_ID));
    Il y a une différence entre le modèle lié à cette table et celui que tu proposes : on est sur une table qui s'autoréférence avec une relation de type 1 à plusieurs, là où ton modèle propose une relation de type plusieurs à plusieurs.
    Ici, un véhicule ne peut avoir qu'un père et un véhicule père peut avoir plusieurs véhicules enfants.
    Avec ton modèle, un véhicule peut avoir plusieurs pères et un père plusieurs enfants.

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

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

Discussions similaires

  1. creation table
    Par sharpeye dans le forum Access
    Réponses: 6
    Dernier message: 15/11/2005, 22h02
  2. creation table de verif
    Par mystik11 dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 23/05/2005, 18h33
  3. [creation table] ORA-00942
    Par Invité dans le forum Oracle
    Réponses: 21
    Dernier message: 13/04/2005, 14h47
  4. [syntaxe]Creation table avec nom dynamique
    Par ZuZu dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 23/09/2004, 18h01
  5. creation table association reflexive
    Par elea1206 dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/08/2003, 17h30

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