我有两张表,其中存储了一个如下所示的有序级别的树:
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,并且Treedata条目的所有子项都在0,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,所以4变为3,3变为2)
删除(使用ordernumber 2删除,因此3变为2,4变为3)
将数据移出级别(从ordernr 2(因此4变为3和3变为2)级别1到更高/更低级别,因此需要重新排序级别?)
答案 0 :(得分:0)
这可能是旁注,但您可能不希望在SQL和C#中都执行逻辑操作。将它放在一个地方,它将更容易维护。例外情况是,如果你真的需要额外的速度,你可能或者可能无法通过快捷方式摆脱它。