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