Comment structurer un modèle pour représenter correctement et efficacement des données arborescentes sur des bases de données relationnelles?

13

Sur la base de la traversée de données arborescentes dans une base de données relationnelle à l'aide de la question SQL , j'aimerais savoir comment la manière régulièrement utilisée pour décrire des données arborescentes sur des bases de données relationnelles compte tenu des implications physiques?

Je suppose que le SGBDR n'a pas de fonctionnalités spéciales pour gérer cela autre que l'ANSI SQL standard ou les fonctionnalités disponibles courantes.

Dans le doute, je m'intéresse toujours à MySQL et PostgreSQL et éventuellement à SQLite.

Maniero
la source

Réponses:

8

Je crois qu'il va chercher quelque chose comme un arbre binaire. Je voudrais simplement inclure trois clés liées à l'identifiant unique de la même table, une pour la gauche, une pour le bon enfant et une pour le parent.

ie- (beaucoup de pseudocode)

TABLE tree
int         id                  autoinc
varchar(16) data_you_care_about
int         parent_id
int         left_child_id
int         right_child_id

FOREIGN KEY parent_id = tree.id
FOREIGN KEY left_child_id = tree.id
FOREIGN KEY right_child_id = tree.id
Patrick
la source
Une considération pour un élément doublement lié est que tout changement de position de l'arborescence sous ce schéma entraînerait pas moins de 3 mises à jour au lieu d'une. Comme vous le dites, c'est aussi une grande hypothèse qu'un arbre binaire avant / arrière est ce qui a été demandé.
REW
très vrai, dans mon expérience, je préfère la taxe de mise à jour d'une liste à double liaison à une liste à liaison unique car je dois souvent parcourir un arbre. mais dans de nombreux cas, cela ne serait pas nécessaire
Patrick
Cela dépend certainement du modèle sous-jacent. Je pense que la réponse donnée par Patrick est suffisante si c'est le bon modèle.
jcolebrand
6

Si chaque nœud est vraiment la même entité de données, le paradigme signifierait quand même une table par entité et une colonne de liaison pour la traversée de l'arbre où chaque nœud n'est lié qu'une seule fois.

Pour les entités liées à plusieurs points de l'arborescence, une table de liaison distincte ou une colonne de valeurs distinctes multiples serait utilisée.

REW
la source