Comment créer des arborescences en SQL dans une base de données

Fermé
Bapt1990 - Modifié par Bapt1990 le 9/03/2015 à 10:20
mamiemando Messages postés 33140 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 7 juin 2024 - 11 mars 2015 à 10:49
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

A voir également:

1 réponse

mamiemando Messages postés 33140 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 7 juin 2024 7 756
Modifié par mamiemando le 11/03/2015 à 10:52
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 (
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é
EXPLAIN
afin 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
JOIN
faire 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
0