一个且唯一的关系 - ER 图到关系模式

Hel*_*pMe 3 erd database-design relational-theory

在此处输入图片说明

我将这个学期的 DB 课程作为我的 CS 研究的一部分。
本周我们开始研究 ER 图的主题,我觉得这有点令人困惑。

我对上面的图片有些不确定(注意:圆形箭头表示“一个且只有一个”——也就是说,B 中的每个主题都可以而且必须指向 A 中的一个主题,反之亦然)。

我必须为此图创建一个合适的关系模式,这是我的尝试:

  • A(a, b , c, d) ( b是键)
  • B( e , f) (e是键)

这是我的不确定性:

R(b, e) - 无论我用这些外键创建哪个键,都不会保留“一个且唯一一个”约束。

如何创建此约束所在的架构?

如果您有“最多一个”箭头,而不完全是这样呢?
答案会如何变化?

Ren*_*nzo 6

您有多种可能性,每种可能性都有优点和缺点。

解决方案1

定义单个表:

AB(a b c d e f)
Run Code Online (Sandbox Code Playgroud)

有两个候选键,be。您选择其中一个作为主键,并将另一个声明为唯一键。

优点:满足两个实体之间关联的所有约束。

缺点:如果还有其他实体与Aor相关B,那么如果选择的主键AB是“其他”键,则与该实体对应的关系的外键可能不是“自然”的。

解决方案2

使用不可为空的外键为另一个定义两个关系之一,例如将fke(“属性ein 的外键B”)添加到关系A。然后声明这个属性是唯一的。

优点:让两个实体保持独立的关系更“自然”。您保留每个元素A与其中一个且仅一个元素相关的约束B(因为该属性fke不可为空,并且它在所有关系中都是唯一的)。

缺点:您失去了一个约束: 的每个元素B都与 的某个元素相关A。在数据库上开发的应用程序中必须强制执行此约束。

解决方案3

和以前一样,交换的作用AB

解决方案4

正如您所提到的,带有桥接表R(b,e)。然后同时声明b,并e作为唯一的。

优点:您保留了 的每个元素A只能与 的一个元素相关的约束,B反之亦然。

缺点:您失去了每个元素A都与某个元素相关的约束,B反之亦然。这些约束必须由应用程序强制执行。此外,您还有一张表,这使得查询更加复杂。

解决方案5

您在两个表中的每一个中放置一个外键以引用另一个表。这些外键也被声明为唯一的。

优点:您保持约束,即中的每个元素A都与 中的一个且仅一个元素相关B,反之亦然。

缺点:你输了,如果某一元素的限制b1B对应一个元素a1A的,然后a1关联到b1。事实上,这个解决方案允许不一致:一个元素a1可以关联到b2a2可以关联到b1,同时外键 forb2可以引用a2,外键 forb1可以引用a1。所以这个约束应该由应用程序强制执行。而且,数据中存在一定的冗余。


至少在我看来,这些解决方案按照从更“安全”到更“危险”的顺序列出。

最后,从这个案例中值得注意的一点是:当从 ER 模型转换到关系数据模型时,存在转换不完全令人满意的情况。

对于您的最后一个问题:如果最多只有一个箭头会发生什么。在这种情况下,可以使用第二种或第三种解决方案。通常,如果一个箭头是完整的(即您在另一个实体集中恰好有一个元素)而另一个是部分的,则将外键放在关系是完整的关系中。如果两者都是部分的,那么您可以自由选择放置外键的关系。