2009-11-13 4 views
0

J'ai une table de base de données qui représente un groupe d'arbres. Les trois premières colonnes sont des GUID qui ressemblent à ceci:Un moyen de mettre à jour récursivement un arbre dans SQL?

NODE_ID (PK) 
PARENT_NODE_ID (FK to same table, references NODE_ID) 
TREE_ID (FK to another table) 

Il est possible de déplacer un nœud vers un arbre différent. La partie délicate est d'amener tous ses nœuds-enfants avec elle. Cela prend une mise à jour récursive. (Et oui, je réalise que c'est un mauvais design en premier lieu, je ne l'ai pas conçu, je dois le maintenir, et je ne peux pas changer le schéma de la base de données.)

Ce serait bien si Je pourrais faire la mise à jour dans SQL, comme procédure stockée. Mais je ne peux pas imaginer comment implémenter l'opération récursive requise dans la logique set, sans utiliser de curseur. Est-ce que quelqu'un sait d'une manière raisonnablement simple de retirer ceci?

+0

Note: le tree_id est redondant, et qui provoque les problèmes de mise à jour. – wildplasser

Répondre

0

Si vous utilisez Postgres ou MS SQL 2005, vous pouvez utiliser une mise à jour récursive. Dans le cas contraire, vous pouvez envisager d'utiliser une méthode autre qu'une liste d'adjacences. J'ai vu une présentation il y a quelques semaines parlant de ces problèmes et stockant des données hiérarchiques. Voici un lien:

http://www.slideshare.net/billkarwin/practical-object-oriented-models-in-sql

Démarrer @ diapositive 40

+0

J'utilise MS SQL 2005. Comment "utilisez-vous une mise à jour récursive"? Je ne suis pas ce que n'importe qui pourrait confondre avec un gourou SQL ... –

Questions connexes