我正在完成一项任务,我的SQL基础知识有点生疏,因为我主要使用已创建的表,而不是创建它们。我得到了一个数据库模型,并要求创建它。我被告知模型可能有错误并且只是纠正它们。以下是我遇到问题的部分片段:
http://i.imgur.com/0KyMquZ.jpg
我一直在努力弄清楚,谷歌搜索和研究,但我不确定是否有一些我没有得到或我需要调整模型。我遇到的问题是operation
表和连接表。 operation
的主键由连接表中的三个主键和另一个主键date
组成。可以这样做吗?如果他们是其他表中的外键,我想我可以搞清楚。我一直在试图弄清楚如何做到,但大多只是试图围绕这个显示的概念。我只是不明白为什么或为什么。那个复合主键是否必须在其他3个表中才能被拆分?该复合主键不应该引用其他表中的外键吗?我真的很困惑。我没有使用数据库而是设计,而不是那么多。
我只想问我的教授,但我们永远不会在同一页上。我想我此刻理解他,然后我更加困惑。我认为这不重要,但它是MySQL。
答案 0 :(得分:1)
虽然技术上是允许的,但我认为在这种情况下它在语义上毫无意义,因为它允许存在以下情况。
对我来说,这个主键是无意义的,您也可以添加一个合成主键,并在适当的位置创建这些简单的外键列。
答案 1 :(得分:0)
声明复合PK没有问题,其中一些组件也被声明为FK。从逻辑上讲,这是非常正确的。
对性能的影响很难预测。 Mysql基于PK声明构建的索引很难预测。一些查询会加速,其他查询将会加速。
答案 2 :(得分:0)
阅读完评论后,我现在理解了我的误解。我在想主要的复合键是由主键组成,与其他表重复。我现在意识到复合主键由外来键和一个主键组成:date。谢谢你的澄清。