DBMS 键:候选键、超键、主键、外键类型及示例
DBMS 中的键是什么?
DBMS 中的键是一个或一组属性,可帮助您识别关系(表)中的行(元组)。它们允许您找到两个表之间的关系。键通过表中一个或多个列的组合,帮助您唯一地标识表中的一行。键也有助于从表中查找唯一的记录或行。数据库键也有助于从表中查找唯一的记录或行。
示例
员工 ID | 名字 | 姓氏 |
---|---|---|
11 | 安德鲁 | 约翰逊 |
22 | 汤姆 | 伍德 |
33 | 亚历克斯 | 黑尔 |
在上述示例中,员工 ID 是主键,因为它唯一地标识了员工记录。在此表中,没有其他员工可以拥有相同的员工 ID。
为什么我们需要一个键?
以下是 DBMS 系统中使用 SQL 键的一些原因。
- 键可帮助您识别表中的任何数据行。在实际应用中,一个表可能包含数千条记录。此外,记录可能重复。RDBMS 中的键确保您能够唯一地识别表记录,尽管存在这些挑战。
- 允许您建立表之间的关系并识别表之间的关系
- 帮助您在关系中强制执行身份和完整性。
DBMS 中的键类型(数据库管理系统)
DBMS 中主要有八种不同类型的键,每种键都有其不同的功能
- 超键
- 主键
- 候选键
- 备用键
- 外键
- 复合键
- 组合键
- 代理键
让我们通过示例了解 DBMS 中的每个键
- 超键 – 超键是单个或多个键的组合,用于标识表中的行。
- 主键 – 是表中唯一标识每行的列或列组。
- 候选键 – 是一组唯一标识表中元组的属性。候选键是没有重复属性的超键。
- 备用键 – 是表中唯一标识每行的列或列组。
- 外键 – 是在两个表之间建立关系的列。外键的目的是维护数据完整性并允许在实体的两个不同实例之间进行导航。
- 复合键 – 具有两个或更多属性,允许您唯一地识别特定记录。每列本身在数据库中可能不是唯一的。但是,当与其他列组合时,复合键的组合变得唯一。
- 组合键 – 是两个或更多列的组合,用于唯一标识表中的行。列的组合保证了唯一性,尽管单个列的唯一性不作保证。
- 代理键 – 旨在唯一标识每个记录的人工键称为代理键。这种键是唯一的,因为当您没有自然主键时会创建它们。
什么是超键?
超键是单个或多个键的组合,用于标识表中的行。超键可能包含不需要唯一标识的额外属性。
示例
员工社保号 | 员工编号 | 员工姓名 |
---|---|---|
9812345098 | AB05 | 已显示 |
9876512345 | AB06 | 罗斯林 |
199937890 | AB07 | 詹姆斯 |
在上述示例中,EmpSSN 和 EmpNum name 是超键。
什么是主键?
DBMS 中的主键是表中唯一标识每行的列或列组。主键不能重复,这意味着相同的值不能在表中出现多次。一个表不能有多个主键。
定义主键的规则
- 两行不能有相同的主键值
- 每行都必须有一个主键值。
- 主键字段不能为 null。
- 如果任何外键引用该主键,则主键列中的值不能被修改或更新。
示例
在以下示例中,StudID
是主键。
学生 ID | 学号 | 名字 | 姓氏 | 电子邮件 |
---|---|---|---|---|
1 | 11 | 汤姆 | 价格 | abc@gmail.com |
2 | 12 | 尼克 | 赖特 | xyz@gmail.com |
3 | 13 | 达纳 | 纳坦 | mno@yahoo.com |
什么是备用键?
备用键是表中唯一标识每行的列或列组。一个表可以有多个主键选择,但只能将一个设置为唯一的。所有不是主键的键都称为备用键。
示例
在此表中,StudID、学号、电子邮件都符合成为主键的条件。但由于 StudID 是主键,学号、电子邮件就成为了备用键。
学生 ID | 学号 | 名字 | 姓氏 | 电子邮件 |
---|---|---|---|---|
1 | 11 | 汤姆 | 价格 | abc@gmail.com |
2 | 12 | 尼克 | 赖特 | xyz@gmail.com |
3 | 13 | 达纳 | 纳坦 | mno@yahoo.com |
什么是候选键?
SQL 中的候选键是一组唯一标识表中元组的属性。候选键是没有重复属性的超键。主键应从候选键中选择。每个表必须至少有一个候选键。一个表可以有多个候选键,但只有一个主键。
候选键的属性
- 它必须包含唯一值
- SQL 中的候选键可以有多个属性
- 不得包含空值
- 它应该包含最少字段以确保唯一性
- 唯一标识表中的每个记录
候选键示例:在给定的表中,学生 ID、学号和电子邮件是候选键,可帮助我们唯一标识表中的学生记录。
学生 ID | 学号 | 名字 | 姓氏 | 电子邮件 |
---|---|---|---|---|
1 | 11 | 汤姆 | 价格 | abc@gmail.com |
2 | 12 | 尼克 | 赖特 | xyz@gmail.com |
3 | 13 | 达纳 | 纳坦 | mno@yahoo.com |
什么是外键?
外键是用于在两个表之间建立关系的列。外键的目的是维护数据完整性并允许在实体的两个不同实例之间进行导航。它充当两个表之间的交叉引用,因为它引用了另一个表的主键。
示例
部门代码 | 部门名称 |
---|---|
001 | 科学 |
002 | 英语 |
005 | 电脑 |
教师 ID | 名字 | 姓氏 |
---|---|---|
B002 | 大卫 | 华纳 |
B017 | 萨拉 | 约瑟夫 |
B009 | 迈克 | 布伦顿 |
在这个 DBMS 键的例子中,我们有一个学校里的教师表和部门表。然而,没有办法查看哪些搜索在哪个部门工作。
在此表中,通过将外键 Deptcode 添加到教师姓名,我们可以在两个表之间创建关系。
教师 ID | 部门代码 | 名字 | 姓氏 |
---|---|---|---|
B002 | 002 | 大卫 | 华纳 |
B017 | 002 | 萨拉 | 约瑟夫 |
B009 | 001 | 迈克 | 布伦顿 |
这个概念也称为参照完整性。
什么是复合键?
复合键具有两个或多个属性,允许您唯一地识别特定记录。每列本身在数据库中可能不是唯一的。然而,当与其他列组合时,复合键的组合变得唯一。数据库中复合键的目的是唯一地识别表中的每个记录。
示例
订单号 | 产品 ID | 产品名称 | 数量 |
---|---|---|---|
B005 | JAP102459 | 鼠标 | 5 |
B005 | DKT321573 | USB | 10 |
B005 | OMG446789 | 液晶显示器 | 20 |
B004 | DKT321573 | USB | 15 |
B002 | OMG446789 | 激光打印机 | 3 |
在此示例中,OrderNo 和 ProductID 不能作为主键,因为它们不能唯一地标识记录。但是,Order ID 和 Product ID 的复合键可以用于唯一标识每个记录。
什么是组合键?
组合键是两个或更多列的组合,用于唯一标识表中的行。列的组合保证了唯一性,尽管单个列的唯一性不作保证。因此,它们被组合起来唯一地标识表中的记录。
复合键和组合键的区别在于,复合键的任何部分都可以是外键,但组合键可能不属于外键。
什么是代理键?
代理键是一种人工键,旨在唯一标识每个记录。当没有自然主键时创建这种 DBMS 中的部分键,因此它是唯一的。它们不给表中的数据赋予任何意义。DBMS 中的代理键通常是整数。代理键是在记录插入表之前生成的值。
名字 | 姓氏 | 开始时间 | 结束时间 |
---|---|---|---|
安妮 | 史密斯 | 09:00 | 18:00 |
杰克 | 弗朗西斯 | 08:00 | 17:00 |
安娜 | 麦克莱恩 | 11:00 | 20:00 |
已显示 | 威廉 | 14:00 | 23:00 |
以上示例显示了不同员工的轮班时间。在此示例中,需要代理键来唯一标识每个员工。
SQL 中允许使用代理键的情况是:
- 没有属性具有主键的参数。
- 当表中的主键太大或太复杂时。
主键和外键的区别
主键和外键的主要区别如下:
主键 | 外键 |
---|---|
帮助您唯一标识表中的记录。 | 它是表中的一个字段,是另一个表的主键。 |
主键永不接受空值。 | 外键可以接受多个空值。 |
主键是聚集索引,DBMS 表中的数据物理上按聚集索引的顺序组织。 | 外键不能自动创建索引,无论是聚集索引还是非聚集索引。但是,您可以在外键上手动创建索引。 |
一个表只能有一个主键。 | 一个表可以有多个外键。 |
摘要
- DBMS 中的键是什么:DBMS 中的键是一个或一组属性,可帮助您识别关系(表)中的行(元组)。
- RDBMS 中的键允许您建立表之间的关系并识别表之间的关系。
- DBMS 中的八种键类型是:超键、主键、候选键、备用键、外键、复合键、组合键和代理键。
- 超键是单个或多个键的组合,用于标识表中的行。
- 表中唯一标识每行的列或列组称为主键。
- DBMS 中所有不是主键的键都称为备用键。
- 没有重复属性的超键称为候选键。
- 复合键是具有多个字段的键,允许您唯一识别特定记录。
- 具有多个属性以唯一标识表中行的键称为组合键。
- 旨在唯一标识每个记录的人工键称为代理键。
- 主键永不接受空值,而外键可以接受多个空值。