设计多对多数据库关系 - 其中一个是'特殊'?

时间:2014-12-16 04:32:31

标签: sql database database-design relational-database

我使用表UserEventUserEvent之间建立了多对多的关系。只有一个用户是活动主持人。

我可以想到两种实现方法:

1)UserEvent有一个host布尔列,对于事件主机是真的。

2)Event有一个host列,指向一个用户。

第二个选项更清楚地表明只有一个主机,但它可以在业务逻辑中使用第一个选项实现(如果事件主机为1,则不允许其他主机)。我也喜欢第一个选项,因为主机列实际上只是一个UserEvent关系。有没有办法实现约束,以便单个UserEvent只有一个Eventtrue host列?

1 个答案:

答案 0 :(得分:0)

最好的办法是第二个。

一个事件有很多用户(M2M关系)所以你需要一个关系表,但事件到主机的关系是唯一的,所以映射它的地方应该是Event表。

在我看来,事件 - 主机关系与事件用户关系不同。但是,当然,也许在你的情况下,主机只是一个用户,由于一些微不足道的原因被标记为主机。

当然,您可以决定将主机信息作为标志保存在EventHost表中,在这种情况下,您需要一个触发器来测试每次插入或更新时是否已将用户标记为主机EventHost中的一行。

某些数据库允许您使用Check约束扫描表以查找是否已存在主机标记的用户,但大多数数据库允许您仅对要插入/更新的行执行检查。

排序版本:

转到2,如果你想换1,请使用触发器。