如何在我的表中引用由复合类型构建的另一个表。
我正在尝试建立一个数据库以了解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以便将其用作外键?
答案 0 :(得分:0)
这不是关系数据库设计,您不会对此感到满意。
将每个对象映射到一个表。表列是对象的属性。添加一个人工主键(id bigint GENERATED ALWAYS AS IDENTITY
)。不要使用复合类型或数组。
关系表示为:
如果关系是一对多的,请在“许多”侧添加一个外键。
如果关系是多对多的,则向两个表中添加一个具有外键的“连接表”。主键是这些外键的并集。
标准化结果数据模型以删除冗余。
撒上唯一的和适当的检查约束。
这样,您的查询将变得简单,并且您可以使用数据库的功能来简化生活。