数据库表关系

了解数据库中表之间如何相互关联。

关系是包含相关信息的表之间有意义的关联——它们使数据库变得有用。如果数据库中的表之间没有任何连接,您还不如使用不同的电子表格文件而不是数据库系统。

正如我们在数据库简短概述中所述,数据库是表的集合,这些表具有字段(也称为列)。每个表都包含一个称为实体(或主)键的字段,用于标识该表中的行。通过告知数据库一个表中的键值与另一个表中的键值相对应,您可以在这些表之间创建关系;这些关系使得可以跨数据库中不同的表运行强大的查询。当一个表的实体键链接到第二个表时,它被称为第二个表中的外键。

识别表之间需要的连接是数据建模和模式设计过程的一部分——即,弄清楚数据如何组合在一起,以及应该如何配置表及其字段的过程。此过程通常涉及创建表及其关系的可视化表示,称为实体关系图 (ERD),其中不同的符号指定关系的类型。表之间的关系可以是

认真思考表之间应如何关联也有助于确保数据完整性、数据准确性,并将冗余数据保持在最低限度。

一对一关系

一对一关系中,一个表中的记录只能对应于另一个表中的一条记录(或在某些情况下,没有记录)。一对一关系不是很常见,因为在许多情况下,您可以将相应的信息存储在同一张表中。是否将该信息拆分到多个表中取决于您的整体数据模型和设计方法;如果您尽可能保持表狭隘地关注(就像在规范化数据库中一样),那么您可能会发现一对一关系很有用。

一对一关系示例

假设您正在组织公司的员工信息,并且您还想跟踪每位员工的计算机。由于每位员工只获得一台计算机,并且这些计算机不在员工之间共享,因此您可以向Employee 表格添加字段,以保存每台计算机的品牌、年份和操作系统等信息。但是,从语义角度来看,这可能会变得混乱——计算机信息真的属于关于员工的表格吗?这取决于您来决定,但另一种选择是创建一个 Computers 表格,与 Employee 表格建立一对一关系,如下面的图表所示

A one-to-one relationship between an Employee and a Computers table. PK indicates a primary key, and FK indicates a foreign key.

在这种情况下,我们 Employee 表格中的实体键充当 Computers 表格的外键。您可能有尚未分配给员工的计算机,这种建模确保您仍然可以为 Computer 表格中的计算机保留记录。如果员工离开公司,您只需更新一个字段,并且可以轻松地将计算机链接到新员工。

用于在 ERD 中连接表格的线条的确切格式(称为乌鸦脚符号)有所不同;有时您会看到表示一对一关系的普通线条,有时这些线条会带有阴影线。

一对一关系也可用于安全目的,例如,如果您想将敏感的客户信息存储在一个单独的表格中,您可以将其链接到您的主 Customers 表格,并使用外键。

一对多关系

一对多关系是数据库中表格之间最常见的关系类型。在一对多(有时称为多对一)关系中,一个表中的记录对应于另一个表中的零条、一条或多条记录。

一对多关系示例

例如,考虑客户及其订单的表格,就像 Metabase 的示例数据库中那样,其中 People 表格中的一条记录可以链接到 Orders 表格中的多条记录。在本例中,一位客户可以下多个订单,这些多个订单记录都将链接回 People 表格中的一条记录。该连接通过 User_ID 字段进行编纂,该字段是 People 表格中的主键,也是 Orders 表格中的外键。下图显示了这两个表格如何相互关联

A one-to-many relationship between the Sample Database

虽然一个人可以链接到多个订单,但反过来却不行——订单仅链接到 People 表格中的一条记录,并且没有多个客户。

多对多关系

多对多关系表示一个表格中的多条记录链接到另一个表格中的多条记录。这些记录可能仅与一条记录(或根本没有记录)相关联,但关键是它们可以并且通常与多条记录链接。多对多关系在实际数据库用例中不是很常见,因为坚持规范化通常涉及将多对多关系分解为单独的、更集中的表格。

事实上,您的数据库系统甚至可能不允许创建直接的多对多关系,但您可以通过创建第三个表格(称为连接表)来解决此问题,并在它和您的两个起始表格之间创建一对多关系。

从这个意义上讲,Metabase 示例数据库中的 Orders 表格充当连接表,在 PeopleProducts 之间创建中间链接。示例数据库的 ERD 看起来像下图,其中每个关系都由用于连接表格的线条类型指定

An ERD showing Metabase

从技术上讲,ProductsOrders 表格具有一对多关系,因为一种产品可以与多个订单关联。但是根据我们虚构的公司的数据库,人们似乎只订购一种产品(他们会出于某种原因购买五台轻型羊毛电脑)。此数据库在现实世界中(可能更具商业头脑)的实现可能包括两者之间的连接表,从而使订单可以包含多种不同的产品。

延伸阅读

下一步:度量和维度

如何在查询中使用定量和定性字段。

下一篇文章