我有以下表格:
| student |
- studentID(PK)
- Name
- ...
| Jobs |
- JobID(PK)
- Job_Name
- ...
| Application |
- JobID(FK)
- StudentID(FK)
- ApplicationID(PK)
- stage of application
- stage status
- accepted (default to No)
是否有可能对接受约束,以便它只能是“是”'是如果该学生的其他所有被接受的字段是“不”。
即。接受布尔
默认' n'约束检查(' y' NOT IN(从应用程序中选择接受) 在哪里Student.StudentID = StudentID));
......或类似的效果?
答案 0 :(得分:1)
PostgreSQL不允许CHECK约束中的SELECT语句。但是你无论如何都不需要它。
听起来你需要一个部分索引。猜测数据类型。 。
create table application (
JobID integer,
StudentID integer,
ApplicationID serial primary key,
Stage varchar(25),
Stage_status integer,
Accepted boolean not null default false
);
create unique index on application (StudentID, Accepted)
where Accepted = true;
这将只允许每个学生ID为accepted = true
的一行。它不要求存在任何具有accepted = false
的行。
如果你要在PostgreSQL上使用一段时间,你可能想要养成小写标识符的习惯。