我有我存儲樹排序的等級像這樣的兩個表刪除/更新:如何插入/有序樹
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