【问题标题】:In postgresql, including children relationship in a table? [closed]在postgresql中,包括表中的子关系? [关闭]
【发布时间】:2021-09-07 15:36:13
【问题描述】:

我需要创建一个 person 表,其列是 id、name、gender、job 和 children。然后,children 列需要包含该人员拥有的子项列表,这些子项也是人员对象,包括名称、id、性别、工作和子项。这样的结构如何存储在一个表或多个表中?解决这个问题的最佳方法是什么?

【问题讨论】:

    标签: sql postgresql database-design


    【解决方案1】:

    需要包含子列表

    这不是在关系数据库中的做法。虽然理论上是可能的,但这会构成糟糕的设计。

    在这种情况下,您可能想反过来做:存储一个人的 父母 的 ID。这样您就可以轻松地检索所有孩子,而无需通过存储“列表”来进行反规范化:

    create table person
    (
      id integer primary key, 
      name   varchar(100) not null, 
      gender varchar(10),
      job    varchar(100),
      parent_id integer references person
    );
    

    如果要获取一个人和所有孩子,请使用recursive common table expression

    with recursive person_list as (
      select *
      from person
      where name = 'Arthur' -- the person we want all children for
      union all
      select child.*
      from person child
        join person_list parent on parent.id = child.parent_id
    )
    select *
    from person_list;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-16
      • 2012-09-10
      • 2016-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多