Datomic中沒有現成的模式特性用於在多對多關係中對子實體進行排序,但這是一個非常普遍的要求。谷歌搜索已經發現了一些解決方案,所以我想在此清點各種需求和解決方案,並希望得到社區的意見。如何在Datomic中實現排序的一對多關係?
可能要求
- R1:少數孩子的實體(N)(不知道的小/大 門檻應該是什麼)
- R2:大量子實體的
- R3:單親兒童
- R4:多父母子女
- R5:遞歸子女,即存儲在Datomic中的樹
我的特殊使用案例是R1 + R3 + R5,我認爲這很常見,但我想盡可能多地列舉,以便將來可以成爲其他人的有用參考。
解
- S1:帶有 「位置」 嵌套組件的實體屬性例如Datofu
- S2:添加自定義「位置」屬性,每一個孩子的描述using transactor fns here和this post
- S3:使用在每一個孩子的實體「下一個」屬性鏈表中datomic-linklist
- S4實現的:獨立包裝佔邊爲described in this post
問題實體
每個解決方案似乎公頃面臨挑戰。我能想到的是:
- P1:保持插入,刪除或移動操作的恆定時間操作。已經有建議使用小數來表示「位置」值,以避免在重新排序時更新所有的孩子。
- P2:支持與訂購的多個父親關係
- P3:維護存儲的位置或邊的複雜性訂購或訂購更改。
- P4:更改爲「位置」屬性影響隱含「上次更改」日期子實體時,它實際上並沒有改變
- P5:查詢/拉(特別是遞歸查詢)通過包裝連接時變得困難實體
對於我的樹用例,我不關心P2和P1是不是一個大問題,因爲N個總體上是低
所有這些研究並沒有幫助我找到哪個溶液的澄清度最適合我的樹用例,但我傾向於S2。自然,最簡單的複雜性是我的目標,但我懷疑所有的解決方案都是複雜的。
問題:你對這個問題有什麼經驗,你可以分享什麼,這將有助於他人決定?正如他們指出的那樣,我會在上面添加更多的R,S和P。我(和其他許多人)會真正感謝任何反饋。
A similar question在幾年前被問到,但在那裏發生的事情並不多。
你確定S2的鏈接是正確的嗎? –
同意,該帖子沒有明確說明訂單要求。我添加了另一個。 –