【问题标题】:SQL - Should I use a junction table or not?SQL - 我应该使用联结表吗?
【发布时间】:2011-10-30 02:36:52
【问题描述】:

我正在创建一个新的 SQL Server 2008 数据库。我有两个相关的两个表。

第一个表格如下所示:

 BRANDS // table name
 BrandID // pk
 BrandName // varchar

第二个表格如下所示:

 MODELS // table name
 ModelID // pk
 ModelDescription // varchar

每个品牌都至少有一个型号,每个型号都只属于一个品牌。

问题是,我应该创建一个这样的联结表

 BRANDS_MODELS // table name
 RecordID // pk
 BrandID
 ModelID

或者我应该像这样修改 MODELS 表以包含 BrandID

 MODELS // table name
 BrandID // 
 ModelID // pk
 ModelDescription // varchar

谢谢!

【问题讨论】:

  • 联结表上的 SiteID 是什么,它与这里有什么关系?
  • 内森,你必须解释你的问题。联结表将品牌与模型相关联。您将查询联结表以获取与特定 BrandID 关联的 ModelID。
  • 抱歉,我见过这样的表格,它们是 3 路交叉口。想知道我是否遗漏了一些重要的关于网站与品牌和模型组合相关的关系。
  • 啊,其实 --- 不错。我的意思是 BrandID,而不是 SiteID。我正在做其他事情,并且在我的大脑中有 SiteID。谢谢!!!

标签: sql database data-modeling


【解决方案1】:

如果一个模型只属于一个品牌,那么您可以将 FK 到品牌放在模型表上(您的第二种方法)。第一种方式,使用联结表,用于多对多关系。

【讨论】:

  • 谢谢。我同意。我只是想真正得到一些可靠的确认。看来我们都同意了。
【解决方案2】:

根据您到目前为止所说的,我将省略联结表并在 MODELS 表中使用普通外键。

但是,如果模型可以移动品牌并且您需要维护当前的联结和历史记录,那么联结表比仅在外键更改时保留整个 MODELS 行的历史记录具有优势。此外,如果存在可能与关系“实体”相关联的其他事物比模型实体更多,那么拥有联结表可能更有意义。您始终可以在联结表中对 ModelID 进行唯一约束,以确保同一模型不链接到多个品牌。因此,尽管需要联结表来有效地实现多对多关系,但它对于关系本身具有属性的一对多关系也很有用。

【讨论】:

  • 感谢您的解释。联结表可能超出了我的需要,不会产生任何好处。
【解决方案3】:

联结表用于多对多关系,在这里似乎不太适合。

例如,您不想启用本田思域和丰田思域的创建。这是汽车品牌/型号关系的示例,但应该适合您的品牌/型号关系。

【讨论】:

  • 具有讽刺意味的是,我开的是丰田思域。 :> 谢谢!
  • 哈哈。真的吗?有丰田思域这样的东西吗?以雪佛兰/Camaro 与福特/Camaro 为例如何?
  • 我正在为 Yugo Pacer 存钱:?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-08
  • 2022-01-17
  • 2012-06-25
  • 2011-04-30
  • 1970-01-01
  • 2010-09-10
  • 2015-08-03
相关资源
最近更新 更多