2011-07-08 25 views
0

所以這裏是數據結構。這很簡單,但有一個問題。如何摺疊鍵值數據堆棧以保持ID的順序?

INT id, TEXT subject, TEXT response 

基本上,它將被填充簡單的數據條目。但是,他們需要支持刪除。值得注意的是,身份證號碼必須是連續的。例如1-100不會像1-4,6-12,14-100那樣跳過,因爲5和13被刪除。

我在問的是,基本上,你如何摺疊鍵值數據堆棧回到自身以保持ID的順序?

+2

爲什麼順序ID是需求? – Flimzy

+0

ID可以更改嗎?如果是這樣的話,那麼ID可能不應該是你數據結構的一部分,而應該使用row_number()來表示你現在使用的ID。 – gordy

回答

0

如果這實際上是一個要求(而且有些東西聞起來有些腥味),我可能會用ON DELETE觸發器來實現它。

在這個觸發器,當刪除發生,我將立即獲取對應於當前MAX(ID),在表中的行,如果MAX(ID)比行的id更大的你剛剛刪除*,我會對現有行的ID進行更新以匹配剛剛刪除的行的ID。

*檢查max(id)大於剛剛刪除的行的id的原因是爲了確保在剛剛刪除最大行的情況下不會執行更新。

現在,我不知道如果sqlite甚至支持觸發器。如果沒有,您必須在客戶端代碼中實現相同的邏輯。

當然這意味着你的id會瘋狂地波動......在大多數應用程序中,這會比非連續的ID更有問題。所以我仍然想知道爲什麼你認爲你需要順序ID。