我有两个表,products
和categories
,它们有多对多关系,因此我添加了一个products_categories
表,其中包含category_id
和{{ 1}}。
我应该添加另一个(自动递增)索引列还是使用两个现有索引列作为主键?
答案 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或类似的东西),我主张拥有一个多列主键。