规范化具有许多主键的表的约定是什么

问题描述 投票:-1回答:2

我有一个像这样的数据库表:

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

因此,看起来所有从1到5的列都需要是唯一的,并且让这些键成为主键是“有意义的”。这是正确的设计方法还是我们应该在5列上添加一个具有唯一约束的新自动生成列?我们将使用这些列的子集(col1-col3)或所有5列进行查询

sql database-design mariadb composite-primary-key unique-key
2个回答
1
投票

这可以;我认为不需要“生成”列:

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

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

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

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

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


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
© www.soinside.com 2019 - 2024. All rights reserved.