我有我存储树排序的等级像这样的两个表删除/更新:如何插入/有序树
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)
现在让我们说在一定程度上1,我有2个TreeData与ID的1 2和0一Treedata项ID为0的孩子,在逻辑顺序的条目:
TreeData SubTree
ID Level parentID childID orderNumber
--------------- -----------------------------------
0 0
1 1 0 1 1
2 1 0 2 2
3 1 0 3 3
现在我有一些数据,我想在1级的数据库中插入,作为儿童父0但“1”和2之间的“之间”,因此数据库像这样结束:
个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
在手,我需要基座,其中,新数据进入数据如下:
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
在哪里,我应该如何实现呢?
SQL服务器(我正在使用MS SQL Server 2008 Developer Edition)能够执行此次排序吗? (在这种情况下,我认为这将是最快的方法)
或者我真的需要通过linq2sql获取更高顺序的数据的所有数据,更新它在我的C#代码中,并将其全部放回SQL服务器?
如何: 移动电平内的一些数据(从ordernr 2至4,SO 4变为3和3变为2)
删除(与ORDERNUMBER 2删除,所以3变为2和4变为3)
移动数据以外的级别(从orderr 2(所以4变成3和3变成2)1级到更高/更低级别,以便级别需要重新排序)?
在我的实际设置中有一些递归正在进行,这对数据库/应用程序交互已经非常沉重。所以是的,我希望每一步都尽可能快地执行,并且花费最少的开销:) – ArjanW 2009-10-05 18:07:36
如果有其他开发人员需要阅读和理解代码,请谨慎行事? :-) – 2009-10-05 18:59:00