2009-12-10 86 views
0

我有一個表使用鄰接列表模型進行層次結構存儲。因此,我在此表中最相關的欄目有:MySql數據庫表中的樹數據

ItemId // is auto_increment 
ParentId 
Level 
ParentTrail // in the form of "parentId/../parentId/itemId" 

然後我創建了一個插入跳跳虎之前,用於填充柱LevelParentTrail。由於最後一列還包含當前項目的ID,因此我不得不在觸發器中使用一個技巧,因爲auto_increment列在插入前觸發器中不可用。所以我從information_schema.tables表中得到這個值。

所有工作正常,直到我嘗試編寫更新觸發器,當項目更改其父項(ParentId已更改)時,該更新觸發器將更新我的項目及其後代。但是我無法在更新觸發器中更新我的表格。我所能做的就是改變當前記錄的值,但不改變其他值。

我可以爲層次結構數據使用單獨的表格,但這意味着我還必須創建一個將結合這兩個表格(1:1關係)的視圖,並且我想盡量避免這種情況。

有沒有辦法讓所有這些在同一個表中,以便這些字段(LevelParetTrail)使用觸發器自動設置/更新自己?

+0

爲層次結構數據創建單獨的表有什麼不好?這聽起來完全合適。 – 2009-12-10 15:17:02

+0

因爲我想在MySQL中使用實體框架。有兩個表格會迫使我創建一個視圖並將其映射到我的實體類。更新實體實例(或創建新的實例)是不可能的。我想。 – 2009-12-10 15:43:46

回答

2

這聽起來像是可能的,但它會涉及一些重字符串匹配等。不想挖掘自己。

如果您願意稍微更改數據庫模型並實現Nested Set(向下滾動頁面),可以通過觸發器更新左右值輕鬆完成。