【问题标题】:Database design - how to structure child with multiple parents数据库设计 - 如何构造具有多个父母的孩子
【发布时间】:2014-04-26 10:38:28
【问题描述】:

给定一个包含北部和南部地区的父表,以及一个与该地区相关联的州的子表,假设加利福尼亚州既是北部地区的成员,也是南部地区的成员。代表这种关系的最佳方式是什么?

我最初的想法是使用第三张表来表示交叉引用。例如:

Table_Region
ID     Value
1      North
2      South

Table_State
ID     Value
1      California

Table_Xref
Region_ID    State_ID
1            1
2            1

创建第三个表只是为了表示交叉引用似乎是一种浪费,但它允许状态表只包含每个状态的唯一值。如果我将区域 ID 添加到州表中,我将不得不重复加利福尼亚州表中的值,因为它属于两个区域。

【问题讨论】:

  • 您提出的是处理多对多关系的常用方法。尽管在这种特殊情况下,我想知道“北/南”属性的用处。
  • 我同意乔的观点,这是正常的方式。您还可以创建一个 Table Region Id 3 Both

标签: sql-server database-design


【解决方案1】:

正如 cmets 中所说,这是设计多对多关系的正常方式。

如果您只有 2 个(或 4 个)区域,您可以避免使用 Region 表并将区域存储为 enumerated type 中的 Table_Xref,而不需要单独的区域表。或者只是将其存储为 int,您的应用程序/查询在其中占区域代码。

【讨论】:

  • 感谢您的回复。我已经有一段时间没有看到没有简单的 1-1 父子关系的层次结构了,而且创建单独的外部参照表一开始似乎很奇怪。
猜你喜欢
  • 2016-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-05
  • 2018-09-22
  • 2017-04-17
相关资源
最近更新 更多