如何确保具有相同外键的所有行在我的 PostgreSQL 数据库中具有唯一名称?

How do I make sure that all rows with the same foreign key have unique names in my PostgreSQL database?

我有一个包含两个表的 PostgreSQL 数据库:TeamProject,一对多关系。

团队有这些专栏:

项目有这些:

我想确保团队中的项目必须具有唯一的名称。

属于不同团队的项目应该能够毫无问题地共享名称,所以 UNIQUE 并没有多大帮助。

似乎我可以使用自定义 CHECK 约束来执行此操作,但如果做不到这一点,在 javascript 中实现它的明智的声明方式是什么?

我正在使用 Prisma to interact with my database, and elsewhere in my app I'm using Yup 来验证对象的架构。也许我可以以某种方式将它们结合起来?

您可以使用复合唯一键:

create table project (
    id serial primary key,
    name text,
    team_id int references team(id),
    unique (team_id, name)
);

或者如果您想将其添加到现有 table:

alter table project 
    add constraint cs_project_uniq_name_team 
    unique(team_id, name)
;

您可以创建唯一约束:

alter table project add constraint unq_project_teamid_name
    unique (team_id, name);

您也可以使用唯一索引来做到这一点:

create unique index unq_project_teamid_name on project(team_id, name);