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

用户1166240

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

在此处输入图片说明

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

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

testCategoryList 表:

在此处输入图片说明

testSubjectList 表:

在此处输入图片说明

testLevelList 表:

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

乔尔·布朗

我认为您的困惑可能与命名约定有关。

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

尽管如此,有一种命名约定很受许多人欢迎,其中外键名称与主键名称完全匹配。这将启用称为自然联接的功能

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

您的电子表格清楚地表明,表格中的 FKtest指向其他三个表格的 PK。例如,CREATE TABLE脚本test将包括:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

休眠:复合主键-外键:如何在两个表之间映射各个字段

如何创建桥表?是否创建两个主键和两个外键?

如何在没有(整数)外键的两个实体之间设置关系?

如何在JPA Springboot中映射两个表,例如主键和外键?

具有两个外键的两个表之间的Laravel关系

如何在没有正确关系的两个表之间检索数据

提取具有/不匹配主键和外键的两个表的数据

如何使用外键和主键的概念连接两个表?

INSERT (values) INTO 两个有外键关系的表

在 SQL 中的两个表之间创建外键

如何选择/读取具有相互关系和另一个表关系(主键/外键)的表

如何为具有相同关系的两个外键的模型编写关联?

如何在Objection.js中创建两个外键关系

如何在neo4j中创建具有相同节点名称的两个节点之间的关系

用两个不同的外键联接两个表以获得相同的字段

比较没有外键的两个表

从具有Spring和JPA批注的两个表之间具有外键关系的html表单(使用Thymeleaf)保存数据的问题

是否可以在 Laravel 中 String/varchar 类型列的两个表之间创建外键关系?

无法使用三个主键在两个表之间创建关系

具有两个联结表的表的主键/外键

无法为设置了两个主键的表创建外键

如何在一个表中创建一个带有 2 个外键的 select 语句,指向两个不同的表

如何使用Android Room创建带有两个或更多外键的表?

使用Laravel同时插入两个表的主键和外键

同一张表上的两个主键和外键

SQL查询:两个表之间没有保留关系时如何显示NULL

如何从各种两个表中创建具有许多字段关系的支架

如果其他任何列字段发生更改,如何从具有相同主键的两个表中取回记录

如何在没有父子关系的两个组件之间进行通信?