将我的外键放在哪里以获得最佳数据库设计?

Posted

技术标签:

【中文标题】将我的外键放在哪里以获得最佳数据库设计?【英文标题】:Where to put my foreign keys for a best database design? 【发布时间】:2014-04-17 20:40:30 【问题描述】:

我有一个小问题。我要设计一个数据库模型,其中一部分是三个表,分别命名为 Room、Client 和 Employee。规则如下:一个房间只能由一位客户或一位员工使用。不是都。因此,我不确定在 Room 表中放置两个引用 Employee 和 Client 的可选外键是否更好,或者在 Client 和 Employee 中放置 Room 的可选外键是否更好。使用最后一个解决方案,我将在 Room 表中添加一个 CHAR,指示本地是否被占用。选项 A 还是 B?或任何其他建议?谢谢!

【问题讨论】:

我会使用Room 表中的两个可选外键和一个类似 XOR 的约束,如下所示:***.com/questions/11127356/…。它比其他方式更好地模拟您的一对一关系,多个ClientsEmployees 可以引用相同的Room,除非您在两个表中进行限制。然后你仍然必须以某种方式处理要么-Client-or-Employee-rule.. 【参考方案1】:

根据您指定的规则,您需要room 表中的外键。

employeeclient 表添加外键不会对多个员工或多个客户使用的房间实施任何限制。

【讨论】:

以上是关于将我的外键放在哪里以获得最佳数据库设计?的主要内容,如果未能解决你的问题,请参考以下文章

使用两个不同的外键连接两个表以获得相同的字段

如何处理 ERD(表)设计中的“或”关系?

Stripe 定期/订阅计费最佳设计/实践?

映射到多个主键的外键列

基本表设计中的外键约束异常

我不确定我的外键是不是有效