在这一章中,我们将了解学习相关数据的基础知识。 在讨论和创建不同数据之间的关系之前,让我们来看看为什么需要关联数据。 这一切都回归规范化。
数据库规范化或简单规范化是组织关系数据库的列(属性)和表(关系)以最小化数据冗余的过程。 这是将数据分解到多个表格以提高整体性能,完整性和持久性的过程。
下面来看看下面的包含数据的表格,但问题是这个数据是相当多余的,这增加了输入数据时输入错误和不一致的机会。
客户编号 | 名字 | 地址 | 饼干 | 数量 | 价格 | 总计 |
---|---|---|---|---|---|---|
1 | Ethel Minsu | 12 Main St, Arlington, VA 22201 S | 巧克力片 | 5 | ¥2.00 | ¥10.00 |
2 | Tom Wilber | 1234 Oak Dr., Pekin, IL 61555 | 巧克力片 | 3 | ¥2.00 | ¥6.00 |
3 | Ethil Minsuy | 12 Main St., Arlington, VA 22201 | 巧克力片 | 5 | ¥2.00 | ¥10.00 |
为了解决这个问题,需要重构数据并将其分解成多个表格,以消除一些冗余,如下三个表格所示。
在这里,有三个表:第一个是:tblCustomers
表,第二个是:tblOrders
表,第三个是:Cookies
表。
这里的问题是,仅仅通过拆分多个表中的数据将无助于告诉某个表中的数据如何与另一个表中的数据相关联。要连接多个表中的数据,我们必须将外键添加到tblOrders
表中。
关系通过匹配主键列中的数据来工作,通常是两个表中具有相同名称的列。 在大多数情况下,该关系与一个表中的主键相匹配,该表为每行提供一个唯一的标识符,在另一个表中的外键中包含一个条目。 表格之间有三种类型的关系。 所创建关系的类型取决于相关列的定义方式。
下面来看看这三种关系 -
一对多的关系是最常见的关系类型。 在这种类型的关系中,表A
中的行可以在表B
中具有许多匹配的行,但是表B
中的行在表A
中只能有一个匹配的行。
例如,客户和订单表具有一对多的关系:每个客户可以有很多订单,但每个订单仅来自(或属于)一个客户。
在多对多关系中,表A
中的一行可以在表B
中具有多个匹配的行,反之亦然。
可以通过定义第三个表(称为连接表)来创建这样的关系,该连接表的主键由来自表A
和表B
的外键组成。
例如,Customers
表和Cookies
表具有多对多的关系,这些关系由从这些表中的每个表到Orders
表的一对多关系定义。
在一对一的关系中,表A
中的一行可以在表B
中不超过一个匹配的行,反之亦然。 如果相关列是主键或者具有唯一约束,则创建一对一关系。
这种类型的关系并不常见,因为大多数以这种方式相关的信息将全部在一个表中。可以使用一对一的关系来做以下工作 -