我有以下三个MySQL表,我想知道字段是否是外键。
当用户完成测试表中的测试时,将在分数表中插入一行,从而使test_id等于测试表中的test_id。
但是,用户可以完成一个计算机自动生成的测试,这个测试不是从测试表中生成的,当发生这种情况时,test_id等于'0‘,而这个测试表中没有出现。
这意味着test_id不是分数表中的外键,对吗?
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....
发布于 2014-08-08 15:54:04
在我看来,应该让列成为tests
表的外键。然后,您有几种选择:
tests
表中为那些劣等的“计算机生成的”测试放置假行。它的值可以是0
,而且您的数据结构与现在的数据结构大致相同。TestType
列来区分不同的测试。它可能以'Real'
和'Computer-Generated'
值作为实例。然后,您将有一个与tests
表的外键关系。当测试类型不是正确的类型时,它将是NULL
。NULL
值是由计算机生成的。我对你的申请不太了解,但我会亲自选择(1)或(2)。
发布于 2014-08-08 15:10:03
这取决于分数和考试之间的关系。
如果其中一些分数的test_id为'0',这很可能是因为它们没有测试表的外键。除非有规定,否则这不是一项要求。
这可能是可能的,因为单个分数可能与测试表中列出的任何测试没有关系。
一些数据库会将这些值作为NULL
列出,而另一些数据库则会列出'0‘
编辑:
此外(考虑到您的其他评论),这将不是外键。请参阅维基百科的评论
大多数数据库管理系统都提供了确保每个非空外键对应于引用表的一行的机制。
因此,在关系数据库中,如果它强制执行引用完整性约束,则这将不是外键
https://stackoverflow.com/questions/25205972
复制相似问题