3

J'essaie de modéliser une relation d'arborescence dans une table. Par exemple, il existe des catégories et des catégories qui peuvent elles-mêmes figurer dans une catégorie Parent.Dois-je utiliser une clé étrangère pour afficher la relation d'arborescence dans SQL

Mon schéma est:

id int PRIMARY KEY, 
parent_id int, 
name 

Ma question est, dois-je étiqueter la colonne parent_id comme une clé étrangère? Étranger implique «extérieur» et non auto-référencé. Existe-t-il un type de clé différent à cette fin?

Ma question est similaire à: Self-referencing constraint in MS SQL, mais je pose une question différente, en cascade n'est pas un problème.

+0

ici est un autre poste afin que vous avez manqué: http://stackoverflow.com/questions/935098/database-structure-for-tree-data-structure – akf

Répondre

10

Les clés étrangères auto-référencées se produisent tout le temps. Par exemple. un employé peut avoir un autre «employé» comme gestionnaire, de sorte que manager_id sera une clé étrangère du champ employee_id dans la même table.

clés étrangères sont le candidat naturel pour représenter le nœud parent dans les données hiérarchiques, même si elles ne sont pas utilisés exclusivement pour que :)

3

Je ne crois pas qu'il y ait un autre type de clé ... un étranger key serait bien dans ce scénario .. il appliquerait la contrainte contre le parent_id pour s'assurer qu'il référence un ID valide

6

Si vous avez des niveaux d'imbrication très profonds, il peut ne pas être facile de sélectionner de manière performante tous les descendants d'un particulier. nœud, car la plupart des DB ne gèrent pas très bien la récursivité. Une autre approche consiste à utiliser ce qu'on appelle le «modèle d'ensemble imbriqué» pour représenter les relations. Un grand article est disponible ici:

http://www.intelligententerprise.com/001020/celko.jhtml

4

Une clé étrangère entre deux colonnes de la même table est souvent utilisée pour cartographier les structures d'arbres aux bases de données relationnelles. Cependant, ce n'est pas la seule approche disponible.

Voir cet article pour reperesentations alternatives: Storing Hierarchical Data in a Database

Questions connexes