與this question類似,但這些答案都不太理想。替代使用數據庫表中的排序順序列
考慮在PostgreSQL使用該Django的模型:
class Parent(models.Model):
id = models.AutoField(primary_key=True)
class Child(models.Model):
id = models.AutoField(primary_key=True)
parent = models.ForeignKey(Parent)
在SQL(希望我得到這個代碼右):
CREATE TABLE parent (
id integer PRIMARY KEY
);
CREATE TABLE child (
id integer PRIMARY KEY
parent_id integer REFERENCES parent
);
怎麼能夠做出讓Child
對象屬於特定Parent
可以重新排序嗎?即使用拖放UI,用戶可以拖動Child
ren並保存更新的排序。創建,更新和刪除Child
應只需要一次操作,即不應要求更新Parent
上的內容。
我有原因的一些不完善的想法,爲什麼每個想法並不理想:
排序
Child
字母順序由用戶提供的VARCHAR - 這會強制用戶想開始具有一定的字母名稱或數字,因爲沒有正當理由而需要大量的創造力。在
Parent
,存儲對應於Child
對象的主鍵的整數數組 - 需要一個以上的操作創建和刪除,在Parent
陣列將需要每次都被更新。沒有數據庫強制數據完整性。按整數列排序
Child
- 創建Child
以查找要使用的下一個整數時需要額外讀取。另一個問題(無論在生產中發生的可能性不大),當整數之間的差距用完時,插入對象「落後」的對象必須被推回。這種情況可以通過反覆考慮最後一個對象並把它放在第一位來人爲地強制。在每個
Child
中,存儲引用下一個/前一個的整數IDChild
- 這解決了一些來自3.的hacky問題,但它看起來荒謬的是效率低下,並且是後勤方面的挑戰。
是否有此規定(即不涉及另外加入或與jsonb
替換第二表)任何雄辯的解決方案?
使用3.您描述的問題是真實的,但可能並不重要,除非您每個父母的孩子數量非常多。 –