如何在与外键和主键没有相同字段的两个表之间创建关系

时间:2017-03-18 14:06:02

标签: mysql excel database-design foreign-keys primary-key

我收到了客户的excel表。 它有三行我无法理解。

enter image description here

在测试表的第4行(第6行)" RelationTo"列的testCategoryList.CategoryId。 这是否意味着测试表的外键testCategory是testCategoryList表的主键?

但是,测试表的外键testCategory不是testCategoryList表的主键。 其他两行(第7行和第8行)具有相同的结构。

testCategoryList表:

enter image description here

testSubjectList表:

enter image description here

testLevelList表:

enter image description here 我错过了什么吗? 这三条线路没有任何意义。

1 个答案:

答案 0 :(得分:4)

我认为您的混淆可能与命名约定有关。

您是否假设外键列名必须与主键列名相同才能匹配它们? 这绝对不是真的。在关系数据库时代,有些时候某些存储技术确实有这个要求,但它根本不是SQL标准的一部分。

尽管如此,有一个命名约定很受人们的欢迎,其中外键名称与主键名完全匹配。这可以实现称为自然连接的功能。

然而,并非所有人都同意这个命名惯例是一个好主意。它的一些问题是(a)如果从一个表到另一个表有两个FK,则必须放弃约定以避免重复的列名,并且(b)最终必须将表名放入每一列的前面,以避免意外的自然连接,例如person.name对company.name。

您的电子表格清楚显示的是test表上的FK指向其他三个表的PK。例如,CREATE TABLE表的test脚本将包括:

...
CONSTRAINT FK_TEST__TESTCATEGORYLIST FOREIGN KEY
    IX_TEST__TESTCATEGORY (testCategory)
    REFERENCES testCategoryList (categoryId)
...