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 :

Sélectionner une table en fonction d'un résultat de requête


Sujet :

Requêtes PostgreSQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 38
    Points : 34
    Points
    34
    Par défaut Sélectionner une table en fonction d'un résultat de requête
    Bonjour

    Je suis en train de préparer un projet dans lequel j'aurais besoin d'une base de donnée. Tout n'est pas encore complètement défini, je ne peux donc vous fournir le script de création des tables. Cependant, j'ai peur de me retrouver confornter à un problème par la suite, et je prèfère chercher une solution dès maintenant si elle implique une évoultion de l'architecture...

    Donc, je veux réaliser une bases de connaissance contenant un ensemble de gène. Chaque gène appartient à au moins un génome. De plus il existe plusieurs types de gènes, pouvant cohabiter dans un même génome.

    Je vais vouloir obtenir l'ensemble des gènes d'un génome. Cependant, chaque type de gène est stocké dans une table qui lui est propre. En effet, les données caractérisant un gène peuvent énormément différer d'un gène à l'autre.

    La table liant les gènes aux génomes contiendra donc l'id du génome, le type du gène et l'id du gène. De plus, une autre table fournira le nom de la table correspondant à un type de gène.

    Est il possible de sélectionner les tables correspondant aux gènes d'un génome sans générer manuellement une requête à l'aide des résultat d'une précédente? Dans ce cas, une première requete me fournirait le nom de toutes les tables nécessaires, puis je génèrerais la suivante en incluant l'ensemble de ces tables, cependant, j'aimerais éviter ce traitement intermédiaire.

    Merci d'avance
    La réflexion est le meilleur moyen d'apporter des réponses à des questions et vice versa

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 770
    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 770
    Points : 52 726
    Points
    52 726
    Billets dans le blog
    5
    Par défaut
    En ce qui concerne les différentes tables de gènes il s'agit d'un cas classique d'héritage de données. Vous devez prévoir une table mère de toutes les tables fille de gènes, avec les informations communes s'il y en a. Voyez l'article que j'ai écrit à ce sujet : http://sqlpro.developpez.com/cours/m...tion/heritage/

    Les outils de modélisation comme Power AMC gère parfaitement ce genre de chose depuis le MCD jusqu'au MPD, y compris en générant les éventuels triggers d'exclusion mutuelle si l'héritage est exclusif !

    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/ * * * * *

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Babcool, tu parles déjà de tables alors que tu n'en es encore, semble t-il, qu'en phase de conception de l'architecture de la BDD. Tu mets la charrue avant les boeufs !

    La démarche de conception est la suivante...
    Commençons par une conception classique sans héritage...
    il existe plusieurs types de gènes
    Règle de gestion :
    1) Un gène est d'un seul type et un type peut rassembler plusieurs gènes.

    MCD 1 :
    Gene -1,1----Typer----0,n- Type_gene

    chaque type de gène est stocké dans une table qui lui est propre. En effet, les données caractérisant un gène peuvent énormément différer d'un gène à l'autre.
    Je crois comprendre qu'en fait la fin de la phrase devrait être :
    "les données caractérisant un gène peuvent énormément différer d'un type de gène à l'autre."

    Règle de gestion :
    2) Un type de gène est doté de plusieurs caractéristiques et une caractéristique peut concerner plusieurs types de gènes.

    MCD 2 (qui complète le premier) :
    Gene -1,1----Typer----0,n- Type_gene -1,n----Doter----0,n- Caracteristique

    Chaque gène appartient à au moins un génome.
    Règle de gestion :
    3) Un gène peut appartenir à plusieurs génomes et un génome contient de un à plusieurs gènes.

    MCD 3 (qui complète le 2) :
    Genome -1,n----Composer----0,n- Gene -1,1----Typer----0,n- Type_gene -1,n----Doter----0,n- Caracteristique

    S'il te faut maintenant donner une valeur à chaque caractéristique de chaque gène dans chaque génome, il te faut l'association ternaire suivante (MCD 4) :
    Caracteristique -0,n----Valoriser----0,n- Gene
    Genome -0,n--------------------|

    Et là les difficultés commencent...
    Pour que cette association soit cohérente avec le MCD 3, il faut (a) que le couple {Genome - Gene} de l'association Valoriser du MCD 4 existe dans l'association Composer du MCD 3 et il faut (b) que les caractéristiques valorisées pour le gène soient celles du type du gène.

    Modifions une partie du MCD 3...
    MCD 3bis :
    Genome -1,n----Composer----(1,1)- Composition -(1,1)----Inclure----0,n- Gene

    Les cardinalités entre parentèses signifient une identification de la composition relativement au génome et au gène. Les tables issues du MCD 3bis auront la même composition que celles du MCD 3 mais comme j'ai transformé dans le MCD une association en entité, je peux maintenant associer cette nouvelle entité aux caractéristiques.
    MCD 5 (remplace le MCD 4) :
    Composition -1,n----Valoriser----0,n- Caracteristique

    La première contrainte (a) ci-dessus est maintenant satisfaite puisqu'il ne pourra pas exister de valorisation que pour les couples {génome, gène} existant dans une composition de génome.

    La contrainte (b) est plus délicate car l'association entre le gène et la caractéristique passe par son type. Elle pourra se résoudre par un trigger en base de données mais pour le moment je ne vois pas de modélisation qui puisse simplement la satisfaire et comme ma compréhension de ton besoin est peut-être faux, je m'arrête là pour le moment.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 38
    Points : 34
    Points
    34
    Par défaut
    Bonjour,

    Tout d'abord, merci bien pour ces 2 réponses

    Après lecture du lien de SQLpro, je pense que le dernier paragraphe présentant la création d'une vue rassemblant les différentes informations pourrait me convenir plutot bien.

    La proposition de CinePhil est aussi très intéressante. Elle permet une plasticité bien plus importante. Mais j'ai peur que l'utilisation se révèle un peu plus complexe. Surtout dans la mesure ou je n'ai pas besoin de tant de variabilité de la structure des gènes (en général, je tournerais que sur un ou deux type de gène a la fois).

    J'ai cependant une question qui me taraude au niveau des caractéristiques. J'ai par exemple certaine caractéristiques sous forme arborescente (bon, j'envisageais de les stocker en xml dans un premier temps, car je ne sais pas si elles vont survivre a terme...), d'autres sous forme numériques, et des dernières sous formes textuelles (de taille fixe cette fois ).

    Est il possible de gérer ces différents types de caractéristiques sans pour autant avoir une "multiplication" des entités . Il doit être possible de le faire que à travers l'association valoriser mais je n'ai pas l'impression d'être fan de cette idée

    Cependant, je suis plus à l'aise avec la notion d'héritage, qui me semble mieux correspondre à mon besoin (et qui est aussi bien plus en adéquation avec mes structure de données dans le code...).
    La réflexion est le meilleur moyen d'apporter des réponses à des questions et vice versa

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par Babcool Voir le message
    La proposition de CinePhil est aussi très intéressante. Elle permet une plasticité bien plus importante. Mais j'ai peur que l'utilisation se révèle un peu plus complexe. Surtout dans la mesure ou je n'ai pas besoin de tant de variabilité de la structure des gènes (en général, je tournerais que sur un ou deux type de gène à la fois).
    Que veux-tu dire par "à la fois" ?

    Le principe de l'héritage est de spécialiser une entité en plusieurs entités filles.
    Un exemple de la vie courante en entreprise
    Cadre -(1,1)----Etre----0,1- Salarie -(1,1)----Etre----0,1- Personne
    Technicien -(1,1)----Etre----0,1-|
    Contact -(1,1)----Etre-----------------------------------------0,1------|

    Ce qui pourrait donner les tables suivantes :
    Personne (prs_id, prs_nom, prs_prenom, prs_numtel...)
    Salarie (slr_id_personne, slr_matricule, slr_salaire_mensuel_brut...)
    Cadre (cdr_id_salarie, cdt_bonus...)
    Technicien (tch_id_salarie, tch_id_atelier...)
    Contact (ctc_id_personne, ctc_id_organisme...)

    Dans ton cas, tu pourrais avoir des attributs communs à tous les gènes et des attributs particuliers à certains types de gènes :
    Type_A -(1,1)----Etre----0,1- Gene
    Type_B -(1,1)----Etre----0,1-----|

    Tables :
    Gene (gne_id, gne_attr_1, gne_attr_2...)
    Type_A (tya_id_gene, tya_attr_special_A1...)
    Type_B (tyb_id_gene, tyb_attr_special_B1...)

    J'ai cependant une question qui me taraude au niveau des caractéristiques. J'ai par exemple certaine caractéristiques sous forme arborescente
    Que veux-tu dire par "arborescente" ?

    On peut faire de l'arborescence en BDD de deux façons :
    S'il n'y a que deux niveau, c'est à dire un type de relation père/fils, chapitre/sous-chapitre... on peut se contenter de faire une auto association :
    Caracteristique -0,1----Dependre----0,n- Caracteristique

    Ce MCD entraîne en principe deux tables :
    Caracteristique (crt_id, crt_nom...)
    Dependance (dpe_id_caracteristique_fille, dpe_id_caracteristique_mere)

    S'il y a plusieurs niveaux (des sous-sous-sous...-caractéristiques), alors il faut envisager la modélisation d'arbre par représentation intervallaire.

    d'autres sous forme numériques, et des dernières sous formes textuelles (de taille fixe cette fois ).

    Est il possible de gérer ces différents types de caractéristiques sans pour autant avoir une "multiplication" des entités . Il doit être possible de le faire que à travers l'association valoriser mais je n'ai pas l'impression d'être fan de cette idée
    Là il faudrait nous donner des exemples pour qu'on puisse mieux comprendre la problématique.
    Quand je parlais de valorisation des caractéristiques, c'était la valeur d'une caractéristique d'un gène dans un génome.

    Je repars dans la vie courante :
    Je commande une Laguna de couleur bleue à mon concessionnaire.
    Vue du concessionnaire, donc de sa BDD, la caractéristique "couleur" de la voiture "Laguna" a la valeur "Bleu" pour la commande "2011-05" par exemple.

    Il est vrai que certaines caractéristiques sont de type numérique et d'autre de type alphanumérique. Si tu as une table de valorisation des caractéristiques, les valeurs seront toutes de type VARCHAR et il faudra transtyper pour chercher les bonnes valeurs des caractéristiques numériques ou date ou timestamp...

    (et qui est aussi bien plus en adéquation avec mes structure de données dans le code...).
    Arf ! Encore un qui développe l'appli avant d'avoir modélisé les données ! Beurk !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 38
    Points : 34
    Points
    34
    Par défaut
    Pour les valorisation des caractéristiques, effectivement, il y a moyen de passer tout en chaine de caractères, m'enfin, je suis pas fan...

    L'appli tourne déjà pour l'instant, avec un stockage des données en xml... Donc effectivement, j'ai une certaine contrainte sur la modélisation des données xD... Et je n'avais pas forcément prévu d'aller dans cette direction, c'est les joies de la recherche

    A priori, je vais partir sur de l'héritage, le seul truc, c'est que mon entité mère ne contient aucune données. Mais ça n'a pas beaucoup d'influence sur le reste...

    En tout cas merci bien pour tout ça, ça m'a permis de bien éclaircir la situation et d'avoir plusieurs idées de solutions alternatives si j'en ai besoin par la suite

    Bab
    La réflexion est le meilleur moyen d'apporter des réponses à des questions et vice versa

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 09/09/2011, 15h15
  2. Réponses: 7
    Dernier message: 20/08/2008, 14h26
  3. Réponses: 3
    Dernier message: 18/01/2007, 18h19
  4. Réponses: 6
    Dernier message: 25/09/2006, 14h11
  5. remplir une table en fonction des résultats
    Par Psychomantis dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 19/10/2004, 12h22

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