Postgres中具有特殊逻辑的2个字段的唯一约束

时间:2014-06-24 08:55:44

标签: postgresql

我有一个包含3列Country,PersonID,Comments的表。
我想添加一个数据库约束,它将为同一个国家/地区的PersonID启用多个记录,但会阻止将同一个PersonId添加到多个国家/地区。 有可能吗?

1 个答案:

答案 0 :(得分:1)

如果你可以添加另一个表混合,这应该是可行的:

CREATE TABLE PersonCountries (
    PersonID char(7) not null,
    Country char(3) not null,
    constraint UQ_PersonCountries_Persons UNIQUE (PersonID),
    constraint UQ_PersonCountries_XRef UNIQUE (PersonID,Country)
)

然后,您可以在PersonIDCountry列上将表中的外键添加到此表中。由于PersonID在上表中必须是唯一的,因此您知道每个人只与一个国家/地区相关联。第二个唯一约束是允许创建外键约束。