Comment créer des arborescences en SQL dans une base de données
Bonjour à tous,
Voilà je suis tout nouveau et je me lance actuellement dans la fabrication d'une base de données. Je voulais savoir s'il existait un moyen de mettre en place des "tables d'équivalents" selon le principe suivant :
Table 1 :
Nom|Identifiant|Ref
toto 1 Ref1
tutu 2 Ref10
tata 3 Ref20
équivalents :
Ref | Ref en lien
Ref1 Ref2
Ref2 Ref3
Ref3 Ref4
Table 2 : résultats
Nom|Identifiant|Ref | Ref source
toto 1 Ref1 -> Ref4
...
L'idée étant que la base se débrouille seule pour me recomposer les liens Ref1 -> Ref2 -> Ref3 -> Ref4 pour au final me proposer la synthèse Ref1 => Ref4.
Merci par avance de me donner un petit coup de pouce.
Bapt
Voilà je suis tout nouveau et je me lance actuellement dans la fabrication d'une base de données. Je voulais savoir s'il existait un moyen de mettre en place des "tables d'équivalents" selon le principe suivant :
Table 1 :
Nom|Identifiant|Ref
toto 1 Ref1
tutu 2 Ref10
tata 3 Ref20
équivalents :
Ref | Ref en lien
Ref1 Ref2
Ref2 Ref3
Ref3 Ref4
Table 2 : résultats
Nom|Identifiant|Ref | Ref source
toto 1 Ref1 -> Ref4
...
L'idée étant que la base se débrouille seule pour me recomposer les liens Ref1 -> Ref2 -> Ref3 -> Ref4 pour au final me proposer la synthèse Ref1 => Ref4.
Merci par avance de me donner un petit coup de pouce.
Bapt
A voir également:
- Comment créer des arborescences en SQL dans une base de données
- Comment créer un groupe whatsapp - Guide
- Créer un lien pour partager des photos - Guide
- Créer un compte google - Guide
- Comment créer un compte gmail - Guide
- Créer une adresse hotmail - Guide
1 réponse
Tu peux tout à fait définir les tables en question, par contre il faudra au niveau de la requête SQL préciser quelles jointures tu souhaites utiliser.
De manière une jointure est "chère" donc si tes tables sont très grosses il faut éviter de faire trop de jointures, sinon ce sera lent.
Ensuite ce que tu peux faire pour mettre plusieurs tables en relation au travers de jointures sans impacter lesdites tables et sans dupliquer les données c'est de créer une vue (
Normalement ton SGBD supprimera automatiquement du query plan les tables impliquées dans ta vue et qui ne sont pas nécessaires pour répondre à ta requête. Tu peux vérifier en précédant ta requête du mot clé
En tout cas un SQBD classique (mysql, postgresql) ne prendra jamais l'initiative de choisir quels
Bonne chance
De manière une jointure est "chère" donc si tes tables sont très grosses il faut éviter de faire trop de jointures, sinon ce sera lent.
Ensuite ce que tu peux faire pour mettre plusieurs tables en relation au travers de jointures sans impacter lesdites tables et sans dupliquer les données c'est de créer une vue (
CREATE VIEW) qui indiquera la chaîne de
JOINà déclencher. Il est alors possible de formuler une requête qui au lieu de consulter une table (clause
FROM) fera la requête sur cette vue.
Normalement ton SGBD supprimera automatiquement du query plan les tables impliquées dans ta vue et qui ne sont pas nécessaires pour répondre à ta requête. Tu peux vérifier en précédant ta requête du mot clé
EXPLAINafin de voir ce qui est réellement déclenché.
En tout cas un SQBD classique (mysql, postgresql) ne prendra jamais l'initiative de choisir quels
JOINfaire pour toi (ne serait-ce que parce qu'il existe plusieurs opérateurs de jointure (
LEFT JOIN,
NATURAL JOIN...), et potentiellement plusieurs chemins de jointure dans ton schéma de base.
Bonne chance