为什么在一对多关系中我需要第三张表?

la_*_*ong 6 database-design many-to-many

再会,

我们大学的 db 教授总是说,在一侧与 (0, M) 的一对多关系必须有第三个表来关联它们。我当时没有问他,现在我也不能,但我想知道他为什么要这样说?(特别是必须的部分)。

我正在建模一个简单的传感器测量活动数据库,我对此感到非常困惑,您如何看待我的模型,它会按我的预期工作吗?这与我的问题有关,因为我正在做与我所教的完全不同的事情,而且我害怕构建一个损坏的模型。

传感器测量运动模型

传感器有 0 或 M 个度量,一个度量恰好属于一个传感器。活动有 0 或 M 个传感器,一个传感器可能在 0 或 N 个活动中。活动有 0 或 M 个度量,一个度量完全属于一个活动。

使用我教授的方法,我得到 6 个表(每对中间表)。我认为不需要其中的 2 个表,但理解这就是这个问题的目的。

忽略他,我得到了 Measure 和另一个表(多对多中的第三个表,我称之为 Instrument)都关联的 Campaign 和 Sensor。我认为拥有这样一种双重关系看起来是错误的,注意到 Measure 和 Instrument 都会有 FK 到 Campaign 和 Sensor(Instrument 就像一个空的度量,IMO),我决定简单地做我所做的。

我可能需要查询任何组合(给定活动的传感器/测量值和给定传感器的测量值),我想我可以轻松(?)做到这一点(在涉及测量时使用子查询)。我还希望,如果我删除一个活动或一个传感器,它的度量会被删除,我可以通过删除级联轻松实现这一点。会有什么缺点?

对不起,新手问题,任何帮助将不胜感激。我已经用谷歌搜索并没有发现任何东西,也许我使用了错误的术语,我不是在这里假装垃圾邮件。至少对 Google 搜索进行更智能的查询将不胜感激,谢谢。

mir*_*173 5

我不知道你的教授到底说了什么,我不确定我是否理解你的模型。但也许下面的内容很有趣。

TJ Teory、D. Yang 和 JP Fry 撰写的使用扩展实体关系模型的关系数据库逻辑设计方法一文中,描述了如何将实体关系图转换为关系(和表)。在图 8f(在 pdf 的第 13 页)中,有以下 1:n 关系示例:

每个工程师最多可以有一个秘书。一个秘书可以为多个工程师工作。

实体“secretry”和“engineer”之间存在“work-for”关系。

  • “秘书”“为”“工程师”“工作”。
  • 每个“工程师”至多有一个“秘书”为她“工作”。可能是“工程师”没有“为”她“工作”的“秘书”。
  • “秘书”可以“为”一个、多个或没有“工程师”“工作”

在文章中,作者建议将其表示为

ENGINEER(*EMP-NO,...,SEC-EMP-NO)
SECRETAY(*EMP-NO,...)
Run Code Online (Sandbox Code Playgroud)

标有 * 的字段是键。字段 SEC-EMP-NO引用来自SECRETARY的 EMP-NO 并且是nullabel

但是有些作者认为在关系中不应该允许空值。如果想要避免空值,则需要第三种关系来创建以下模型:

ENGINEER(*EMP-NO,...)
SECRETAY(*EMP-NO,...)
WORKS-FOR(*ENG-EMP-NO,SEC-EMP-NO)
Run Code Online (Sandbox Code Playgroud)

ENG-EMP-NO 引用 ENGINEER 中的 EMP-NO,SEC-EMP-NO 引用 SECRETARY 中的 EMP-NO。

如果“工程师”总是有一个“为她工作”的“秘书”,那么具有两个关系的第一个表示不包含空值。

编辑: 我现在在您的帖子中找到了链接到您教授的图表 ( http://i.imgur.com/gIG2D3h.jpg ) 的评论:实际上,他引入了第三个表以避免此处所述的空值。


Wal*_*tty 3

我想仔细区分分析和设计。您分析主题,以便“理解”要存储在数据库中的每个值。您设计数据库是为了提供容器(表)和链接(外键),使数据库发挥作用并保存您在分析过程中发现的值。

我不知道你的主题。我根据你的话来理解:

传感器有 0 或 M 个测量值,一个测量值恰好属于一个传感器。活动有 0 或 M 个传感器,一个传感器可能在 0 或 N 个活动中。Campaign 有 0 或 M 个度量,一个度量恰好属于一个 Campaign。

这就是我感到困惑的地方。

分析 A:存在三个实体(传感器、测量和活动)和两种关系(传感器-测量和测量-活动)。传感器和活动之间存在间接关系,这一关系反映在以下事实:有时传感器和活动将具有一个或多个共同的措施。

分析 B:存在三个实体(传感器、测量和活动)和三种关系(传感器-测量、测量-活动和传感器-活动又名工具)。传感器和活动之间存在间接关系,这一关系反映在以下事实:有时传感器和活动将具有一个或多个共同的措施。传感器和活动之间也存在直接关系,该关系与间接关系是否存在无关。

现在,这些分析中的一项或两项完全是错误的。我倾向于 A,尽管你必须扭曲你的措辞才能到达那里。但这是你的决定。

为什么我如此强调分析?因为如果分析错误,设计几乎就注定失败。

A 解释只需要三个表和两个外键。两个外键(SensorId 和 CampaignId)都与其他列一起进入 Measures 表。

B 解释需要四个与您所描述的表类似的表,只不过您应该有两个外键直接将测量与传感器和营销活动联系起来,而不是您显示的单个链接,而不是测量和仪器之间的一个链接。