数据库中主键、主码、主属性、关键字、候选关键字、码的区别

简单来说,主键、主关键字这三个主码实际上指的是同一个概念,它们都是用来唯一标识表中的每一行。
候选代码和关键字是同一件事。
两者都是可以唯一标识元组的属性组合,但候选代码不能有唯一标识元组的子集。
候选关键词是主代码以外的候选代码中的“另类王牌”;主要属性是构成候选代码的属性。
粗略地说,就是“组成王牌的牌”。

我们扩展一下,先说最重要的:比如我们去年使用的电商下单系统中,用户ID应该是主要代码,因为它唯一标识了每个订单;但手机号码和电子邮件地址也可以唯一标识订单,并且是候选人代码。
还有一点是,当你在关系中看到两个候选代码时,例如用户 ID 和用户别名,两者都可以被唯一标识。
选择了一个作为主代码后,候选关键词就变成了另一个——很多人没有注意到这一点,去年就因为这个差点错过了统计口径。
还有另一个关键细节:代码的概念更为笼统,用行话来说,它被称为“全局唯一标识符”。
去年我们重构支付系统的时候,我们发现用户ID和订单时间戳的结合也可以唯一标识交易流向。
这被认为是一个代码,尽管它最终没有被选为主要代码。

起初我认为候选关键字是一个不必要的选择,但后来我发现事实并非如此。
它们完全满足主键的要求,但由于业务需求而选择了不同 - 等等,还有一件事:主属性和候选键之间的关系是“包含”而不是“属于”不要感到困惑。
例如,学号和姓名是可能的键。
这两个都是主要属性,但不要将它们与“属于潜在键”属性混淆。

建议下次设计表结构时,首先列出所有可以唯一标识的属性组合,然后选择对业务最有意义的一个作为基本代码,而不是随意选择一个。

数据库中的主键、超建、候选键、外键是什么?

哦对了,我记得2 02 2 年我去一个城市参加数据库培训。
当时,当我听到主键、超级键、候选键和外键这些术语时,我总是感到困惑。

主键。
想想你的身份证号码。
每个人都是独一无二的,不能重复,不能空洞。
表中的数据行通过主键来区分。
一张表只有一个主键,这一点很简单。

在超级键方面我们更加大胆。
想想城市、身份证号码、姓名、地址。
这些的组合也可以用来识别个人。
这是超级钥匙。
然而,超级键不一定是最小的,并且可能包含不必要的属性。

候选键是最小的超级键,并且不包含冗余信息。
例如,身份证号码可以识别一个人,但姓名和身份证号码也可以识别姓名,因此姓名和身份证号码就是候选键。

外键就像两个人之间的关系。
例如,我有一个员工表,其主键是员工编号。
另一个部门表也有一个部门编号,它是部门表的主键。
员工表中的员工编号也是部门表中的主键(外键)。

当时我很困惑。
一旦理解了这些概念,设计数据库表就成为第二天性。
我在那里工作了很多年,每次说起这件事,我都会想起训练的场景。
数据库设计都是关于这些基本概念的,而且它们是密切相关的。