Postgresql

哪個 postgres 為可以連結到相同類型資源的嵌套資源設計

  • November 8, 2017

我有這種數據需要儲存在 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
);
  1. 這是個好主意嗎?
  2. 獲取這棵樹的最佳方法是什麼(子選擇?)
  3. ltree ?

查詢分層數據的兩種方法:

  1. 長樹您可以在此處的類似問題中看到我使用它的範例。. ltree 的問題是您必須自己序列化關係。這是一張平的桌子。這是一個皮塔餅。更新它也有點糟糕。
  2. 自引用表您可以在此處的類似問題中看到我使用它的範例。. 這可能是理想的,因為您只儲存父級的標識符。這將創建一個簡單的分層數據類型,您可以使用 RECURSIVE CTE 進行查詢。

範例表,

CREATE TABLE foo (
 idfoo          serial    PRIMARY KEY
 idparent       int       REFERENCES foo
 description    text,
 key            text,
 restriction    text,
 title          text,
 default        text
);

然後你插入你的根,你的孩子指向父母。

引用自:https://dba.stackexchange.com/questions/169041