2011-08-25 109 views
0

我有分層數據存儲在一個樹形視圖,從SQLite數據庫填充。根據用戶的操作,樹節點的id可以改變(如果他們在節點001之前添加一個新節點,那麼從001到結尾的所有節點的密鑰都會增加1)。在SQLite表中更改鍵的最佳方法是什麼?

這在更新數據庫時證明令人不安 - 因爲更新001的值可能會更新錯誤的節點 - 因爲已將一個節點添加到樹中。

我找到了解決這個問題的方法,但對我來說似乎很笨拙。我只是在更新之前清除表格,刪除所有記錄,然後重新添加它們。但是這看起來很糟糕,因爲如果在添加它們的地方存在一個錯誤,所有剩餘的項目將不會被添加。

我能想到的唯一的其他解決方法是向樹添加節點時,我可以給新節點一個鍵00x(其中x是樹中節點的數量)。但那意味着鑰匙失靈。

這樣做的最好方法是什麼?可能不是我現在擁有的方式。

+10

我不知道它有多糟糕,我沒有看到代碼。 – Vache

+0

@Vache:這段代碼是自然語言:) – Jan

+1

在數據庫中有一個主鍵。不要讓它改變 - 如果需要的話,在樹中使用單獨的列進行id /排序。 – driis

回答

2

你可以使用單獨的排序字段。據我所知,你改變ID的唯一原因是改變順序 - 所以把順序放在別的地方。

(你甚至可以去野外,只需要爲了一個特定節點的孩子當中唯一的,但想想究竟如何你這樣做之前建立這個與SQL查詢)

0

它是一個大的只處理到底?爲什麼它必須在前面或中間?看起來你的數字除了排序外沒有任何意義

爲什麼不創建一個你可以添加到最後的主鍵,這些數字永遠不會改變,所以如果你有1-10並且你添加了它,新的是11.然後你可以做你的增加一塊爲您有專欄,我假設您專門用於訂購。通過這種方式,您可以使用您的產品進行訂購,但在更新時使用主鍵,其中所有內容都必須是唯一的,並且數字在分配後不會更改。

相關問題