Postgresql
哪個 postgres 為可以連結到相同類型資源的嵌套資源設計
我有這種數據需要儲存在 postgres(ruby 對象)中。
#<InitRes:0x007f8ec3734c78 @kind="RestrictionsSchema", @restrictions= [#<ParsedRes:0x007f8ec60ed218 @description="Disallow user", @key="disallowUserConfig", @restriction_type="bool", @title="Disallow user">, #<ParsedRes:0x007f8ec2c96898 @description="Restriction message", @key="disallowUserConfigMessageKO", @restriction_type="string", @title="Restriction message">, #<ParsedRes:0x007f8ec3551730 @description="List of configurations", @key="configurations", @nested_res= [#<ParsedRes:0x007f8ec2565678 @description="configuration", @key="configuration", @nested_res= [#<ParsedRes:0x007f8ec2504328 @description="configuration name", @key="name", @restriction_type="string", @title="Profile Name">, #<ParsedRes:0x007f8ec34b35d0 @description="server URL", @key="server", @restriction_type="string", @title="Server">, #<ParsedRes:0x007f8ec2a64228 @default_value= #<ParsedResRestrictionValue:0x007f8ec3437de0 @type="bool", @value_bool=false>, @description="Use Web logon", @key="weblogonMode", @restriction_type="bool", @title="Use Web logon for authentication">], @restriction_type="bundle", @title="Configuration">], @restriction_type="Array", @title="Configurations">]>
可以有
ParsedRes
多個nested_res
包含和一個列表ParsedRes
。它最多可以嵌套兩層。我想知道這種數據的最佳設計是什麼。我需要能夠獲取相同的樹以在將來顯示它。
我想過有一張可以連結到父母和女兒的桌子
CREATE TABLE parsed_res ( id SERIAL PRIMARY KEY, -- other columns parent_id INT, daughter_id INT );
- 這是個好主意嗎?
- 獲取這棵樹的最佳方法是什麼(子選擇?)
- ltree ?
查詢分層數據的兩種方法:
- 長樹。您可以在此處的類似問題中看到我使用它的範例。. ltree 的問題是您必須自己序列化關係。這是一張平的桌子。這是一個皮塔餅。更新它也有點糟糕。
- 自引用表。您可以在此處的類似問題中看到我使用它的範例。. 這可能是理想的,因為您只儲存父級的標識符。這將創建一個簡單的分層數據類型,您可以使用 RECURSIVE CTE 進行查詢。
範例表,
CREATE TABLE foo ( idfoo serial PRIMARY KEY idparent int REFERENCES foo description text, key text, restriction text, title text, default text );
然後你插入你的根,你的孩子指向父母。