一尘不染

如何在关系数据库中表示多对多关系?

sql

我有两个表Country和Region。一个地区是一个或多个国家/地区的集合。一些国家/地区不在任何地区。

我该如何在关系数据库中表示呢?我想到了以下两种可能性:

  • 国家/地区的“版本”列包含null或所属的版本。我的问题是:我被告知空值在数据库中是邪恶的。
  • Edition的“国家/地区”列包含国家/地区数组。我的问题是:我被告知阵列在数据库中是邪恶的。

最佳做法是什么?


阅读 140

收藏
2021-03-17

共1个答案

一尘不染

一种方法是创建具有两列的第三个表,一个包含CountryID,另一个包含RegionID,其中分别是Country和Region的唯一标识符。

该表中的一行表示一个国家和一个地区之间的关系。由于表中可以有多行,因此可以存储多对多关系。如果没有关系(某些国家/地区不在某个地区),则表中没有行。

这是一个例子

表1-国家/地区
ID名称
1西班牙
2法国
3德国
4挪威
5贝尔吉姆

表2-区域
ID名称
1欧洲
2 BeneLux
3欧盟贸易区域
4亚洲

表3-CountryRegion
国家区域
1 1
2 1
3 1
4 1
5 1
1 3
2 3
3 3
5 2

表达了以下内容的国家-
西班牙在欧洲(国家1区1)
法国在欧洲
德国在欧洲
挪威在欧洲
比利时在欧洲
西班牙在欧盟
法国在欧盟
德国在欧盟
Belguim在BeneLux

没有国家在亚洲

这些可能在地理上并不完整或正确,但我希望它能说明原理。

2021-03-17