Database 多个fk表的一个表列?

Database 多个fk表的一个表列?,database,database-design,foreign-key-relationship,database-normalization,database-table,Database,Database Design,Foreign Key Relationship,Database Normalization,Database Table,对于这种情况,最佳解决方案/实践是什么? 我有一个表,可以引用多个表(对象) 下面是一个表格UserCalendar的示例。这是一个表,用户可以在其中保存其事件,但系统也可以从后面在此表中插入内容。用户执行一些服务,这些服务有截止日期,并且这些截止日期也插入到此表中。问题是并没有像UserEvent表这样的表。用户应将此日历中的所有事件保存为说明。我应该尽可能地简化这件事 我可以设计两种方式 (一) 用户日历 UserCalendarId | UserId | Description | Obj

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

下面是一个表格UserCalendar的示例。这是一个表,用户可以在其中保存其事件,但系统也可以从后面在此表中插入内容。用户执行一些服务,这些服务有截止日期,并且这些截止日期也插入到此表中。问题是并没有像UserEvent表这样的表。用户应将此日历中的所有事件保存为说明。我应该尽可能地简化这件事

我可以设计两种方式

(一)

用户日历
UserCalendarId | UserId | Description | ObjectType | ObjectId

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

(二) 或者我可以像理论上说的那样,为每个FK使用多个表

用户日历
用户日历ID |用户ID |说明

UserEvent
UserCalendarId | EventId

用户服务
UserCalendarId | ServiceId

用户通知
UserCalendarId| NotificationId

对于每个系统事件或属于特定类型的任何其他自定义事件,此外部关系表可以是n个数字


第一个解决方案是快速实现。

我更喜欢第三个解决方案,它是两种设计的混合:

用户日历
UserCalendarId | UserId |说明

用户日历属性
UserCalendarId | ObjectType | ObjectId

通过这种方式,您可以自由地向日历条目添加任意多的附加引用(例如事件和通知),并且用户日历表与任何其他表之间没有紧密耦合

如果将FK放在主UserCalendar表中有意义,那么它还取决于您访问附加数据(事件、服务等)的频率

我建议使用灵活性而不是性能,尽管您会稍微增加模式的复杂性。与性能问题相比,功能需求更可能发生变化