📅  最后修改于: 2020-11-20 05:25:13             🧑  作者: Mango
在本章中,我们将了解相关数据的基础。在讨论和创建不同数据之间的关系之前,让我们回顾一下为什么需要它。这一切都可以归一化。
数据库规范化,或简称为规范化,是组织关系数据库的列(属性)和表(关系)以最小化数据冗余的过程。这是在多个表之间拆分数据以提高总体性能,完整性和寿命的过程。
规范化是组织数据库中数据的过程。
这包括根据设计规则创建表并在这些表之间建立关系,这些规则旨在通过消除冗余和不一致的依赖性来保护数据和使数据库更灵活。
现在让我们看一下包含数据的下表,但是问题在于该数据是非常多余的,这增加了在数据输入过程中出现拼写错误和措辞不一致的可能性。
CustID | Name | Address | Cookie | Quantity | Price | Total |
---|---|---|---|---|---|---|
1 | Ethel Smith | 12 Main St, Arlington, VA 22201 S | Chocolate Chip | 5 | $2.00 | $10.00 |
2 | Tom Wilber | 1234 Oak Dr., Pekin, IL 61555 | Choc Chip | 3 | $2.00 | $6.00 |
3 | Ethil Smithy | 12 Main St., Arlington, VA 22201 | Chocolate Chip | 5 | $2.00 | $10.00 |
要解决此问题,我们需要重组数据并将其分解为多个表,以消除其中的一些冗余,如以下三个表所示。
在这里,我们有一张用于客户的表,第二张是用于订单的表,第三张是用于Cookie的表。
这里的问题是,仅通过将数据拆分到多个表中就无助于告诉一个表中的数据与另一表中的数据之间的关系。要连接多个表中的数据,我们必须向Orders表中添加外键。
关系通过匹配两个表中具有相同名称的键列中的数据而起作用。在大多数情况下,该关系与一个表中的主键匹配,该表为每一行提供唯一的标识符,而另一表中的外键中有一个条目。表之间存在三种类型的关系。创建的关系类型取决于相关列的定义方式。
现在让我们研究三种类型的关系-
一对多关系是最常见的关系类型。在这种类型的关系中,表A中的一行可以在表B中具有许多匹配行,但是表B中的一行只能在表A中具有一个匹配行。
例如,“客户和订单”表具有一对多关系:每个客户可以下很多订单,但是每个订单仅来自一个客户。
在多对多关系中,表A中的行可以在表B中具有许多匹配行,反之亦然。
通过定义第三个表(称为联结表)来创建这种关系,该表的主键由表A和表B的外键组成。
例如,Customers表和Cookies表具有多对多关系,该关系由这些表中的每一个到Orders表的一对多关系定义。
在一对一关系中,表A中的一行最多只能有一个匹配的表B,反之亦然。如果两个相关列都是主键或具有唯一约束,则将创建一对一关系。
这种类型的关系并不常见,因为以这种方式相关的大多数信息都将全部集中在一个表中。您可能使用一对一关系-