如何创build与外键和主键不相同的两个表之间的关系

我收到了一个客户的Excel表。 它有三条我无法理解的路线。

在这里输入图像说明

在testing表的第4行(第6行)“RelationTo”列的testCategoryList.CategoryId中。 这是否意味着testing表的外键testCategory是testCategoryList表的主键?

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

testCategoryList表:

在这里输入图像说明

testSubjectList表:

在这里输入图像说明

testLevelList表:

在这里输入图像说明 我错过了什么吗? 这三条线没有任何意义。

我认为你的混淆可能在于命名约定。

你是否假定外键列名必须与主键列名相同以匹配它们? 这绝对是不正确的。 在关系数据库之前的某个时代,有一些存储技术确实有这样的需求,但是它并不是SQL标准的一部分。

尽pipe如此,还是有一个命名约定,这个命名约定是许多外键名称与主键名称完全匹配的人很受欢迎的。 这使得所谓的自然连接

但是,并不是所有人都认同这个命名约定是个好主意。 (a)如果你有两个FK从一个表到另一个表,你必须放开约定来避免重复的列名,(b)最后你不得不把表名放入避免意外的自然联接,比如person.name和company.name。

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

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