这种情况的最佳解决方案/做法是什么? 我有一个表,可以引用多个表(对象)?
以下是表UserCalendar的示例。这是一个用户保存事件的表,也是从后面插入此表的系统。用户执行一些服务,这些服务有截止日期,并且也会在此表中插入。问题是UserEvent表没有这样的表。用户应将此日历中的所有事件保存为描述。我应该尽可能简化。
我可以这两种方式设计。
1)
UserCalendar
UserCalendarId | UserId |说明| ObjectType |的ObjectId
使用此选项,我不必FK这个表。我只能更改ObjectType(通知,服务,日历)并使用该表的id作为ObjectId。在Event的情况下,将没有这样的表,这将是空字段。 我们称之为伪FK列。
2) 或者我可以在理论上使用每个FK的多个表格。
UserCalendar
UserCalendarId | UserId |说明
UserEvent
UserCalendarId | EventId
用户服务
UserCalendarId | ServiceId
用户通知
UserCalendarId | NotificationId
...
对于每个系统事件或属于某种类型的任何其他自定义事件,此外部关系表可以是n数字
第一个解决方案是快速实施。
答案 0 :(得分:2)
我更喜欢将第三种解决方案作为两种设计的混合物:
UserCalendar
UserCalendarId | UserId |描述UserCalendarAttributes
UserCalendarId | ObjectType |的ObjectId
通过这种方式,您可以随意添加任意数量的日历条目(例如事件和通知),并且 UserCalendar <之间没有紧密耦合/ strong>表格和任何其他表格。
如果将FK放入主 UserCalendar 表中是有意义的,还取决于您访问其他数据(事件,服务等)的频率。
我建议灵活性比性能更多,但您会略微增加架构的复杂性。功能要求发生变化的可能性要大于性能问题。