实体之间具有一对多交叉关系的实体关系模型。这是错的吗?

时间:2017-07-18 14:24:40

标签: database-design relational-database

我正在建立一个数据库,我有两个交叉的关系。该模型似乎没问题,但我不知道如何将其转换为关系模型,因为会有两个关系引用递归(如果这是正确的单词)。

Entity-relationship model(由于它们没有提供有用的信息,我省略了这些属性)

这就是它的模型:一个生命可以生育N次,同时,在一次生育中,可以生出多个生命。

我知道在关系模型中,必须先定义一个关系,然后才能引用它,所以我不知道如何解决它。

编辑:正如 sqlvogel 正确地指出我的模型没有多大意义。为了实用,出生在出生方面的基数应该是0..1所以存储第一层生物并且没有父母和#34;被允许。这也应该解决可延迟约束的问题,即使它不是最优雅的方式。

1 个答案:

答案 0 :(得分:3)

这种递归设计没有任何内在错误。在您的特定示例中,如果您的目的是建模 parentage ,那么它似乎没有实际意义,因为(除非一个"生成自己),它肯定会在你的数据库中需要无数次的出生和生命。另一方面,您的描述表明您实际上只是建模出生而不是父母,在这种情况下,您的模型可能是合理的。

有些DBMS允许您一次创建整个架构,因此您不必在另一个之前创建一个关系。如果不这样做,应该可以在没有引用约束的情况下创建关系,然后在之后添加约束。

如果您使用的是SQL DBMS,则在使用您创建的表时可能会出现另一个潜在问题。在标准SQL中,它一次只能插入数据或更新一个表的数据。填充两个相互依赖的表的标准方法是使用名为" deferrable constraints"的功能,这意味着在事务提交时而不是在语句边界处评估约束。并非所有DBMS都支持可延迟约束功能,许多数据库设计人员更愿意避免使用它。

相关问题