对于这种情况,最佳解决方案/实践是什么? 我有一个表,可以引用多个表(对象)?
这是表 UserCalendar 的示例。这是一个用户保存他的事件的表,而且系统从后面插入这个表。用户执行一些有截止日期的服务,这些服务也被插入到这个表中。问题是没有像 UserEvent 表这样的表。用户应该将他所有的事件保存在这个日历中作为描述。我应该让这个尽可能简单。
我可以用两种方式设计。
1)
UserCalendar
UserCalendarId | UserId | Description | ObjectType | ObjectId
使用这个选项我就不必 FK 这个表了。我只能更改 ObjectType (Notification、Service、Calendar) 并将该表的 id 用作 ObjectId。在事件的情况下,将没有这样的表,这将是空字段。 我们称之为伪 FK 列。
2) 或者我可以按照理论上的说法使用每个 FK 的多个表。
UserCalendar
UserCalendarId | UserId | Description
UserEvent
UserCalendarId |EventId
UserServices
UserCalendarId|ServiceId
UserNotifications
UserCalendarId |NotificationId
...
这个外部关系表可以是 n 个数字,用于每个系统事件或属于特定类型的任何其他自定义事件
第一个解决方案是快速实现。
最佳答案
我更喜欢第三种解决方案作为您两种设计的组合:
UserCalendar
UserCalendarId | UserId | DescriptionUserCalendarAttributes
UserCalendarId | ObjectType | ObjectId
通过这种方式,您可以根据需要自由地向日历条目添加任意数量的附加引用(例如事件和通知),并且UserCalendar< 之间没有紧密耦合/strong> 表和任何其他表。
如果将 FK 放入您的主 UserCalendar 表中是否有意义,这在一定程度上还取决于您访问额外数据(事件、服务等)的频率。
我建议追求灵 active 而不是性能,尽管您会略微增加架构的复杂性。功能需求发生变化的可能性比您受到性能问题的影响要大。
关于database - 许多 fk 表的一个表列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5564116/