2

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

这是表 UserCalendar 的示例。这是一个用户保存他的事件的表,而且系统从后面插入到这个表中。用户执行一些服务,这些服务具有截止日期,并且这些服务也插入到此表中。问题是没有像 UserEvent 表这样的表。用户应将此日历中的所有事件保存为描述。我应该尽可能简单。

我可以设计这两种方式。

1)

用户日历 UserCalendarId
| 用户名 | 说明 | 对象类型 | 对象标识

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

2)或者我可以按照理论上的说法为每个 FK 使用多个表。

用户日历 UserCalendarId
| 用户名 | 说明

UserEvent
UserCalendarId |EventId

UserServices
UserCalendarId|ServiceId

UserNotifications
UserCalendarId |NotificationId
...

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

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

4

1 回答 1

2

我更喜欢第三种解决方案作为您的两种设计的混合:

用户日历 UserCalendarId
| 用户名 | 描述

UserCalendarAttributes
UserCalendarId | 对象类型 | 对象标识

通过这种方式,您可以随意添加任意数量的对日历条目的附加引用(例如事件和通知),并且在UserCalendar表和任何其他表之间没有紧密耦合。

如果将 FK 放在主UserCalendar表中有意义,它还取决于您必须多久访问一次附加数据(事件、服务等)。

我建议更多地追求灵活性而不是性能,尽管您会稍微增加架构的复杂性。与性能问题相比,功能需求发生变化的可能性更大。

于 2011-04-06T12:18:33.963 回答