1

DBLint 用于检查数据库状态。有 46 条规则。在 www.dblint.org 上对每条规则都有一些简单的解释,但规则 31 描述如下:

定义的主键不是最小键:主键是最小超键。如果定义的主键不是最小超键,则意味着可以识别出具有较少属性的行。当其他表需要引用超级键而不是主键时,它的吸引力就更小了。每个引用表都需要保存比实际需要更多的信息,从而导致使用更多空间和更低效率的索引。

这对我来说不是很清楚。如果有人可以解释一下,谢谢!

4

1 回答 1

0

如果主键中的列的子集也可用于唯一标识行,则主键是超级键。

例子:

假设您有一个包含公司所有员工的表。每个人都有一个 id,但您还要求每个人都有一个唯一的别名,该别名由三个字母组成,用于登录名、电子邮件等。该表可以是:

create table employee
(
    empID int not null auto_increment,
    alias nvarchar(3) not null unique,
    forname nvarchar(256) not null,
    lastname nvarchar(256) not null,
    constraint employee_pk primary key (empID, alias)
)

在此表中,主键是empID 和persons 三字母别名的组合,但empID 和别名都必须是唯一的,因此主键是超级键。仅使用列的子集(例如,empID 作为主键来唯一标识单个行)就足够了,因此这将是最小的超级键。

于 2013-11-12T21:16:56.407 回答