如何创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) ...