Postgresql
設計:Postgres,父對子/子對父/子對子|JSONB
我對數據庫設計很陌生。我希望為我正在工作的功能提供建議或解決方案。
注意:我們主要在 Postgres 中使用 JSONB 類型
功能:我有一個訂單表,其中包含每個訂單資訊,每個訂單都有使用者訂購的唯一商品。
樣品訂單模式
{ id: "parent_order_id_uuid", "items": [ { item_id: "uuid-#1", details: { etc.... } }, { item_id: "uuid-#2", details: { etc.... } } ] }
我正在開發一項功能,即使用者可以多次更換他購買的物品。
例如-“uuid-#1”可以單獨替換,“uuid-#2”可以單獨替換,或者“uuid-#1”和“uuid-#2”n次替換。
所以每次使用者更換一個項目時,我都需要創建一個只包含被替換項目的新訂單。
樣品更換訂單:
{ id: "order_id_uuid", "items": [ { item_id: "uuid-#1", details: { etc.... } } ] } { id: "order_id_uuid", "items": [ { item_id: "uuid-#2", details: { etc.... } } ] }
要求:
- 在任何時候,我都需要能夠基於“parent_order_id_uuid”創建一個樹狀結構。
- 在任何時候,我都需要能夠根據“parent_order_id_uuid”查詢替換的訂單。
- 我需要在 parent_order_id 和 replacement_orderIds + parent_item_id 和 replacement_ids + replacement_ids 和 replacement_ids 之間建立關係
如何在 Postgres 中儲存這些數據以獲得所有這些要求,我再次同意將這些數據儲存為 JSONB。一些設計建議會對我有所幫助。
(父母對孩子+孩子對父母+孩子對孩子)
簡單地說一下我的要求:
N次父母對孩子
{ "parent_order_id_uuid": [ { "replacement_order_id_1": { "items": [ { "parent_item_id": "uuid-#1", "item_id": "uuid-#3" "details": { etc... } } ] }, "replacement_order_id_2": { "items": [ { "parent_item_id": "uuid-#2", "item_id": "uuid-#4" "details": { etc... } } ] } } ] }
如果這不是很冗長,請告訴我。
PS:這是我在 Database Stack 中的第一個問題。
在此先感謝您的幫助。
首先,一如既往a_horse_with_no_name 是正確的。讀這個
至於如何分解出你的 jsonb。您可以使用單表層次結構。
CREATE TABLE items ( item_id serial PRIMARY KEY parent_id int REFERENCES items, details jsonb );
至少通過這個方案,您已經刪除了 IDS。現在您只需使用遞歸查詢來查詢數據。
欲了解更多資訊,請查找