如何为矢量类型主键引用多个主键

时间:2010-04-19 20:25:34

标签: sql

我有以下场景:一个项目表和一个人员表,从事一个或多个项目。另外,我有一个项目id列(类型为int),在第一个表中,它是一个主键,我有一个项目ID的向量,作为int类型的列,在我的第二个表(人员)中,引用第一个表中的主键。

从矢量外键引用多个主键的正确语法是什么。 这是我尝试创建表格的方式,但我不确定在指定的行放置什么:

CREATE TABLE Persons(
    Person_Id int,
    ...,
    ProjectsList int[],
    FOREIGN KEY (ProjectsList) REFERENCES Projects(Project_id) -- not sure what how to define the link here
);

我希望我的解释不会过于复杂。提前感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

我知道没有数据库可以做到这一点(使用真正的外键,而不是一些自定义触发器)。您可能希望规范化表格:

CREATE TABLE Persons (
  Person_ID int,
  ...
  PRIMARY KEY (Person_ID)
);

CREATE TABLE PersonProjects (
  Person_ID int,
  Project_ID int,
  PRIMARY KEY (Person_ID, Project_id),
  FOREIGN KEY (Person_ID) REFERENCES Persons(Person_ID),
  FOREIGN KEY (Project_ID) REFERENCES Projects(Project_ID)
);

答案 1 :(得分:1)

我假设您正在使用PostgreSQL,因为这是支持数组数据类型的罕见数据库之一。

没有声明用于声明适用于数组元素的外键的语法。

您可以按照提及的here编写触发器或CHECK约束。

但更好的解决方案是添加一个表来实现项目和人员之间的多对多关系,正如LukášLalinský所示。这支持First Normal Form

相关问题