database - 许多 fk 表的一个表列?

标签 database database-design foreign-key-relationship database-normalization database-table

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

这是表 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 | Description

UserCalendarAttributes
UserCalendarId | ObjectType | ObjectId

通过这种方式,您可以根据需要自由地向日历条目添加任意数量的附加引用(例如事件通知),并且UserCalendar< 之间没有紧密耦合/strong> 表和任何其他表。

如果将 FK 放入您的主 UserCalendar 表中是否有意义,这在一定程度上还取决于您访问额外数据(事件、服务等)的频率。

我建议追求灵 active 而不是性能,尽管您会略微增加架构的复杂性。功能需求发生变化的可能性比您受到性能问题的影响要大。

关于database - 许多 fk 表的一个表列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5564116/

相关文章:

mysql - SQL bmi 方程

mysql - 如何查询关系表中的所有结果?

javascript - Kendo UI Web Grid - Popup_Editor 模板 - 下拉列表

mysql - 返回在另一个表中找不到 cat_id 的表中的所有行

android - 为什么我会收到错误 "table is not created?"有什么问题?

android - 在行数据库中从末尾移动到开头

java - 使用 Neo4j 和 Mysql 构建社交网站

database-design - 数据库设计查询 : combine tables or keep separate?

database-design - 棘手的关系数据库设计问题

c# - 在数据库未定义的外键关系上配置 Entity Framework