外键与中间表

时间:2016-03-20 16:28:50

标签: sql model relational-database

这是一个非常基本的问题,我为此道歉,但我没有找到任何资源来回答这个问题。

我到处都看到这些图表,我很难理解为什么他们使用中间表来关联State和Country而不是仅仅在State表中添加指向Country表的外键

是否因为某些RDMS不允许外键?是因为州的名称可以在许多国家吗?

enter image description here

来源:Database Design and Naming Conventions

2 个答案:

答案 0 :(得分:3)

此类表称为联结表,用于表示多对多关系。据我所知,所有州都在一个国家内,所以没有必要有一个联结表。状态可以简单地具有country_id列。你是对的。

您可能会认为“县”和“城市”实体的情况相同。至少在美国,这并不严格(除非你遵循人口普查局的定义)。有些城市确实跨越多个县。

作为一个写这个,我在纽约县(更常见的“曼哈顿”),这是纽约市的一部分。纽约市实际上包括五个县。其他城市也跨越县,如芝加哥(库克和杜佩奇县),亚特兰大(富尔顿和德卡尔布)等等(在此Wikipedia页面上列出)。纽约市当然“胜利”,跨越五个,超过任何其他;)

答案 1 :(得分:0)

这种设计对我没有意义。

中间表用于多对多关系。例如,学术数据库可能包含学生和课程表,其间有Student_Course(或Transcript)。学生可以参加很多课程,课程可以有很多学生。

在这种情况下,一个国家只能属于一个国家,所以设计似乎很愚蠢。

外键是表达一对多关系的方式,将密钥添加到许多子节点以指向其单亲。

相关问题