0

假设我有两个强实体 E1 和 E2 由一对多关系 R 连接。

E1 <--------- R ---------- E2

当我将上述 ER 图转换为数据库时,将创建多少个表?

我知道当 E2 完全参与时,答案将是 2。因为,E2 的主键将完美合并。我不确定以上。我看过多个地方并找到了不同的答案。我正在寻找一些可靠的论据和答案。

答案可以是 2 或 3。我想知道哪个更正确。

4

1 回答 1

0

Chen的原始方法将每个实体关系和关系关系映射到一个单独的表。这将产生 3 个表:

E1 (e1 PK)
E2 (e2 PK)
R (e2 PK, e1)

完全参与E1或者E2可以由 FK 约束来处理。

如您所见,E2R行列式/PK 相同。这允许我们将两个关系组合到一个表中,如果部分参与关系,则使用可为空的e1列,如果E2完全参与,则使用不可为空的列。完全参与E1仍然需要一个 FK 约束:

E1 (e1 PK)
E2 (e2 PK, e1)

我想知道哪个更正确。

从逻辑上讲,这两种解决方案几乎是等价的。

制作 3 个表可以保持概念 (ER) 模型的结构,但会生成更多表,这会以一种方式增加复杂性。另一方面,它避免了产生自身复杂性的空值。

制作 2 个表会减少表的数量,但会引入空值。此外,我们必须诉诸不同的机制(可空列与 FK 约束)来实现单一概念(完全参与)。

其他要求也会影响决策。如果我有 50 个可选属性,我当然不想处理 50 个不同的表!但是,如果我想创建另一个R2仅适用于E2已经参与其中的值的关系 ( ) R,我可以使用 FK 约束在第一个设计中强制执行该约束R2 (e2) referencing R (e2):在第二种设计中,我需要使用触发器,因为我只想允许对e2具有非空e1值的引用。

没有最终正确的答案。概念、逻辑和物理建模解决了不同的问题,而未知的需求将影响您的模型并与您的决策相矛盾。就像在编程中一样,尽量保持简单,不断重构并希望最好。

于 2017-04-04T05:58:09.687 回答