我有一个像这样的数据库表:
col1 PRI
col2 PRI
col3 PRI
col4 PRI
col5 PRI
col6
col7
col8
因此,看起来所有从1到5的列都需要是唯一的,并且让这些键成为主键是“有意义的”。这是正确的设计方法还是我们应该在5列上添加一个具有唯一约束的新自动生成列?我们将使用这些列的子集(col1-col3)或所有5列进行查询
这可以;我认为不需要“生成”列:
PRIMARY KEY(a,b,c,d,e)
如果你有这个,它将有效地工作:
WHERE b=22 AND c=333 AND a=4444 -- in any order
大多数其他组合效率较低。
(请使用真实的列名,以便我们更详细地讨论。)
如果将列设置为UNIQUE,则会失败,因为col1在2个不同的行上不能相等。
但是,如果将列设置为PRIMARY KEY但不是UNIQUE,则数据库假定所有主键的组合必须是'UNIQUE'值,因此在任何其他行上找不到col1 + col2 + col3 + col4 + col5。
希望能帮助到你。
这是一个例子:
create table example (
col1 bigint not null unique,
col2 bigint not null,
primary key (col1,col2));
insert into example values(1,1); ==> Success
insert into example values(1,2); ==> Failure - col1 is unique and '1' was used
insert into example values(2,1); ==> Success - '2' was never used on col1
insert into example values(2,7); ==> Failure - '2' was already used on col1
但如果你改用:
create table example (
col1 bigint not null,
col2 bigint not null,
primary key (col1,col2));
insert into example values(1,1); ==> Success
insert into example values(1,2); ==> Success
insert into example values(2,1); ==> Success
insert into example values(1,2); ==> Failure - '1','2' combination was used