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 :

Créer un arbre SQL qui référence d'autres 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 Créer un arbre SQL qui référence d'autres tables
    Bonjour,

    Mon objectif est de réaliser un arbre intervallaire qui représente une certaine organisation de mes tables SQL.

    Typiquement l'arbre me permettra de ranger dans des "dossiers" mes différents éléments de différentes tables

    Cette arbre sera affiché dans un programme et l'utilisateur pourra réorganiser le rangement des différents dossiers avec une certaine restriction.

    Je vous joins un exemple pour mieux comprendre de quoi je parle.

    Mon problème est que dans la table qui représente mon arbre je dois ajouter une clé etrangère pour chaque nouvelle table référencé dans mon arbre.

    Existe-il une autre solution?

    Merci par avance
    Images attachées Images attachées

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 793
    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 793
    Points : 34 024
    Points
    34 024
    Billets dans le blog
    14
    Par défaut
    Au vu de ton fichier, j'ai l'impression que l'arbre intervallaire n'est qu'un classement des diférents éléments figurant dans d'autres tables.

    Je supprimerais la colonne "name" de la table "tree", ainsi que les clés étrangères "Smartphone" et "PC" et je mettrais dans les tables "Smartphone" et "PC" une clé étrangère référençant l'id de "tree".
    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 !

  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
    J'ai oublié de préciser que l''ihm' qui va représenter cette arbre a besoin de savoir si une nœud est de type "dossier de rangement" comme File1 et 2 ,de type "PC" ou bien de type "Smartphone".

    Si je met une clé étrangère dans Smartphone et PC comment est ce que je peux savoir à partir de mon arbre SQL de quel type est mon nœud?

    La seule solution que je vois est de faire à chaque fois une requête pour chercher id de l'arbre dans ma table PC et Smartphone...

    Je me trompe?

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 793
    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 793
    Points : 34 024
    Points
    34 024
    Billets dans le blog
    14
    Par défaut
    OK, je n'avais pas fait attention à ce détail.

    Considérons alors la chose sous un autre angle : l'héritage de données.

    Disons que "tree" contient tous les éléments ayant tous un "name" et que "Smartphone" et "PC" héritent de "tree".
    Il convient alors d'identifier relativement "Smartphone" et "PC" relativement à "tree", ce qui veut dire que l'identifiant des tables filles est le même que celui de la table mère. Ainsi, en conservant les identifiant que tu donnes dans ton exemple, dans la table "Smartphone", "smartphone1" prend l'identifiant 3 et "smartphone2" le 4. Idem pour les PC.

    Tu peux alors obtenir l'information grâce à cette requête :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT t.id, t.name, t.BorneGauche, t.BorneDroite
    	CASE 
    		WHEN s.id IS NOT NULL THEN 'smartphone'
    		WHEN p.id IS NOT NULL THEN 'PC'
    		ELSE 'dossier'
    	END AS type
    FROM tree t
    LEFT OUTER JOIN Smartphone s ON s.id = t.id
    LEFT OUTER JOIN PC p ON p.id = t.id
    ORDER BY t.BorneGauche

    Éventuellement, tu peux ne pas faire d'héritage et te contenter de la clé étrangère référençant l'id de tree dans chacune des autres tables, ça doit fonctionner aussi en changeant les conbditions de jointure. Mais c'est plus joli avec un héritage, surtout si ça a du sens sémantiquement.
    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 !

  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
    OK merci de ta réponse ça fonctionne, je n'ai pas encore mis en place l'héritage mais cela ne serai tarder.

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

Discussions similaires

  1. [MySQL] Comment modifier un champ qui fait référence à une autre table ?
    Par geeka dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 04/08/2014, 13h51
  2. [XL-2010] "SOMME.SI" qui référence un autre classeur
    Par pessoantoi dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/07/2014, 10h46
  3. [PHPExcel] Formule qui référence une autre feuille
    Par DanTesS dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 07/04/2011, 17h21
  4. Réponses: 2
    Dernier message: 13/11/2008, 15h07
  5. Enregistrer les données d'une requête SQL Query sur une autre table
    Par LE MAHJONG dans le forum Bases de données
    Réponses: 4
    Dernier message: 23/09/2008, 21h02

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