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

时间:2017-01-28 23:28:06

标签: mysql sql database-design primary-key composite-primary-key

我正在完成一项任务,我的SQL基础知识有点生疏,因为我主要使用已创建的表,而不是创建它们。我得到了一个数据库模型,并要求创建它。我被告知模型可能有错误并且只是纠正它们。以下是我遇到问题的部分片段:

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

我一直在努力弄清楚,谷歌搜索和研究,但我不确定是否有一些我没有得到或我需要调整模型。我遇到的问题是operation表和连接表。 operation的主键由连接表中的三个主键和另一个主键date组成。可以这样做吗?如果他们是其他表中的外键,我想我可以搞清楚。我一直在试图弄清楚如何做到,但大多只是试图围绕这个显示的概念。我只是不明白为什么或为什么。那个复合主键是否必须在其他3个表中才能被拆分?该复合主键不应该引用其他表中的外键吗?我真的很困惑。我没有使用数据库而是设计,而不是那么多。

我只想问我的教授,但我们永远不会在同一页上。我想我此刻理解他,然后我更加困惑。我认为这不重要,但它是MySQL。

3 个答案:

答案 0 :(得分:1)

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

  1. 患者可以在同一天由不同的医生多次进行同样的手术,但是......
  2. 同一位医生不能在同一天多次对同一手术进行同样的手术,但......
  3. 患者可能在同一天接受同一位医生的不同手术。
  4. 对我来说,这个主键是无意义的,您也可以添加一个合成主键,并在适当的位置创建这些简单的外键列。

答案 1 :(得分:0)

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

对性能的影响很难预测。 Mysql基于PK声明构建的索引很难预测。一些查询会加速,其他查询将会加速。

答案 2 :(得分:0)

阅读完评论后,我现在理解了我的误解。我在想主要的复合键是由主键组成,与其他表重复。我现在意识到复合主键由外来键和一个主键组成:date。谢谢你的澄清。