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

  1. #1
    Membre du Club
    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
    Points : 57
    Points
    57
    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 011
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 011
    Points : 23 692
    Points
    23 692
    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 du Club
    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
    Points : 57
    Points
    57
    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 129
    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 129
    Points : 38 521
    Points
    38 521
    Billets dans le blog
    9
    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
    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 011
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 011
    Points : 23 692
    Points
    23 692
    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

  6. #6
    Membre du Club
    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
    Points : 57
    Points
    57
    Par défaut
    merci Escartefigues !

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 129
    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 129
    Points : 38 521
    Points
    38 521
    Billets dans le blog
    9
    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 011
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 011
    Points : 23 692
    Points
    23 692
    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

  9. #9
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 129
    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 129
    Points : 38 521
    Points
    38 521
    Billets dans le blog
    9
    Par défaut
    En ce cas le modèle est

    Pièce jointe 594197

    et là aussi, le script est généré automatiquement en fonction du choix du SGBD

    Ce qui donne ici :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TABLE VH_vehicule(
       VH_ident SERIAL,
       VH_immat CHAR(7) NOT NULL,
       VH_ident_1 INTEGER NOT NULL,
       PRIMARY KEY(VH_ident),
       UNIQUE(VH_immat),
       FOREIGN KEY(VH_ident_1) REFERENCES VH_vehicule(VH_ident)
    );
    Script valide sous PG 9.5 et au delà, pas de problème avec FOREIGN KEY.

    Dans tous les cas, passer par le MCD évite bien des erreurs et pas seulement ceux liés à la syntaxe du script

  10. #10
    Membre émérite
    Avatar de Paprick
    Homme Profil pro
    Professeur des Universités
    Inscrit en
    Juin 2019
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Professeur des Universités
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2019
    Messages : 678
    Points : 2 716
    Points
    2 716
    Par défaut
    Bonjour,

    Capitaine , un tout petit détail pour parfaire ton exemple : le rôle "Parent" doit être placé sur la patte 0,n (ça peut paraitre bizarre, mais c'est très logique quand on y regarde de près !) .
    Et si tu utilises l'option "Nom contrainte clé" dans les Propriétés de Looping, ça te rajoute le "CONSTRAINT".
    Patrick Bergougnoux - Professeur des Universités au Département Informatique de l'IUT de Toulouse III
    La simplicité est la sophistication suprême (Léonard de Vinci)
    LIVRE : Modélisation Conceptuelle de Données - Une Démarche Pragmatique
    Looping - Logiciel de modélisation gratuit et libre d'utilisation

  11. #11
    Membre expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Points : 3 590
    Points
    3 590
    Billets dans le blog
    8
    Par défaut
    Salut
    Citation Envoyé par escartefigue Voir le message
    et là aussi, le script est généré automatiquement en fonction du choix du SGBD
    Comment vous faites le choix du SGBD? Chez moi toujours en MS ACCESS.
    Merci d'avance.
    @+
    Le monde est trop bien programmé pour être l’œuvre du hasard…
    Mon produit pour la gestion d'école: www.logicoles.com

  12. #12
    Membre émérite
    Avatar de Paprick
    Homme Profil pro
    Professeur des Universités
    Inscrit en
    Juin 2019
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Professeur des Universités
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2019
    Messages : 678
    Points : 2 716
    Points
    2 716
    Par défaut
    Bonsoir,
    Citation Envoyé par alassanediakite Voir le message
    Comment vous faites le choix du SGBD? Chez moi toujours en MS ACCESS.
    Il suffit de sélectionner votre choix dans l'option "SGBD cible" proposée dans la fenêtre "Propriétés" - "MLD-SQL" :

    Nom : SGBD cible.jpg
Affichages : 170
Taille : 54,8 Ko
    Bonne continuation !
    Patrick Bergougnoux - Professeur des Universités au Département Informatique de l'IUT de Toulouse III
    La simplicité est la sophistication suprême (Léonard de Vinci)
    LIVRE : Modélisation Conceptuelle de Données - Une Démarche Pragmatique
    Looping - Logiciel de modélisation gratuit et libre d'utilisation

  13. #13
    Membre expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Points : 3 590
    Points
    3 590
    Billets dans le blog
    8
    Par défaut
    Merci Patrick
    @+
    Le monde est trop bien programmé pour être l’œuvre du hasard…
    Mon produit pour la gestion d'école: www.logicoles.com

+ 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