J'ai deux tables où je stocke un arbre avec des niveaux commandés comme ceci:Comment insérer/supprimer/mettre à jour dans un arbre ordonné
Table: TreeData
---------------
ID (int) (primary key)
Data (string)
Level (int) (not null)
---------------------------------------------
Table: SubTree
---------------
parentID (int) (foreign key #1 to TreeData.ID)
childID (int) (foreign key #2to TreeData.ID)
orderNumber (int) (not null)
Maintenant, supposons que sur un certain niveau 1, j'ai 2 treedata entrées avec 1 2 et, tous les enfants d'une entrée treedata de ID sur 0 avec ID 0, dans un ordre logique:
TreeData SubTree
ID Level parentID childID orderNumber
--------------- -----------------------------------
0 0
1 1 0 1 1
2 1 0 2 2
3 1 0 3 3
maintenant, j'ai quelques données que je veux insérer dans la base de données sur le niveau 1, en tant qu'enfant de parent 0 mais "entre" enfants 1 et 2 de sorte que la base de données se termine comme ceci:
TreeData SubTree
ID Level parentID childID orderNumber
--------------- -----------------------------------
0 0
1 1 0 1 1
2 1 0 2 3 <-- order increased 1
3 1 0 3 4 <-- order increased 1
4 1 0 4 2
Les données à la main sur laquelle je dois base où les nouvelles données se sont les suivantes:
Data (string) // the data itself
Level (int) // the level it needs to be on
parentID (int) // the id of the parent
reference_orderNumber (int) // reference to the ordernumber 'this' data
// needs to come before or after
placement (string) // either "before" or "after"
// in case of "after" the order number of 'this' data
// should be reference_orderNumber +1
// in case of "before" the order number of 'this' data
// should be equal to reference_odrderNumber
Où et comment dois-je mettre en œuvre ce?
Le serveur SQL (j'utilise MS SQL Server 2008 Developer Edition) est-il capable de faire cette commande? (dans ce cas, je suppose que ce serait la méthode la plus rapide)
Ou ai-je vraiment besoin de récupérer toutes les données avec des numéros plus élevés via linq2sql, de le mettre à jour dans mon code C# et de tout replacer dans le serveur SQL?
Souhaitez-vous: Déplacement des données à l'intérieur du niveau (de Commande no 2 à 4, de sorte que 4 devient 3 et 3 devient 2)
suppression (suppression de numéro de commande 2, de sorte que 3 devient 2 et 4 devient 3)
Déplacer des données en dehors du niveau (à partir du niveau 2 (donc 4 devient 3 et 3 devient 2) niveau 1 à niveau supérieur/inférieur, donc ce niveau doit être réorganisé)?
Dans ma configuration actuelle, il y a une certaine récursivité, ce qui est déjà très lourd pour l'interaction base de données/application. alors oui, je préférerais que chaque étape soit exécutée le plus rapidement possible avec le moins de frais possible :) – ArjanW
Si un autre développeur doit lire et comprendre le code, procéder avec prudence? :-) –