SQL - 我应该使用连接表吗?

4

我将创建一个新的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是怎么回事,它在这里有什么关联? - Nathan Hughes
Nathan,你需要解释一下你的问题。连接表将品牌与型号关联起来。您可以查询连接表以获取与特定BrandID相关联的ModelID。 - Evik James
抱歉,我曾经看到过像那样的表格,它们是三方交叉点。我想知道是否有关于站点与品牌和型号组合相关性的重要信息我没有注意到。 - Nathan Hughes
啊,实际上——好发现。我真的是指BrandID,而不是SiteID。我正在处理其他事情,脑海中一直想着SiteID。谢谢! - Evik James
3个回答

10
如果一个模型只属于一个品牌,那么可以在模型表上将外键(FK)放在品牌列中(第二种方法)。第一种方法,使用联接表,是用于多对多关系。

谢谢。我同意。我只是想得到一些确切的确认。看起来我们都达成了共识。 - Evik James

3
根据您迄今为止所说的内容,我会在MODELS表中留出连接表,并使用普通的外键。但是,如果一个模型可以更改品牌并且您需要维护当前的连接和历史记录,则连接表比保留整个MODELS行的历史记录具有优势,尤其是当只有一个外键更改时。此外,如果其他可能与关系“实体”相关联而不是MODEL实体的事物存在,则使用连接表可能更有意义。您始终可以在连接表中对ModelID进行唯一约束,以确保同一模型未与多个品牌关联。因此,虽然连接表对于有效地实现多对多关系是必需的,但它也可用于具有属性的一对多关系。

感谢您的解释。连接表可能超出了我的需求范围,也不会带来任何好处。 - Evik James

1

连接表用于多对多关系,但在这里似乎不是很合适。

例如,您不希望创建本田思域和丰田思域。这是汽车品牌/型号关系的例子,但应该适用于您的品牌/型号关系。


具有讽刺意味的是,我开着一辆丰田思域。:>谢谢! - Evik James
笑。真的吗?有丰田思域这样的车型吗?以雪佛兰卡玛罗和福特卡玛罗为例呢? - Paul Sasik
我正在攒钱买一辆尤戈帕瑟 :? - Evik James

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接