使数据库管理变得简单的基本密钥

数据库密钥是创建高效关系数据库的最简单方法

正如你可能已经知道的那样,数据库使用表来组织信息。 (如果您基本不熟悉数据库概念,请阅读什么是数据库? )每个表由多行组成,每行对应一个数据库记录。 那么,数据库如何保持所有这些记录的直观性? 这是通过使用密钥。

主键

我们将要讨论的第一种类型的关键是主键 。 每个数据库表应该有一个或多个指定为主键的列。 数据库中的每个记录都应该是唯一的。

例如,假设我们有一个名为Employees的表,其中包含我们公司中每个员工的人事信息。 我们需要选择一个适当的主键来唯一标识每个员工。 你首先想到的可能是使用员工的姓名。 这不会奏效,因为可以想象你会雇用两名同名的雇员。 一个更好的选择可能是使用一个唯一的员工ID号码,当他们被雇用时,他们会分配给每个员工。 一些组织选择使用社会安全号码(或类似的政府标识符)来执行此任务,因为每个员工已经拥有一个,并且他们保证是唯一的。 但是,由于隐私问题,使用社会安全号码用于此目的具有很高的争议性。 (如果您在政府机构工作,根据1974年“隐私法案”,使用社会安全号码甚至可能是非法的。)因此,大多数组织都转向使用唯一标识符(员工ID,学生证等) )不会分享​​这些隐私问题。

一旦你决定了一个主键并建立了数据库,数据库管理系统将强制执行该键的唯一性。

如果您尝试将记录插入到具有复制现有记录的主键的表中,插入操作将失败。

大多数数据库也能够生成自己的主键。 例如,Microsoft Access可能被配置为使用自动编号数据类型为表中的每条记录分配一个唯一的ID。 虽然有效,但这是一个糟糕的设计实践,因为它会在表中的每条记录中留下无意义的值。 为什么不使用该空间来存储有用的东西?

外键

另一种类型是外键 ,用于创建表之间的关系。 大多数数据库结构中的表之间存在自然关系。 回到我们的员工数据库,想象我们想要将包含部门信息的表添加到数据库中。 这个新表格可能被称为部门,并会包含大量关于整个部门的信息。 我们还希望包含有关部门中员工的信息,但在两个表(员工和部门)中拥有相同的信息是多余的。 相反,我们可以在两个表格之间建立关系。

假设Departments表使用Department Name列作为主键。 为了在两个表之间创建关系,我们在Employees表中添加一个名为Department的新列。 然后我们填写每个员工所属部门的名称。 我们还通知数据库管理系统 ,Employees表中的Department列是引用Departments表的外键

然后,数据库将通过确保Employees表的Departments列中的所有值在Departments表中具有相应的条目来强制引用完整性

请注意,外键没有唯一性约束 。 我们可能(而且很可能)有一个以上的员工属于一个部门。 同样,不要求Departments表中的条目在Employees表中具有任何相应的条目。 我们可能会有一个没有员工的部门。

有关此主题的更多信息,请阅读创建外键