DBMS 中的主键

17 Mar 2025 | 6 分钟阅读

DBMS 中有某些键用于不同的目的,其中最常见的是主键。

在本节中,我们将介绍主键 - 什么是主键,主键有什么用,我们还将通过一些示例来理解主键是如何工作的。

什么是主键

主键是表的一组最小属性,其任务是唯一标识给定特定表的行(或称为元组)。

关系的主键是可能的候选键之一,数据库设计者认为它是主要的。选择它可以是为了方便、性能和许多其他原因。从候选键中选择可能的主键取决于以下条件。

  • 最小性:主键应由满足元组唯一出现的最小数量的属性组成。因此,如果一个候选键由两个属性组成,而另一个由单个属性组成,则应选择具有单个属性的键作为主键。
  • 可访问性:使用的主键应可供任何想要使用它的人访问。用户必须能够轻松地使用它插入、访问或删除元组。
  • 非空值:主键必须为关系的每个元组具有非空值,这是识别元组所必需的。
  • 时间变异性:主键的值在关系期间不得更改或变为空。
  • 唯一性:主键的值不得在关系的任何元组中重复。

创建主键约束的语法

主键约束可以在列级别或表级别定义。

在列级别

在表级别

主键的属性

  • 一个关系只能包含一个主键。
  • 主键可以由单个属性组成,称为单主键,也可以由多个属性组成,称为复合键。
  • 主键是最小的超键。
  • 主键属性的数据值不应为空。
  • 作为主键一部分的属性称为主要属性。
  • 主键总是从可能的候选键中选择。
  • 如果主键由多个属性组成,则这些属性是不可约的。
  • 我们使用约定,即构成关系主键的属性带有下划线。
  • 主键不能包含重复值。
  • 定义为 LONG 或 LONG RAW 的列不能作为主键的一部分。

主键的用途

如上所述,主键用于唯一标识表的行。因此,需要唯一标识的行,将键约束设置为该特定字段的主键。主键永远不能具有 NULL 值,因为主键的用途是唯一标识一个值,但如果没有值,它将如何维持。因此,设置了主键约束的字段不能为 NULL。此外,这完全取决于用户,用户可以添加或删除已应用的主键。

注意:一个表只能有一个主键,无论该表中有一列或多列。

理解主键

让我们通过一些示例来了解主键的作用和用途。通常,在数据库中,我们将主键应用于那些我们需要通过它们唯一标识其他数据库字段的元组或列。

例如:当我们在数据库中存储学生的注册详细信息时,我们发现注册号字段是唯一的,并将主键分配给该字段。同样,对于员工表,我们将主键设置在表的员工 ID 上。

让我们实际理解它

下面是名为 STUDENT_DETAILS 的表,其中 Roll_no、Name 和 Marks 是其指定属性。

Primary Key in DBMS

我们知道,在这三个属性中,Roll_no 属性是唯一可以标识表中其他两个属性的属性,因为每个学生在每个组织中都有一个唯一的学号。因此,我们可以将主键约束设置在 Roll_no 列上。

如果我们将 Name 设置为主键会怎样?

如果我们将主键设置在 Name 属性上,那将是无效的,因为两个或多个学生可以拥有相同的姓名。因此,如果我们将主键设置在 Name 上并尝试为两个学生输入相同的姓名,它将显示错误。这就是为什么我们不能将 Name 属性设置为主键。

如果我们将 Marks 设置为主键会怎样?

如果我们将主键设置在 Marks 属性上,那将是一种不恰当的方法,因为两个或多个学生可以在一门科目中获得相似的分数。因此,如果我们将 Marks 属性设置为主键,我们将无法为其他实体输入相同的分数。这就是为什么我们不能为 Marks 属性设置主键。

我们可以查看下表来理解它

杂项示例

考虑另一个示例,我们有一个名为 PRODUCT_DETAILS 的表,其中包含以下属性

COMP_Id:我们可以从哪里购买不同产品的公司 ID。

Prod_Name:它包含我们购买的产品。

Prod_Id:每个产品都有一个识别号。

需要注意的点

  • 我们不能为 Prod_Name 设置主键,因为我们可以从两家不同的公司购买相同的产品。
  • 另一方面,COMP_IdProd_Id 都可以唯一标识公司和产品。所以问题是,我们应该将主键设置在哪个属性上,或者我们应该将主键设置在这两个属性上,即 Prod_Id 和 Comp_Id。
  • 如果我们将主键设置在 COMP_Id 上,那将是错误的,因为我们可以从同一公司购买多种类型的产品。因此,如果我们将 COMP_Id 设置为主键,那么我们将无法使用该公司购买更多不同的产品。
  • 此外,我们不能同时为 Prod_Id 和 COMP_Id 设置主键,因为一个表中只能有一个主键。
  • 如果我们将主键设置在 Prod_Id 上,这种方法是正确的,因为我们购买的每个产品都将有一个唯一的标识。因此,我们应该将主键设置在 Prod_Id 上。

我们可以通过查看下表更好地理解它

Primary Key in DBMS

定义主键

让我们讨论如何在 STUDENT_DETAILS 表属性上设置主键

创建主键

以下是在 STUDENT_DETAILS 表的 Roll_no 属性上创建主键的语法

这是 SQL 和 Oracle 服务器中使用的基本语法。

删除主键

也可以使用 ALTERDROP 命令从属性中删除设置的主键。

创建表后添加主键

为了在创建表后设置主键,请使用 ALTER 命令并添加主键约束来完成。语法如下所示

我们以 Name 属性为例来理解语法。

因此,通过这种方式,我们可以在表上使用和设置主键。但是,定义主键的语法可能因不同类型的数据库而异。


下一主题DBMS 中的超键