我有一个像这样的数据库表:
col1 PRI
col2 PRI
col3 PRI
col4 PRI
col5 PRI
col6
col7
col8
因此,看起来从1到5的所有列都必须是唯一的,并且仅将这些键设为主键就显得“很有意义”。这是正确的设计方式吗?还是我们应该添加一个在5列上具有唯一约束的自动生成的新列?我们将使用这些列的子集(col1-col3)或全部5列进行查询
答案 0 :(得分:1)
这很好;我认为不需要“已生成”列:
PRIMARY KEY(a,b,c,d,e)
如果您有这个,它将可以有效地工作:
WHERE b=22 AND c=333 AND a=4444 -- in any order
大多数其他组合的效率较低。
(请使用真实的列名,以便我们可以更详细地讨论。)
答案 1 :(得分:0)
如果将列设置为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