首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL外键吗?

MySQL外键吗?
EN

Stack Overflow用户
提问于 2014-08-08 14:36:20
回答 2查看 82关注 0票数 1

我有以下三个MySQL表,我想知道字段是否是外键。

当用户完成测试表中的测试时,将在分数表中插入一行,从而使test_id等于测试表中的test_id。

但是,用户可以完成一个计算机自动生成的测试,这个测试不是从测试表中生成的,当发生这种情况时,test_id等于'0‘,而这个测试表中没有出现。

这意味着test_id不是分数表中的外键,对吗?

代码语言:javascript
运行
复制
scores:
score_id(PK, AI), test_id(FK?), module_id(FK)...

tests:
test_id(PK, AI), module_id(FK), user_id(PK), name...

modules:
module_id(PK, AI), name....
EN

回答 2

Stack Overflow用户

发布于 2014-08-08 15:54:04

在我看来,应该让列成为tests表的外键。然后,您有几种选择:

  1. 您可以在tests表中为那些劣等的“计算机生成的”测试放置假行。它的值可以是0,而且您的数据结构与现在的数据结构大致相同。
  2. 您可以有一个TestType列来区分不同的测试。它可能以'Real''Computer-Generated'值作为实例。然后,您将有一个与tests表的外键关系。当测试类型不是正确的类型时,它将是NULL
  3. 你可以直接打开(2),只需考虑NULL值是由计算机生成的。

我对你的申请不太了解,但我会亲自选择(1)或(2)。

票数 1
EN

Stack Overflow用户

发布于 2014-08-08 15:10:03

这取决于分数和考试之间的关系。

如果其中一些分数的test_id为'0',这很可能是因为它们没有测试表的外键。除非有规定,否则这不是一项要求。

这可能是可能的,因为单个分数可能与测试表中列出的任何测试没有关系。

一些数据库会将这些值作为NULL列出,而另一些数据库则会列出'0‘

编辑:

此外(考虑到您的其他评论),这将不是外键。请参阅维基百科的评论

大多数数据库管理系统都提供了确保每个非空外键对应于引用表的一行的机制。

因此,在关系数据库中,如果它强制执行引用完整性约束,则这将不是外键

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25205972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档