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éation de deux attributs dépendants sur PostGreSQL [9.3]


Sujet :

PostgreSQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juillet 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2014
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Création de deux attributs dépendants sur PostGreSQL
    Bonjour tout le monde !
    Voilà mon problème.

    J'ai une table T créée sur PosgreSQL 9.3.
    Cette table T contient deux attributs A, B.

    L'attribut A prend une valeur parmi la liste (a, b, c).
    L'attribut B prend une valeur parmi une liste qui dépend de la valeur de A :
    si A=a alors B prend une valeur de la liste (a1, a2, a3, a4)
    si A=b alors B prend une valeur de la liste (b1, b2, b3, b4)
    si A=c alors B prend une valeur de la liste (c1, c2, c3, c4)

    ça a l'air d'être simple, mais je galère pour trouver la solution !

    Merci de votre aide !

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 081
    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 081
    Points : 30 827
    Points
    30 827
    Par défaut
    Mais quelle est la question ?
    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.

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 786
    Points : 52 793
    Points
    52 793
    Billets dans le blog
    5
    Par défaut
    Il suffit de mettre en place une double intégrité référentielle....

    --1) la table cible de la saisie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE TABLE T_CIBLE_CBL 
    (A    VARCHAR(32),
     B    VARCHAR(32));
    --2) la table pour la première IR :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE TABLE T_IR1
    (A    VARCHAR(32) PRIMARY KEY);
    --3) la table pour la seconde IR :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE TABLE T_IR2
    (A    VARCHAR(32) NOT NULL REFERENCES T_IR1 (A),
     B    VARCHAR(32) NOT NULL,
     PRIMARY KEY (A, B));
    --4) modificationn de la table cible pour respect de saisie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ALTER TABLE T_CIBLE_CBL
       ADD CONSTRAINT FK_CBL_IR1 FOREIGN KEY (A) 
                                  REFERENCES T_IR1 (A),
           CONSTRAINT FK_CBL_IR2 FOREIGN KEY (A, B) 
                                  REFERENCES T_IR2 (A, B);
    A +

    ,
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juillet 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2014
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Merci Mr "SQLPro" pour votre réponse !
    mais cette solution ne répond pas à mon problème.

    moi je veux juste créer une seule table T avec des attributs du type enum

    la table T est comme suit :

    T ( Id : serial
    A : type_A
    B : type_B)

    sachant que :

    type_A : enum (a,b,c)
    type_B : enum (a1,a2,a3,a4) si A=a
    type_B : enum (b1,b2,b3,b4) si A=b
    type_B : enum (c1,c2,c3,c4) si A=c

    est ce que c'est faisable de cette manière
    merci !

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 786
    Points : 52 793
    Points
    52 793
    Billets dans le blog
    5
    Par défaut
    Non. Et le type ENUM est une vaste merde et n'a pas sa place dans un SGBD relationnnel dans lequel les données doivent être atomique (première forme normale).

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juillet 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2014
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Merci !

    Mais je n'ai très bien compris la méthode que vous avez proposée

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juillet 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2014
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Dans le dernier code de "modification de la table cible"

    Il me signale l'erreur :

    SQL Error: ERREUR: erreur de syntaxe sur ou près de « CONSTRAINT »
    LINE 4: CONSTRAINT FK_CBL_IR2 FOREIGN KEY (A, B)

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 786
    Points : 52 793
    Points
    52 793
    Billets dans le blog
    5
    Par défaut
    Je n'ai pas vérifié, mais il est probable que PostGreSQL ne supporte pas un ALTER TABLE avec plus d'une contrainte. Dans ce cas, faites deux commandes ALTER TABLE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ALTER TABLE T_CIBLE_CBL
       ADD CONSTRAINT FK_CBL_IR1 FOREIGN KEY (A) 
                                  REFERENCES T_IR1 (A);
    ALTER TABLE T_CIBLE_CBL
       ADD CONSTRAINT FK_CBL_IR2 FOREIGN KEY (A, B) 
                                  REFERENCES T_IR2 (A, B);
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juillet 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2014
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Merci à Mr SQLpro !

    C'est bon, je viens de tester, ça marche !

    C'est vrai que le type enum n'est pas du SQL pur !
    C'est mieux de ne pas l'utiliser.

    Merci encore une fois !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/05/2015, 18h57
  2. Réponses: 2
    Dernier message: 09/09/2010, 16h18
  3. Pb insert sur postgresql 8 (windows)
    Par testeur dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 21/10/2004, 17h44
  4. Création d'un "remote server" sur un réseau
    Par Papino dans le forum Débuter
    Réponses: 2
    Dernier message: 05/09/2004, 16h49
  5. Pbleme UPDATE sur POSTGRESQL
    Par $grm$ dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 26/04/2004, 14h50

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