我有这张table:
create table expert_country (
expert_id varchar(36) not null,
country_id varchar(36) not null,
main boolean not null default false,
primary key (expert_id, country_id),
constraint foreign key (expert_id) references expert (id),
constraint foreign key (country_id) references country (id),
-- constraint i'm looking for
);
但我不知道我需要增加什么限制,每个国家只有一个主要Maven。
我试过了 constraint unique (country_id, true)
以及 constraint unique (*, country_id, true)
但它不是有效的sql。有什么想法吗?
1条答案
按热度按时间6uxekuva1#
您可以使用唯一键
null
(遵循sql标准):任何包含null
不等价于任何元组。也就是说,在一个唯一的索引中(country_id, main)
,您可以拥有该行(1, null)
你想多久就多久,最多一排(1, 1)
还有一排(1, 0)
.你需要允许
null
为了main
,需要使用1
以及null
(不是0
)编码,如果它是一个Maven或不是(否则你只能有一个非Maven)。约束条件是:这可能需要对应用程序进行更改,可能看起来很粗略(如
false
显然不一样null
)可能会软化对列的解释(因为它现在可以包含3个值)null
,0
/false
以及1
/true
尽管您可以通过对包含1
).因此,如果您不想这样做,可以定义一个额外的列,该列将在触发器中或作为生成的列进行计算,然后在该“伪”列上定义一个唯一索引:
对于一个国家的主要Maven是哪位Maven的信息的不同编码方式,您可以添加一个列
main_expert_id
给你的country
-表(以及expert_country
验证该组合是否存在)并删除列main
.