使用许多主键规范化 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
大多数其他组合的效率较低。
(请使用真实的列名,以便我们更详细地讨论。)
我有一个这样的数据库 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
大多数其他组合的效率较低。
(请使用真实的列名,以便我们更详细地讨论。)