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

Schéma Discussion :

Table qui pointe sur plusieurs tables [MLD]


Sujet :

Schéma

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 48
    Points : 33
    Points
    33
    Par défaut Table qui pointe sur plusieurs tables
    Bonjour,

    Ma question est simple, est il possible d'avoir une table SQL nommé "test" qui possède une colonne qui pointe sur différentes tables?

    Je ne vois pas comment utiliser une foreign key puisque je ne pointe pas sur une table mais sur plusieurs tables et que chaque nouvelle ligne de la table "test" pointera sur une table différente.


    L'objectif étant donc d'avoir une table qui fait le lien vers d'autres tables.


    Merci par avance

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Pouvez vous nous indiquer votre SGBDR.

    De plus, pouvez vous expliquer un peu plus le contexte et pourquoi vous voulez faire ça. Je soupçonne un héritage mal modélisé derrière tout ça...
    Que représentent les tables en question ?

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 48
    Points : 33
    Points
    33
    Par défaut
    Les tables en questions seront des matrices à n dimensions.

    Pour le SGBDR je ne suis pas encore fixé mais cela sera MySQL ou SQL

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    et pourquoi ne pointez vous pas vers une seule table ?

    que représentent ces matrices ?

    Avez si peu d’information, difficile de vous aider !

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 48
    Points : 33
    Points
    33
    Par défaut
    Tout simplement parce-que je ne vois pas comment représenter des matrices à 2 ou 3 dimensions dans une seule table.

    Je vais détailler ce que je souhaite réaliser:

    J'ai une table "moteur" qui contient:

    id(int),name(string),variable1(int),variable2(string),variable3(une foreign key sur l'id de ma table "test")

    la table "test" qui contient:
    id(int),name(string),matrice de n dimensions(?)

    chaque ligne de ma table "test" contient donc une matrice de dimensions et de taille différentes.

    Ne voyant pas comment stocker une matrice dans une colonne je voulais donc faire pointer ma troisième colonne vers une table qui représente cette matrice

    Exemple d'une table qui représente une matrice 2 dimensions:
    ligne (int),colonne(int),valeur(double)

    J’espère avoir donné plus d’informations

  6. #6
    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
    Que contiennent ces matrices ? Des mesures de régime moteur ? Des mesures de variation d'intensité selon la charge ?

    Sinon, pour répondre à la question posée dans le premier message : Non, il n'est pas possible qu'une clé étrangère référence plusieurs tables. Par contre, elle peut référencer plusieurs colonnes d'une même table. Il est également possible qu'une colonne participe à plusieurs clés étrangères qui référencent des tables différentes.
    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 !

  7. #7
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    J'ai l'impression qu'il vous faut bien un héritage :
    Une table Mère "Matrice" (la table test pointe dessus), et des tables filles pour vos matrices, pointant vers la table mère avec exclusion mutuelle...

    Mais un petit jeu de données aiderait a y voir plus clair

  8. #8
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 48
    Points : 33
    Points
    33
    Par défaut
    Pour répondre a cinéphil ce sont des courbes de puissance en fonction de plusieurs paramètres.
    Il est également possible qu'une colonne participe à plusieurs clés étrangères qui référencent des tables différentes.
    Je ne vois pas comment faire?


    J'ai joint un exemple de jeux de données.

    Pour l'héritage avec exclusion mutuelle il me faut alors ajouter une colonne id à mes deux matrices. Cela me parait contraignant puisque que mes matrices peuvent faire plusieurs centaines de ligne.

    Sinon une autre solution je ne sais pas si cela est utilisé normalement.
    Ma base est couplé à un programme java qui récupère le nom de la matrice dans la colonne name de la table "test" et ensuite je fait un SELECT * from "le nom de ma matrice"pour récupérer ma matrice et l'afficher dans mon programme java.

    Merci pour vos réponses
    Images attachées Images attachées

  9. #9
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Napoléon avait raison :
    un bon croquis vaut mieux qu'un long discours.
    On commence à y voir plus clair, mais j'ai encore une question : n'aurez vous que des matrices à deux ou trois dimensions, ou pourrez vous en avoir à 4, 5, 6... ?

  10. #10
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 48
    Points : 33
    Points
    33
    Par défaut
    Je peux avoir des matrices jusqu’à 4 dimensions maximum

  11. #11
    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
    un bon croquis vaut mieux qu'un long discours.
    Euh... désolé mais ce croquis ne m'apporte rien de plus !

    Pour répondre a cinéphil ce sont des courbes de puissance en fonction de plusieurs paramètres.
    Il y donc des mesures qui dépendent de plusieurs paramètres ayant eux même des valeurs variables.

    Si j'ai bien compris, un test consiste à faire varier un ensemble de paramètres et de mesurer la puissance. C'est cet ensemble de paramètres qui constitue les éléments constitutifs de la "matrice"

    Règles de gestion :
    1) Une matrice est composée de un à plusieurs paramètres et un paramètre peut entrer dans la composition de plusieurs matrices.
    2) Un test concerne une matrice et une matrice peut être concernée par plusieurs tests.
    3) Un test est effectué sur un moteur et un moteur peut faire l'objet de plusieurs tests.

    MCD :
    moteur -0,n----effectuer----1,1- test -1,1----concerner----0,n- matrice -1,n----composer----0,n- parametre

    Règle de gestion :
    4) Un test peut rassembler plusieurs mesures et une mesure fait partie d'un test.
    5) Une mesure est opérée sur un à plusieurs paramètres (ceux de la matrice du test dont fait partie la mesure) et un paramètre peut faire l'objet de plusieurs mesures.

    MCD :
    test -0,n----rassembler----(1,1)- mesure -1,n----opérer----0,n- paramètre

    Les cardinalités entre parenthèses signifient une identification relative, ce qui veut dire que les mesures du test 1 seront numérotées de 1 à n ceux du test 2 de 1 à n... et que l'identifiant du test fera partie de la clé primaire de la table des mesures.

    Il reste à assembler les deux morceaux de MCD et à ajouter une contrainte de totalité entre les paramètres de la mesure et ceux de la matrice du test, ce qui est difficilement représentable en format texte mais tout à fait réalisable avec un logiciel de modélisation un peu évolué.

    Passons aux tables...
    te_moteur_mtr (mtr_id...)
    te_parametre_prm (prm_id, prm_libelle, prm_unite...)
    te_matrice_mtc (mtc_id...)
    te_test_tst (tst_id, tst_id_moteur, tst_id_matrice, tst_date...)
    te_mesure_msr (msr_id_test, msr_numero...)
    tj_mtr_composer_prm_mcp (mcp_id_matrice, mcp_id_parametre)
    tj_msr_operer_prm_mop (mop_id_test, mop_numero_mesure, mop_id_parametre, mop_valeur_parametre, mop_valeur_mesure)

    La contrainte sur les paramètres de la mesure correspondant à la matrice du test de la mesure est à implémenter à l'aide d'un trigger.

    fsmrel aura peut-être une solution plus élégante car ce problème me rappelle celui concernant, je crois, une distribution de plats cuisinés. Mais il faudrait retrouver la discussion et je manque de temps.

    C'est d'ailleurs dans cette discussion que j'avais pris conscience que :
    Il est également possible qu'une colonne participe à plusieurs clés étrangères qui référencent des tables différentes.
    Bon courage !
    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 !

  12. #12
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 002
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Bonsoir,


    Citation Envoyé par CinePhil Voir le message
    ce problème me rappelle celui concernant, je crois, une distribution de plats cuisinés.
    J’ai retrouvé les plats cuisinés, ils étaient dans mon congélateur.

    La colonne RestoId de la table CARTE_DETAIL participe à deux clés étrangères faisant référence aux clés primaires des deux tables CARTE et PLAT_FORMAT, mais celles-ci sont des nœuds se trouvant sur le chemin qui permet de naviguer (pour reprendre une expression du temps lointain où je faisais dans le navigationnel et que SQL n’existait pas...) de CARTE_DETAIL à RESTO. Le problème posé était le suivant : comment s’assurer qu’on ne tricote pas les plats d’un restaurant avec la carte d’un autre.

    Cela dit, le problème posé par Seuub est d’une autre nature.


    Citation Envoyé par Seuub Voir le message
    la table "test" contient :
    id(int),name(string),matrice de n dimensions(?)
    chaque ligne de ma table "test" contient donc une matrice de dimensions et de taille différentes.
    Ça fait plus de cinquante ans que je n’ai pas diagonalisé des matrices, donc je peux dire des bêtises... Mais a priori, il faudrait isoler les attributs monovalués des attributs multivalués en expédiant ceux-ci dans une table ad-hoc.

    Attributs monovalués, propres à chaque matrice :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Matrice {MatriceId, MatriceA1, MatriceA2, ..., MatriceAm}
        PRIMARY KEY  {MatriceId}

    Les attributs multivalués sont représentés par les lignes et les colonnes de chaque matrice, ainsi que la valeur prise à l’intersection d’une ligne et d’une colonne :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     MatriceLigneColonne {MatriceId, MatriceLigneId, MatriceColonneId, IntersectionValeur}
        PRIMARY KEY  {MatriceId, MatriceLigneId, MatriceColonneId}
        FOREIGN KEY  {MatriceId} REFERENCES Matrice

    Pour reprendre l’exemple proposé par Seuub dans son PDF :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Matrice {MatriceId, MatriceNom, Valeur}
        PRIMARY KEY  {MatriceId}
        UNIQUE {MatriceNom}
     
    MatriceLigneColonne {MatriceId, MatriceLigneId, MatriceColonneId, IntersectionValeur}
        PRIMARY KEY  {MatriceId, MatriceLigneId, MatriceColonneId}
        FOREIGN KEY  {MatriceId} REFERENCES Matrice
     
    Moteur {MoteurId, MoteurNom, MoteurVar1, MoteurVar2, ..., MatriceId}
        PRIMARY KEY  { MoteurId}
        FOREIGN KEY  {MatriceId} REFERENCES Matrice

    En termes de valeurs, table Matrice :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    MatriceId    MatriceNom    Valeur
    ---------------------------------
            1    Matrice3d        X1
            2    Matrice2d        X2

    Table MatriceLigneColonne :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    MatriceId    MatriceLigneId    MatriceColonneId    IntersectionValeur
    ---------------------------------------------------------------------
            1                 1                   1                     0
            1                 2                   1                     0
            1                 1                   2                     0
            1                 2                   2                     0
            1                 1                   3                     0
            1                 2                   3                     1
            2                 1                   1                     0
            2                 2                   1                     0
            2                 1                   2                     0
            2                 2                   2                     1

    Ainsi on reste dans le paradigme relationnel, ce qui est représenté horizontalement :
    x, y, z, ..., r
    doit être modélisé verticalement :
    x
    y
    z
    ...
    r
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  13. #13
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 48
    Points : 33
    Points
    33
    Par défaut
    Merci pour vos réponses

    Je vais prendre la solution de fsmrel qui résout mon problème

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

Discussions similaires

  1. En SQL à la carte, invite qui pointe sur une table
    Par jean_paul.briaud dans le forum Designer
    Réponses: 3
    Dernier message: 17/11/2009, 14h35
  2. Select sur table de jointure qui pointe sur la meme Table.
    Par yakamax dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/06/2008, 11h44
  3. Requete sur une table qui pointe 2 fois sur une autre
    Par Satch dans le forum Langage SQL
    Réponses: 1
    Dernier message: 10/01/2006, 08h48
  4. A propos d'une requête SQL sur plusieurs tables...
    Par ylebihan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/09/2003, 16h26

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