ER图到数据库转换

时间:2017-01-20 19:53:34

标签: rdbms er-diagrams database-theory

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

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

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

我知道当E2完全参与时,答案将是2.因为,E2的主键将完美合并。我不确定上面。我见过多个地方,找到了不同的答案。我正在寻找一些有力的答案。

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

1 个答案:

答案 0 :(得分:0)

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

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

E1E2的完全参与可由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

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