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 :

Ajouter une référence entre une table et une vue [9.6]


Sujet :

PostgreSQL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    477
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 477
    Points : 198
    Points
    198
    Par défaut Ajouter une référence entre une table et une vue
    Bonjour à tous et merci pour votre aide.

    Est-il possible de référencer une vue (UNION de plusieurs tables) depuis une table.
    En somme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ALTER TABLE public.dialogs
    ADD CONSTRAINT "dialogs_view:register_names_id_register_fk"
    FOREIGN KEY (entity_one) REFERENCES "view:register_names" (id_register);
    Merci,

  2. #2
    Membre éclairé Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Points : 769
    Points
    769
    Par défaut
    Bonjour,

    J'ai peut-être mal compris votre demande et si c'est le cas, je vous prie de m'en excuser et de bien vouloir ignorer le reste de ma réponse.

    Ce que j'ai compris c'est que vous voulez ajouter une contrainte de type clé étrangère sur une vue.

    Une vue n'est qu'un alias pour une requête SELECT...
    Vous ne voudriez pas rajouter une clé étrangère sur un SELECT, non ?
    Je vous conseille de lire la partie "View Definition" de la Norme SQL (chapitre "Schema definition and manipulations") ainsi que la partie "Table constraints" du chapitre "Concepts".

    Plus abordable, la doc postgreSQL montre bien que la syntaxe CREATE VIEW ou ALTER VIEW ne permet pas ce genre de chose.

    Bonne journée,

    Arkhena
    A bove ante, ab asino retro, a stulto undique caveto

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    477
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 477
    Points : 198
    Points
    198
    Par défaut
    Bonjour @Arkhena,

    C'est l'inverse que je souhaite faire.

    La clé étrangère se trouve dans une table qui référence un colonne qui se trouve dans la vue.

    TABLE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ALTER TABLE public.dialogs
    ADD CONSTRAINT "dialogs_view:register_names_id_register_fk"
    FOREIGN KEY (entity_one) REFERENCES "view:register_names" (id_register);
    VUE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT users.register_uuid AS id_register,
        users.username AS object_name,
        users.id_user AS id_owner
       FROM users
    UNION
     SELECT stores.register_uuid,
        stores.store_name AS object_name,
        stores.id_user AS id_owner
       FROM stores;
    Merci,

  4. #4
    Membre éclairé Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Points : 769
    Points
    769
    Par défaut
    Bonjour,

    De la même manière, votre vue n'étant qu'un alias vers une requête SQL, votre colonne est soit un calcul à partir d'une colonne (ou de plusieurs) colonne(s) existant dans une (ou plusieurs) de vos tables soit directement une colonne d'une de vos table.
    Dans le premier cas, un contrainte de type CHECK devrait être faisable, dans le deuxième cas, il faut faire la contrainte d'intégrité sur la colonne de la table et non de la vue.
    La norme SQL indique bien qu'on ne peut référencer qu'une table.
    A referential constraint specifies one or more columns as referencing columns and corresponding referenced
    columns in some (not necessarily distinct) base table, referred to as the referenced table.
    Je me pose tout de même des questions sur la bonne modélisation de votre base de données...

    Cordialement,

    Arkhena
    A bove ante, ab asino retro, a stulto undique caveto

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    477
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 477
    Points : 198
    Points
    198
    Par défaut
    Bonjour et merci @Arkhena.

    Effectivement, je ne suis pas à mon coup d'essaie pour modéliser cette partie de ma base de donnée.
    Je vais donc revoir ma copie.
    Merci de ton aide encore une fois,

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

Discussions similaires

  1. Mettre une référence web au lieu d'une référence de service ?
    Par chinoismasque dans le forum Windows Phone
    Réponses: 20
    Dernier message: 10/08/2011, 15h20
  2. faire une différence entre deux tables
    Par geay dans le forum Langage SQL
    Réponses: 1
    Dernier message: 04/09/2006, 15h33
  3. Réponses: 9
    Dernier message: 24/04/2006, 09h13
  4. Réponses: 2
    Dernier message: 22/01/2006, 01h11
  5. Optimisation d'une jointure entre 3 tables
    Par gavelin dans le forum Langage SQL
    Réponses: 4
    Dernier message: 14/12/2005, 09h52

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