如何判断一对多关系的方向
本文解释了如何判断数据库中的关系应该是一对多还是多对一。
当我们设计数据库时,我们需要将表链接在一起。这通常在数据库设计的规范化过程中完成,但如果您要向现有数据库添加新表,也可以这样做。
表之间最常见的关联方式之一被称为“一对多”关系。
这意味着一个表中的一条记录与另一个表中的多条记录相关联。
以下是一些例子:
- 产品可以有类别(例如,家居用品、家具、电器)
- 员工属于部门(例如,销售部、会计部)
- 球员可以为一支球队效力(例如,一线队、青年队)
为了能够存储这些信息,我们需要将表链接在一起。这通过使用外键来完成:我们将一个表的 ID 放置在另一个表中作为一列,并将其称为外键,因为它链接到另一个表的主键。
但是,我们如何知道哪个 ID 应该放在哪个表中呢?
我问自己一个关于数据的问题来回答这个问题。让我们来看看。
示例
让我们使用之前的类别和产品示例。
使用类别将产品分组在一起有各种原因。它可用于在网站上显示。它可能用于报告,这样企业就知道它在每个类别中销售了多少。
表可能如下所示
类别
(类别 ID,类别名称)产品
(产品 ID,产品名称,价格)
数据可能如下所示
类别
类别 ID | 类别名称 |
1 | 家居用品 |
2 | 家具 |
3 | 电器 |
产品
产品 ID | 产品名称 | 价格 |
1 | 椅子 | 80 |
2 | 表格 | 300 |
3 | 笔记本电脑 | 800 |
4 | iPod | 250 |
5 | 小锅 | 15 |
目前,这两个表之间没有链接。我们无法判断哪个类别
与哪个产品
相关。
我们需要将一个表的 ID 添加到另一个表中。
但是,我们如何知道方向呢?
添加 ID 以创建外键
我问自己一个关于数据的问题,以找出关系的方向。
引用表 1 是否有许多表 2,还是表 2 有许多表 1?
如果第一个为真,则表 1 的 ID 进入表 2(进入多方)。
如果第二个为真,则表 2 的 ID 进入表 1(进入多方)。
所以,我们可以用表的实际名称替换表 1 和表 2
一个类别
有许多产品
,还是一个产品
有许多类别
?
- 一个
类别
有许多产品
。 - 一个
产品
没有许多类别
。
因此,在这个例子中,该语句的第一部分是真
。这意味着类别 ID
进入产品
表。
我们的表将不会像这样(外键用斜体表示)
类别
(类别 ID,类别名称)产品
(产品 ID,类别 ID,产品名称,价格)
数据将如下所示
类别
类别 ID | 类别名称 |
1 | 家居用品 |
2 | 家具 |
3 | 电器 |
产品
产品 ID | 类别 ID | 产品名称 | 价格 |
1 | 椅子 | 80 | |
2 | 表格 | 300 | |
3 | 笔记本电脑 | 800 | |
4 | iPod | 250 | |
5 | 小锅 | 15 |
我们可以看到,类别
ID 列现在在产品
表中。
填充数据
如果您的表中已经有数据,那么下一步就是填充这些数据。
您需要编写查询或应用您对业务规则的理解来知道要输入哪些值。我现在将填充此表。
产品
产品 ID | 类别 ID | 产品名称 | 价格 |
1 | 2 | 椅子 | 80 |
2 | 2 | 表格 | 300 |
3 | 3 | 笔记本电脑 | 800 |
4 | 3 | iPod | 250 |
5 | 1 | 小锅 | 15 |
所以,现在我们可以看到,产品
表有一个类别 ID
,我们可以使用类别 ID
来引用类别名称
。
这就是我们如何判断一对多关系应该如何记录的。