postgresql 如何为postgres列表数据类型添加对另一个关系的引用

aiazj4mn  于 2023-04-11  发布在  PostgreSQL
关注(0)|答案(1)|浏览(123)

postgres数据库中,我有两个关系,studentproject。对于学生关系,我将studentid作为主键。在项目关系中,我想添加一个学生id列表作为外键。我编写的查询如下:
CREATE TABLE project(projectid varchar(36), name text, participants varchar[] REFERENCES student(studentid));
它给了我一个错误:
Key columns "participants" and "studentid" are of incompatible types varying[] and character varying
如何引用列表中的每个个体作为postgres中其他关系的引用?

41zrol4v

41zrol4v1#

项目和学生之间的参与者关系不是项目的属性(也不是学生的属性)。该关系应建模为链接项目和学生的关联表:

CREATE TABLE projects_students(
  projectid varchar(36) REFERENCES project(projectid),
  studentid varchar(36) REFERENCES student(studentid),
  CONSTRAINT projects_students_pk PRIMARY KEY (projectid, studentid)
);
CREATE INDEX students_projects_ndx ON projects_students(studentid);

将参与者存储为项目的数组属性有几个问题。其中两个问题是难以维护引用完整性,以及难以识别学生是哪些项目的参与者。这两个问题都可以通过使用具有适当外键约束和索引的关联表来解决。

相关问题