繁体   English   中英

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

[英]How to create relationship between two tables which have no same field as foreign key and primary key

我从客户那里收到一张Excel工作表。 它有三行我无法理解。

在此处输入图片说明

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

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

testCategoryList表:

在此处输入图片说明

testSubjectList表:

在此处输入图片说明

testLevelList表:

在此处输入图片说明 我想念什么吗? 这三行没有任何意义。

我认为您可能对命名约定感到困惑。

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

但是,有一种命名约定在许多人中很流行,其中外键名与主键名完全匹配。 这将启用所谓的自然联接

但是,并非所有人都同意此命名约定是一个好主意。 它有两个问题:(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)
...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM