2017-01-20 54 views
0

假设我有两个强实体E1和E2连接由1对多的关系R.ER图到数据库转换

E1 < --------- --------ř - E2

当我将上面的ER图转换成数据库时,会创建多少个表?

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

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

回答

0

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

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

通过两种E1E2全员参与可以通过FK约束来处理。

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

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

我想知道这是比较正确的。

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

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

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

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

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