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

时间:2014-07-10 16:02:47

标签: sql many-to-many relational-database one-to-many

我有两张国家和地区表。区域是一个或多个国家的集合。有些国家没有地区。

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

  • 国家/地区的版本列包含null或其所属的版本。我的问题是:我被教过数据库中的空虚是邪恶的。
  • Edition具有Country列,该列是Country的数组。我的问题是:我被教过数据库中的数组是邪恶的。

最佳做法是什么?

1 个答案:

答案 0 :(得分:3)

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

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

这是一个例子

表1 - 国家
ID名称
1西班牙
2法国
3德国
4挪威
5 Belguim

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

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

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

亚洲没有任何国家

这可能不是地理上完整或正确但我希望它显示原则。