📜  满足第一范式 (1NF) 的最小关系

📅  最后修改于: 2021-09-28 10:56:25             🧑  作者: Mango

先决条件 – 范式
数据库的设计按以下方式进行:

  1. 与我们为其设计数据库的利益相关者交谈。获取所有需求,需要存储哪些属性,并在给定的属性集上建立功能依赖关系。
  2. 在需求分析的基础上绘制实体关系图。
  3. 将 ER 图转换为关系模型,最后将这些关系创建到具有适当约束的数据库中。

我们几乎知道如何绘制 ER 图。但是,当我们提出诸如满足第一范式 (1NF) 需要多少最小关系之类的问题时,有时会让人感到困惑。我们建立了一些简单的规则,这些规则是在对每个案例进行深入分析后形成的,因此可以直接使用。

注意 –不鼓励大肆渲染规则,而是理解每个案例背后的逻辑将帮助您轻松且长时间地记住它们。

备注 –

  1. 如果双方完全参与;
    将涉及的两个实体和关系合并到 1 个表中。
  2. 否则,一方完全参与,一方部分参与;
    • M:N合并总参与方的关系。
    • 1:N合并总参与方的关系。
    • 1:1将涉及的两个实体和关系合并到 1 个表中。
  3. else if,双方都是部分参与;
    • M:N每个实体和关系的单独表。因此,3张桌子。
    • 1:N使用外键引用 1 端合并 N 端的关系。
    • 1:1使用外键将关系和一个实体合并到 1 个表中,将另一个实体合并到 1 个表中。

现在,你肯定会有一个问题,我们是如何形成这样的规则的?这是非常容易和合乎逻辑的。让我们了解一个案例背后的逻辑,您也可以类似地建立其他案例的结果。

我们已经给出了一个具有两个实体 E1(ABC) 和 E2(DEF) 的 1:N 关系的场景,其中 A 和 D 分别是主键。 E1 部分参与,而 E2 完全参与关系 R。

基于上述场景,我们在 E1 中创建了某些元组:

A B C
a1 b1 c1
a2 b2 c2
a3 b3 c3

同样,为 E2 创建某些元组:

D E F
d1 e1 f1
d2 e2 f2
d3 e3 f3

现在,创建满足上述条件的关系R,即E1 为部分参与,E2 为全部参与,E1 到E2 为1:N 关系。

A D
a1 d1
a1 d2
a2 d3

想想可能性,我们如何合并?

  • 方式 1:将两个实体和关系合并到一个表中。这是不正确的,因为 (AD) 将成为该表的主键,但主键永远不能有 NULL 值。
    A B C D E F
    a1 b1 c1 d1 e1 f1
    a1 b1 c1 d2 e2 f2
    a2 b2 c2 d3 e3 f3
    a3 b3 c3 NULL NULL NULL
  • 方式 2:在 1 侧合并关系。这是不正确的,因为 (AD) 将成为该表的主键,但主键永远不能有 NULL 值。
    A B C D
    a1 b1 c1 d1
    a1 b1 c1 d2
    a2 b2 c2 d3
    a3 b3 c3 NULL
  • 方式3:在N端合并关系。这是对的。
    D E F A
    d1 e1 f1 a1
    d2 e2 f2 a1
    d3 e3 f3 a2

    出于同样的原因,您是否可以考虑为什么我们允许将两个实体和关系合并到 1 个表中,当它是 1:1 关系时?简单地说,我们不会在那里有一个复合主键,所以我们肯定会有一个没有 NULL 值的主键。再强调一下,为什么我们允许合并实体和关系,双方完全参与?原因是即使我们有这样的合并表的复合主键,我们也确信它的主键永远不会有任何 NULL 值。

    注意 –您可以按照上述相同的步骤来确定所有结果。