SQL - 我应该使用联结表吗?

时间:2011-08-18 19:52:56

标签: sql database data-modeling

我正在创建一个新的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

谢谢!

3 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:1)

连接表用于多对多关系,这似乎不太合适。

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