作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
DBLint 用于检查数据库状态。有46条规则。在 www.dblint.org 上对每条规则都有一些简单的解释,但对规则 31 的描述如下:
定义的主键不是最小键:主键是最小的 super 键。如果定义的主键不是最小超键,则意味着可以识别具有较少属性的行。当其他表需要引用它时,使用 super 键而不是主键就更没有吸引力了。每个引用表都需要保存比实际需要更多的信息,从而导致使用更多空间和效率更低的索引。
这对我来说不是很清楚。如果有人能解释一下,谢谢!
最佳答案
如果主键中列的子集也可用于唯一标识行,则主键是超键。
示例:
假设您有一个包含公司所有员工的表。每个人都有一个 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 和人员的三个字母别名的组合,但 empID 和别名都必须是唯一的,因此主键是一个 super 键。仅使用列的子集就足够了,例如,将 empID 作为主键来唯一标识单个行,因此这将是一个最小的 super 键。
关于mysql - DBLint 规则 31 意味着,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19311418/
DBLint 用于检查数据库状态。有46条规则。在 www.dblint.org 上对每条规则都有一些简单的解释,但对规则 31 的描述如下: 定义的主键不是最小键:主键是最小的 super 键。如果
我是一名优秀的程序员,十分优秀!