表之间的关系

时间:2014-02-12 15:54:47

标签: database database-design

我有一个名为events的实体可以是一种或几种类型。 我的问题是关系如何,因为一个事件可以是多种类型。这些不能是属性也不是继承关系。可能是一个弱强的实体类型,因为没有身体的事件不存在,但我还不清楚。

例如: 活动是一个研讨会和一个会议。

感谢您的帮助。

4 个答案:

答案 0 :(得分:1)

如果列表中定义了可与实体关联的所有可能类型的列表(例如,在单个表中),则可以使用标准的多对多关系模式:

TABLE EVENTS
EventId, primary key

TABLE TYPES
TypeId, primary key

TABLE EVENTTYPES
EventId, foreign key to Events
TypeId, foreign key to Types
...with the primray key on {EventId, Typeid}

答案 1 :(得分:1)

如果你不能使用一个标志(属性)既不使用继承,那么你必须人为地保留两个实体,一个用于研讨会,另一个用于会议,每个实体保留一些FK,可能还有一个标志/触发器确保您没有同时使用FK。

OR

你可以使用一些中间实体,但我知道这将是某种继承,因为这个代理实体就像工作室和会议的“超级”实体(就像“事件”......)

第一个选项在维护方面不好,我不推荐你。

第二个选择是IMO更“直观”。

如果两个实体彼此太近并且将以相同的方式链接到其他几个实体,我认为您可以使用一个标志来区分它们,并且将来可能会发生任何变化他们,你必须重构你的架构,这通常是痛苦和冒险的。这是一个不成熟的优化,而且正如我们所知,过早的优化是所有邪恶的根源。因此,将它们保存在不同的实体中可能是一个不错的选择。

答案 2 :(得分:1)

根据经验,在设计数据库时应始终牢记这一点:每个实体都有自己的表。这是良好的关系数据库设计的基础。

答案 3 :(得分:0)

这种模式非常有用:多值属性 http://www.tomjewett.com/dbdesign/dbdesign.php?page=hobbies.php