了解数据库中的表如何相互关联。
关系是包含相关信息的表之间有意义的关联——它们使数据库变得有用。如果数据库中的表之间没有某些连接,您可能会使用不同的电子表格文件而不是数据库系统。
正如我们在我们的数据库的简短概述,数据库是表的集合,这些表具有字段(也称为列)。每个表都包含一个字段,称为实体(或主)键,它标识该表中的行。通过告诉您的数据库一个表中的键值对应于另一个表中的键值,您可以在这些表之间创建关系;这些关系使得跨数据库中的不同表运行强大的查询成为可能。当一个表的实体键链接到第二个表时,它被称为外键在第二张桌子上。
确定表之间需要的连接是数据建模和架构设计过程——即弄清楚数据如何组合在一起,以及应该如何准确地配置表及其字段的过程。此过程通常涉及创建表及其关系的可视化表示,称为实体关系图 (ERD),并使用不同的符号指定关系的种类。您的表之间的这些关系可以是:
考虑一下您的表应该如何相互关联也有助于确保数据完整性、数据准确性,并将冗余数据保持在最低限度。
一对一的关系
在一对一的关系中,一个表中的一条记录可以只对应另一个表中的一条记录(或者在某些情况下,没有记录)。一对一的关系并不是最常见的,因为在许多情况下,您可以将相应的信息存储在同一个表中。是否将这些信息拆分为多个表取决于您的整体数据模型和设计方法;如果您要使表格尽可能集中(例如在标准化数据库),那么您可能会发现一对一的关系很有用。
示例一对一关系
假设您正在组织公司的员工信息,并且您还想跟踪每个员工的计算机。由于每个员工只有一台计算机,并且这些计算机不会在员工之间共享,因此您可以在Employee表中添加字段,其中包含每台计算机的品牌、年份和操作系统等信息。然而,从语义的角度来看,这可能会变得混乱——计算机信息真的属于关于员工的表格吗?这由您决定,但另一种选择是创建一个Computers与表具有一对一关系的Employee表,如下图所示:
图 1。Employee和Computers表之间的一对一关系。PK表示主键,FK表示外键。
在这种情况下,我们表中的实体键Employee用作表的外键Computers。您可能有尚未分配给员工的计算机,并且此建模可确保您仍然可以将记录保存在Computer表中。如果员工离开公司,您只需要更新一个字段,您就可以轻松地将计算机连接到新员工。
用于连接 ERD 中表格的行的确切格式(称为鱼尾纹符号)各不相同;有时您会看到表示一对一关系的简单线条,有时这些线条会有如图 1 所示的交叉影线。
一对一关系也可用于安全目的,例如,如果您想将敏感的客户信息存储在单独的表中,您可以Customers使用外键链接到主表。
一对多关系
一对多关系是数据库中表之间最常见的关系类型。在一对多(有时称为多对一)关系中,一个表中的一条记录对应另一个表中的零、一条或多条记录。
一对多关系示例
例如,考虑客户及其订单的表,例如在 Metabase 的示例数据库中,表中的一条记录People可以链接到表中的许多记录Orders。在这种情况下,一个客户可以下许多订单,这些多条订单记录都将链接回People表中的一条记录。该连接通过User_ID字段进行编码,该字段是表中的主键和People表中的外键Orders。下图显示了这两个表如何相互关联:
图 2。Sample Database 的People和Orders表之间的一对多关系。
虽然一个人可以链接到多个订单,但反之则不然——订单只链接到People表中的一条记录,并且没有很多客户。
多对多关系
多对多关系表示一个表中的多条记录链接到另一个表中的多条记录。这些记录可能只与一条记录相关联(或根本没有),但关键是它们可以而且经常与多个记录相关联。多对多关系在实际的数据库用例中并不常见,因为坚持规范化通常涉及将多对多关系分解为单独的、更集中的表。
事实上,您的数据库系统甚至可能不允许创建直接的多对多关系,但您可以通过创建第三个表(称为连接表)来解决此问题,并在它们之间创建一对多关系它和你的两个起始表。
从这个意义上说,Orders元数据库的示例数据库中的表充当连接表,在People和之间创建中间链接Products。示例数据库的 ERD 如下图所示,其中每个关系都由用于连接表的线类型指定:
图 3。显示 Metabase 的示例数据库的 ERD。
从技术上讲,Products和Orders表具有一对多的关系,因为一种产品可以与许多订单相关联。但根据我们假冒公司的数据库,人们似乎只订购一种产品(无论出于何种原因,他们都会购买五台轻量级羊毛电脑)。这个数据库的真实世界(也许更精通业务)实现可能包括两者之间的连接表,使得订单可以包含许多不同的产品。
进一步阅读