如何确保具有相同外键的所有行在我的 PostgreSQL 数据库中具有唯一名称?
How do I make sure that all rows with the same foreign key have unique names in my PostgreSQL database?
我有一个包含两个表的 PostgreSQL 数据库:Team
和 Project
,一对多关系。
团队有这些专栏:
- id
- 姓名
项目有这些:
- id
- 姓名
- team_id
我想确保团队中的项目必须具有唯一的名称。
属于不同团队的项目应该能够毫无问题地共享名称,所以 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);
我有一个包含两个表的 PostgreSQL 数据库:Team
和 Project
,一对多关系。
团队有这些专栏:
- id
- 姓名
项目有这些:
- id
- 姓名
- team_id
我想确保团队中的项目必须具有唯一的名称。
属于不同团队的项目应该能够毫无问题地共享名称,所以 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);