由其他表的主键组成的复合主键

Composite primary key consisting of primay keys from other tables

我正在做一项作业,我对我的 SQL 基础知识有点生疏,因为我主要处理已经创建的 table,而不是创建它们。我得到了一个数据库模型并被要求创建它。我被告知该模型可能有错误并纠正它们。这是我遇到问题的部分片段:

http://i.imgur.com/0KyMquZ.jpg

我一直在尝试弄清楚并进行谷歌搜索和研究,但我不确定是否有什么我没有得到或我需要调整模型。我遇到的问题是 operation table 和连接的 table。 operation 的主键由来自连接 table 的三个主键和另一个主键 date 组成。那可以吗?如果它们是其他 table 中的外键,我想我可以弄清楚。我一直在努力弄清楚如何去做,但主要是想把我的头围绕在这个显示的概念上。我只是不明白如何或为什么。那个复合主键不是必须在其他 3 个 table 中吗?它们可以很好地分开吗?该复合主键不应该引用其他 table 中的外键吗?我真的很困惑。我可以使用数据库但设计,不是那么多。

我只想问问我的教授,但我们从来没有达成一致。我想我在那一刻理解了他,然后我变得更加困惑。我认为这并不重要,但它是 MySQL.

声明复合 PK 没有问题,其中一些组件也被声明为 FK。从逻辑上讲,这是非常正确的。

对性能的影响将很难预测。 Mysql根据PK声明建立的索引将很难预测。有些查询会被加速,有些则不会。

虽然在技术上是允许的,但我认为在这种情况下它在语义上没有意义,因为它允许存在以下情况。

  1. 一个病人可以在同一天接受不同医生的多次相同手术,但是...
  2. 患者不能在同一天由同一个医生多次做同一个手术,但是...
  3. 患者可以在同一天接受同一位医生的不同手术。

对我来说,这个主键是无稽之谈,您不妨添加一个合成主键,并在适当的地方制作这些简单的外键列。

看完评论,我现在明白了我的误解。我在想主复合键是由主键组成的,从其他表中复制。我现在意识到复合主键由 foreign 键和一个主键组成:date。感谢您的澄清。