在本章中,我们将了解相关数据的基础知识。在讨论和创建不同数据之间的关系之前,让我们来回顾一下为什么我们需要它。这一切都回归正常化。
正常化
数据库规范化或简单规范化是组织关系数据库的列(属性)和表(关系)以最小化数据冗余的过程。它是跨多个表分割数据以提高整体性能,完整性和寿命的过程。
规范化是在数据库中组织数据的过程。
这包括根据设计的规则创建表并在这些表之间建立关系,以保护数据并通过消除冗余和不一致的依赖性使数据库更加灵活。
现在让我们看看包含数据的下表,但问题是这个数据是相当冗余的,这增加了在数据输入期间打字和不一致短语的机会。
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 |
为了解决这个问题,我们需要重构我们的数据并将其分解成多个表,以消除一些冗余,如下面三个表所示。
这里,我们有一个Customers表,第二个是Orders表,第三个是Cookies表。
这里的问题是,只是通过拆分多个表中的数据将无助于告诉一个表中的数据如何与另一个表中的数据相关。要在多个表中连接数据,我们必须向Orders表添加外键。
定义关系
关系通过匹配键列中的数据(通常是两个表中具有相同名称的列)来工作。在大多数情况下,关系与来自一个表的主键匹配,该表为每个行提供唯一标识符,在另一个表中的外键中具有条目。这里有三种类型的表之间的关系。创建的关系类型取决于如何定义相关列。
现在让我们看看这三种类型的关系 -
一对多关系
一对多关系是最常见的关系类型。在此类型的关系中,表A中的行可以在表B中具有许多匹配的行,但表B中的行在表A中只能具有一个匹配的行。
例如,客户和订单表具有一对多关系:每个客户可以下订单,但每个订单只来自一个客户。
多对多关系
在多对多关系中,表A中的行可以在表B中具有许多匹配的行,反之亦然。
您通过定义第三个表(称为联结表)来创建此类关系,其主键由来自表A和表B的外键组成。
例如,Customers表和Cookies表具有多对多关系,该关系由从这些表到Orders表的一对多关系定义。
一对一关系
在一对一关系中,表A中的行在表B中可以不多于一个匹配行,反之亦然。如果相关列都是主键或具有唯一约束,那么将创建一对一关系。
这种类型的关系不常见,因为以这种方式相关的大多数信息将全部在一个表中。您可以使用一对一关系 -
将表分成多个列。
出于安全原因,隔离表的一部分。
存储短暂的数据,只需删除表即可轻松删除。
存储仅适用于主表子集的信息。