DBMS 中的键

2025年4月21日 | 阅读 8 分钟

引言

关系数据库概念的一个关键特性是,关系中不应该有元组重复,以便每个元组都能在关系中被唯一地标识。可以通过简单地列出所有属性值来避免元组重复,但现在的问题是,我们是否需要所有属性来区分。如果我们使用所有属性,那么在引用这些属性以唯一标识特定元组时会浪费大量时间。

能够唯一标识关系元组且无法进一步简化的最小属性集称为键属性或简称为键

DBMS Keys

什么是键?

  • 键在关系数据库中起着重要作用。
  • 它用于唯一标识表中的任何记录或数据行。它还用于建立和标识表之间的关系。
  • 关系中的键,在以下两种性质的意义下,可以进行唯一性指示
    1. 唯一标识:元组无重复。
    2. 不可约:构成键的属性不能进一步划分。

例如:在 Student 表中,ID 被用作键,因为每个学生都有唯一的 ID。在 PERSON 表中,passport_number、license_number、SSN 是键,因为它们对每个人都是唯一的。

DBMS Keys

在 DBMS 中,为什么需要键?

为了定义数据库中不同类型的完整性约束,我们使用键。相反,表是不同关系的不同出现记录的集合。这些文档可能数以千计,其中一些甚至可能是重复的。

因此,我们需要一种方法来独立且唯一地识别这些条目——也就是说,在不产生重复的情况下。键有助于消除这种不便。

键的类型

DBMS Keys

1. 主键

  • 它是用于唯一标识实体的一个且仅一个实例的第一个键。一个实体可以包含多个键,正如我们在 PERSON 表中看到的。从这些列表中最合适的键成为主键
  • 在 EMPLOYEE 表中,ID 可以是主键,因为它对每个员工都是唯一的。在 EMPLOYEE 表中,我们甚至可以选择 License_Number 和 Passport_Number 作为主键,因为它们也是唯一的。
  • 对于每个实体,主键的选择取决于需求和开发人员。
DBMS Keys

主键的目标

  • 主键强制执行数据唯一性,阻止插入重复记录。保留数据准确性取决于其独特性。
  • 它提供了一种快速有效的方式来访问表中的特定记录。主键允许数据库在不搜索整个表的情况下定位特定行。

2. 候选键

  • 候选键是可以唯一标识元组的属性或属性集。
  • 除了主键之外,剩余的属性被视为候选键。候选键与主键一样强大。
  • 为了使一个属性成为候选键,必须满足以下属性。
    1. 唯一性:关系中没有两个不同的元组会在键的所有属性中具有相同的条目。
    2. 不可约性:键的任何真子集都具有唯一性属性。这意味着如果候选键由多个属性组成,则参与其中的任何单个属性都不会产生唯一值。

例如:在 EMPLOYEE 表中,id 最适合作为主键。其余属性,如 SSN、Passport_Number、License_Number 等,都被视为候选键。

DBMS Keys

候选键的目标

  • 候选键的主要目标是确保表中没有两个项具有相同的属性值组合。它提供了识别记录的可靠方法。
  • 选择主键、创建数据库模式和维护数据完整性都依赖于候选键。

3. 超键

超键是能够唯一标识元组的属性集。超键是候选键的超集。

DBMS Keys

例如:在上面的 EMPLOYEE 表中,对于(EMPLOEE_ID, EMPLOYEE_NAME),两个员工的名字可能相同,但他们的 EMPLYEE_ID 不能相同。因此,此组合也可以是键。

超键将是 EMPLOYEE-ID(EMPLOYEE_ID, EMPLOYEE-NAME)等。

超键的目标

  • 确保数据库中没有两个记录具有相同的属性值组合是超键的主要功能。它支持数据完整性的保持。
  • 使用超键识别候选键,或最小超键。作为表中主键使用的特征或特征集称为候选键。

4. 外键

  • 外键是用于指向另一个表的主键的表中的列。
  • 充当外键的属性或属性集必须满足以下两个条件
    1. 外键属性的域与另一个关系定义的属性集或同一关系的主键的域相同。
    2. 关系中外键的任何行中的数据值必须为 NULL 或与相关关系的元组的主键数据值匹配。
  • 外键所在的关系是子关系,引用属性所在的关系是父关系。

例如:考虑 Employee 关系和 Department 关系。

  • 在公司中,每个员工都在一个特定的部门工作,而员工和部门是两个不同的实体。所以我们不能在 employee 表中存储部门的信息。这就是为什么我们通过一个表的主键来链接这两个表。
  • 我们将 DEPARTMENT 表的主键 Department_Id 添加为 EMPLOYEE 表中的一个新属性。
  • 在 EMPLOYEE 表中,Department_Id 是外键,两个表都相关。
DBMS Keys

外键的目标

  • 参照完整性是指跨表的关系的有效性和一致性,它是外键的基本目标。它阻止可能危及这些关系完整性的行为。
  • 它确保跨关联表的数据一致性。例如,如果您有两个表:“Orders”和“Customers”,外键可以确保订单与合法的客户 ID 相关联。

5. 备用键

可能有一个或多个属性或属性的组合可以唯一标识关系中的每个元组。这些属性或属性组合称为候选键。从这些候选键中选择一个作为主键,而剩余的候选键(如果存在)称为备用键换句话说,备用键的总数是候选键的总数减去主键。备用键可能存在,也可能不存在。如果关系中只有一个候选键,则没有备用键。

例如,employee 关系有两个属性,Employee_Id 和 PAN_No,它们充当候选键。在此关系中,Employee_Id 被选为主键,因此另一个候选键 PAN_No 充当备用键。

DBMS Keys

备用键的目标是

  • 备用键的主要目标是确保表中没有两个条目具有相同的属性值组合。它提供了与主键不同的记录标识方法。
  • 通过提供唯一标识条目的各种可能性,备用键促进了数据库体系结构的灵活性。根据特定的用例,可以有效地使用不同的属性来标识记录。

6. 复合键

当主键由多个属性组成时,它被称为复合键。此键也称为连接键。

DBMS Keys

例如,在 employee 关系中,我们假设一个员工可以被分配多个角色,并且一个员工可以同时处理多个项目。因此,主键将由所有三个属性 Emp_ID、Emp_role 和 Proj_ID 组合而成。因此,这些属性充当复合键,因为主键包含一个以上的属性。

备用键的目标是

  • 备用键的主要目标是确保表中没有两个条目具有相同的属性值组合。它提供了与主键不同的记录标识方法。
  • 通过提供唯一标识条目的各种可能性,备用键促进了数据库体系结构的灵活性。根据特定的用例,可以有效地使用不同的属性来标识记录。

7. 人工键

使用任意分配的数据创建的键称为人工键。当主键很大且复杂,并且与许多其他关系没有关系时,就会创建这些键。人工键的数据值通常按顺序编号。

DBMS Keys

例如,employee 关系中的主键 Emp_ID、Emp_role 和 Proj_ID 很大。因此,最好添加一个新的虚拟属性来唯一标识关系中的每个元组。

DBMS 键选择题

1. 在何种情况下,超键的子集是候选键?

  1. 子集是超键
  2. 所有子集都是超键
  3. 没有真子集是超键
  4. 每个子集都是超键
 

答案:C

解释:两个集合不能互为子集。超键中的一个不是整个超集的集合称为候选键。


2. 主键的例子是-

  1. last_name
  2. 地址
  3. first_name
  4. emp_id
 

答案:d

解释:emp_id 是唯一的,所以它是主键。


3. 以下哪个不是主键-

  1. roll_no
  2. 地址
  3. reg_no
  4. emp_id
 

答案:b

解释:address 不唯一,所以它不是主键。


4. 哪个键是另一个表的主键?

  1. 外键
  2. 超键
  3. 候选键
 

答案:a

解释:外键必须是另一个键的主键。


5. 以下哪一项描述了用于唯一标识记录的一个或多个特征的集合?

  1. 超键
  2. 子键
  3. 候选键
  4. 外键
 

答案:a

解释:关系中每个键的超集称为超键。


下一主题DBMS 泛化