Postgresql中具有复合类型的数据库设计

时间:2019-10-08 17:53:39

标签: postgresql

如何在我的表中引用由复合类型构建的另一个表。

我正在尝试建立一个数据库以了解postgresql及其面向对象的功能。

声明如下:有多个公司可以拥有董事会成员。 每个公司可以拥有另一个公司,或者一个人也可以拥有该公司。

这是我正在寻找的数据库设计类型。

create type companyType(
name: VARCHAR,
boardMembers : personType[],
owns: companyType[]
)

create type personType(
name: VARCHAR,
owns: companyType[]
)

Create table company as companyType
Create table person as personType

我了解我无法自行引用companyType,因此我可能会移动另一个表。

我的问题是,当我尝试插入公司类型时,如何插入人员表对象列表作为外键?

是否会在每个表中创建一列“ id”,并为其键入SERIAL以便将其用作外键?

1 个答案:

答案 0 :(得分:0)

这不是关系数据库设计,您不会对此感到满意。

将每个对象映射到一个表。表列是对象的属性。添加一个人工主键(id bigint GENERATED ALWAYS AS IDENTITY)。不要使用复合类型或数组。

关系表示为:

  • 如果关系是一对多的,请在“许多”侧添加一个外键。

  • 如果关系是多对多的,则向两个表中添加一个具有外键的“连接表”。主键是这些外键的并集。

  • 标准化结果数据模型以删除冗余。

  • 撒上唯一的和适当的检查约束。

这样,您的查询将变得简单,并且您可以使用数据库的功能来简化生活。