2

这种情况的最佳解决方案/实践是什么?我有一个表,可以引用多个表(对象)?许多fk表的一个表列?

下面是一个表UserCalendar的例子。这是一个用户保存他的事件的表格,而且系统从后面插入到这张表格中。用户执行一些服务,这些服务具有最后期限,并且这些服务也插入到此表中。问题是没有像UserEvent表这样的表。用户应该将其所有事件保存在此日历中作为说明。我应该尽可能简单。

我可以设计这两种方式。

1)

UserCalendar
UserCalendarId | UserId |说明| ObjectType | ObjectId

使用这个选项我不必FK这个表。我只能更改ObjectType(通知,服务,日历)并使用该表的id作为ObjectId。在事件的情况下,将不存在这样的表,并且这将是空字段。 我们称这个伪FK列。

2) 或者我可以在理论上对每个FK使用多个表格。

UserCalendar
UserCalendarId | UserId |说明

UserEvent
UserCalendarId | EVENTID

UserServices
UserCalendarId | SERVICEID

UserNotifications
UserCalendarId | NotificationId
...

对于每个系统事件或属于某种类型的任何其他自定义事件,此外部关系表可以是n数,第一种解决方案是快速实施。

回答

2

我宁愿一个第三解决方案,你的两个设计的混合:

UserCalendar
UserCalendarId | UserId |说明

UserCalendarAttributes
UserCalendarId | ObjectType | ObjectId

这样,您可以根据自己的意愿自由添加尽可能多的其他日期条目引用(例如,事件通知),并且您没有UserCalendar表和任何其他表之间的紧密耦合。

如果将FK放在您的主表中,它还取决于您需要多长时间访问一次附加数据(事件,服务等)。

我建议去为灵活性性能更多,但你会稍有增加您的架构的复杂性。功能要求更有可能会比性能问题更加严重。