使用许多主键规范化 table 的约定是什么

what is the convention for normalizing a table with many primary keys

我有一个这样的数据库 table :

col1 PRI
col2 PRI
col3 PRI
col4 PRI
col5 PRI
col6 
col7
col8

因此,看起来从 1 到 5 的所有列都必须是唯一的,这使得 'sense' 只需将这些键设为主键。这是正确的设计方式还是我们应该只添加一个新的自动生成的列,对 5 列有唯一约束?我们将查询这些列的子集 (col1 - col3) 或所有 5 列

如果将列设置为 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

这很好;我认为不需要 'generated' 列:

PRIMARY KEY(a,b,c,d,e)

如果你有这个,它将有效地工作:

WHERE b=22 AND c=333 AND a=4444  -- in any order

大多数其他组合的效率较低。

(请使用真实的列名,以便我们更详细地讨论。)