MySQL table 和 "calculated values" 以及同时是主键和外键的键
MySQL table with "calculated values" and keys that are primary and foreign at the same time
我已经通读了其他问题,例如:
Is it fine to have foreign key as primary key?
Primary and Foreign Key at the same time
然而,在我看来,答案大相径庭,是否可以同时使用主键和外键的答案取决于特定的数据库和 table 的目的包含密钥。
这是作为考试项目的一部分完成的,我必须能够解释我的数据库设计或为我的演示文稿提出其他内容。
我的问题是:
你如何最好地证明我的数据库中的 "selected_answers" table?即它有意义吗?
是否仍处于第三范式?
我能不能让它变得不同和简单,同时实现与当前table相同的目的和功能?
这是我当前的关系模型:
Relational model
这是我当前的 SQL table 脚本:
SQL tables
我们的想法是创建一个数据库,该数据库可以存储 "audit" 一家公司的数据,该公司希望审计他们遵守 GDPR 的情况。这是考试作业。
我有 "selected answers" 的原因是我可以将用户选择的答案与被问到的问题进行比较。
键既是主键又是外键,所以数字是 "unique",同时仍然引用审计和问题 table。
数据库还应该能够单独存储每个审计及其答案。
为了了解更多上下文,我用 "test data" 填充了我的 table,这样我就可以使用存储的触发器、过程和函数。
Test data 1
Test data 2
所有问题都预设为question_ID 1 - 12,所有答案都是answer_ID 1-5。
所以这些数字肯定会重复,但为了存储审计和回答的内容。
这是数据库计算的最终结果:
公司名称和注册号(CVR - 丹麦语)、审核时间(通过存储的触发器更新)、答案的平均分数和基于平均分数的 "compliance level"。
Final result
我希望我已经为您提供了足够的信息来帮助我 :-) 如果您还需要查看存储过程、函数和触发器,请告诉我,我会上传它们。
您的 table 很有道理。您可以将其视为审计和问题之间的多对多关系(每个审计可以回答许多问题;每个问题可以在许多审计中得到回答)具有指示审计对问题的答案是什么的属性,受约束(通过答案 table) 的外键是许多预定义答案之一。我还建议您写下 relvar 谓词,看看它们是否有意义。
它在 3NF 中,除非存在您没有告诉我们的奇数功能依赖项 (FD)。似乎有一个非平凡的 FD,{Audit_ID, Answer_ID} -> {Answer_ID}
,左边是一个超级键(实际上是一个键),所以 table 是 Boyce-Codd 范式,意味着 3NF。 (我真的不知道为什么人们在有 BCNF 的情况下还要用 3NF。)
我想不出任何更简单的解决方案来满足相同的要求。由于使用代理键和缺少自然键,您的设计可能存在问题,但这是另一个问题。
我已经通读了其他问题,例如:
Is it fine to have foreign key as primary key?
Primary and Foreign Key at the same time
然而,在我看来,答案大相径庭,是否可以同时使用主键和外键的答案取决于特定的数据库和 table 的目的包含密钥。
这是作为考试项目的一部分完成的,我必须能够解释我的数据库设计或为我的演示文稿提出其他内容。
我的问题是:
你如何最好地证明我的数据库中的 "selected_answers" table?即它有意义吗?
是否仍处于第三范式?
我能不能让它变得不同和简单,同时实现与当前table相同的目的和功能?
这是我当前的关系模型:
Relational model
这是我当前的 SQL table 脚本:
SQL tables
我们的想法是创建一个数据库,该数据库可以存储 "audit" 一家公司的数据,该公司希望审计他们遵守 GDPR 的情况。这是考试作业。
我有 "selected answers" 的原因是我可以将用户选择的答案与被问到的问题进行比较。
键既是主键又是外键,所以数字是 "unique",同时仍然引用审计和问题 table。
数据库还应该能够单独存储每个审计及其答案。
为了了解更多上下文,我用 "test data" 填充了我的 table,这样我就可以使用存储的触发器、过程和函数。
Test data 1
Test data 2
所有问题都预设为question_ID 1 - 12,所有答案都是answer_ID 1-5。 所以这些数字肯定会重复,但为了存储审计和回答的内容。
这是数据库计算的最终结果: 公司名称和注册号(CVR - 丹麦语)、审核时间(通过存储的触发器更新)、答案的平均分数和基于平均分数的 "compliance level"。
Final result
我希望我已经为您提供了足够的信息来帮助我 :-) 如果您还需要查看存储过程、函数和触发器,请告诉我,我会上传它们。
您的 table 很有道理。您可以将其视为审计和问题之间的多对多关系(每个审计可以回答许多问题;每个问题可以在许多审计中得到回答)具有指示审计对问题的答案是什么的属性,受约束(通过答案 table) 的外键是许多预定义答案之一。我还建议您写下 relvar 谓词,看看它们是否有意义。
它在 3NF 中,除非存在您没有告诉我们的奇数功能依赖项 (FD)。似乎有一个非平凡的 FD,{Audit_ID, Answer_ID} -> {Answer_ID}
,左边是一个超级键(实际上是一个键),所以 table 是 Boyce-Codd 范式,意味着 3NF。 (我真的不知道为什么人们在有 BCNF 的情况下还要用 3NF。)
我想不出任何更简单的解决方案来满足相同的要求。由于使用代理键和缺少自然键,您的设计可能存在问题,但这是另一个问题。