1

我正在寻找将 eer 图转换为相应关系图的最佳方法。我有一个泛化实体,其中一些专业化与其他实体有单独的关系。泛化实体又与实体具有 n 对 m 关系。下图阐明了这种情况: 具有专业化和 n-to-m 关系的 Eer 图

由于这两个专门的实体有不同的关系,我应该将它们转换为两个单独的表。同时,我应该创建一个建模 n 到 m 关系的表,该表将实体“用户”与实体“新闻通讯”(或者更好的是,它的专业化)相关联。如何应对这个问题?我没有找到任何有用的信息。

我想到的唯一可能的解决方案是创建两个单独的表来模拟 n 到 m 关系,一个链接到“用户”和“编程时事通讯”表,一个链接到“用户”和“旅行时事通讯”表。但我正在为此寻找意见。

4

2 回答 2

2

我看没问题。我将使用下表来实现您的图表:

User (nickname PK, name, address)
Newsletter (name PK, supervisor, type)
Subscription (user_nickname PK/FK, newsletter_name PK/FK)
Programming_Newsletter (newsletter_name PK/FK, type FK, language)
Travel_Newsletter (newsletter_name PK/FK, type FK, means_of_transport)

我可能不会使用用户昵称/通讯名称作为键,因为我更喜欢稳定紧凑的标识符,但这是另一个话题。

于 2016-02-15T06:36:51.327 回答
1

我认为有几种方法可以解决这个问题。

最简单的方法是打破“由于两个专门的实体具有单独的关系,我应该将它们转换为两个单独的表”的假设。如果您将您的专业放在一个表中,您可以使用STI(单表继承)进行概括。但是,这种方法有一个缺点,即您的表将为那些不属于具体专业化的关系包含许多 NULL 值。

另一种方法是使用CTI(类表继承)。这种方法假设您的概括的每个专业化都有一个特定的表格。这将解决 NULL 问题,但它可能会引入性能问题,因为您的代码需要从泛化表急切地连接到您为检索它们而进行的几乎每个查询的专业化。

我不太明白用户和时事通讯之间的 n 对 m 关系中的问题。您应该能够有一个常规的中间表来创建两者之间的关联,因为没有其他属性可以补充该关系。

于 2016-02-14T10:52:27.557 回答