65.9K
CodeProject 正在变化。 阅读更多。
Home

如何判断一对多关系的方向

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.43/5 (8投票s)

2018年2月22日

CPOL

3分钟阅读

viewsIcon

12037

本文解释了如何判断数据库中的关系应该是一对多还是多对一。

当我们设计数据库时,我们需要将表链接在一起。这通常在数据库设计的规范化过程中完成,但如果您要向现有数据库添加新表,也可以这样做。

表之间最常见的关联方式之一被称为“一对多”关系。

这意味着一个表中的一条记录与另一个表中的多条记录相关联。

以下是一些例子:

  • 产品可以有类别(例如,家居用品、家具、电器)
  • 员工属于部门(例如,销售部、会计部)
  • 球员可以为一支球队效力(例如,一线队、青年队)

为了能够存储这些信息,我们需要将表链接在一起。这通过使用外键来完成:我们将一个表的 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来引用类别名称

这就是我们如何判断一对多关系应该如何记录的。

© . All rights reserved.