我应该在多对多“链接”表中使用索引列吗?

时间:2009-12-03 12:25:34

标签: sql database database-design entity-relationship

我有两个表,productscategories,它们有多对多关系,因此我添加了一个products_categories表,其中包含category_id和{{ 1}}。

我应该添加另一个(自动递增)索引列还是使用两个现有索引列作为主键?

6 个答案:

答案 0 :(得分:10)

这取决于。

  • 您是否将数据视为一组对象(而关系数据库只是 存储介质)或本地表示和分析的一组事实 通过关系代数。

  • 某些ORM /框架/工具不能很好地支持多列主键。 如果您碰巧使用其中一个,则需要额外的id列。

  • 如果它只是一个多对多关系而没有与之关联的其他数据, 最好避免使用额外的id列,并将两列作为主键。

  • 如果您开始向此关联添加一些其他信息,那么它可能会达到一定程度 两个实体的多对多关系。 它本身就成了一个实体,如果拥有它自己的id,它会更方便 独立于它连接的实体。

答案 1 :(得分:5)

你没有需要添加一个额外的,自动递增的索引列,但是我(可能与其他大多数人相反)仍然建议你这样做。首先,应用程序更容易使用单个数字引用行,例如删除行时。其次,有时能够知道添加行的顺序是有用的。

答案 2 :(得分:3)

不,这根本没有必要,因为这两列已经在执行主键功能。

这第三栏只会为你的桌子增加更多空间。

但是......您可以使用它来查看您的记录添加到表中的顺序。这是我能在本专栏中看到的唯一功能。

答案 3 :(得分:2)

您无需添加自动递增索引列。标准做法是仅使用两个现有列作为您描述的M:M关联表的主键。

答案 4 :(得分:1)

我会创建主键category_id和product_id。仅当订单在以后的使用中相关时才添加自动增量。

答案 5 :(得分:0)

有一个概念性的问题 - products_categories是一个实体,还是只是一个代表两个实体之间关系的表?如果它是一个实体,那么,即使没有其他属性,我也会主张为该实体提供一个单独的ID列。如果它是一个关系,如果有其他属性(比如,begin_date,end_date或类似的东西),我主张拥有一个多列主键。