我有两个表,products
它们categories
有多对多的关系,所以我要添加一个products_categories
包含category_id
and的表product_id
。
我应该添加另一个(自动递增)索引列还是使用两个现有索引列作为主键?
我有两个表,products
它们categories
有多对多的关系,所以我要添加一个products_categories
包含category_id
and的表product_id
。
我应该添加另一个(自动递增)索引列还是使用两个现有索引列作为主键?
那要看。
您是否将数据更多地视为一组对象(关系数据库只是一种存储介质),或者是由关系代数本机表示和分析的一组事实。
一些 ORM/框架/工具对多列主键没有很好的支持。如果您碰巧使用其中之一,则需要额外的 id 列。
如果它只是一个多对多的关系,没有与之关联的额外数据,最好避免额外的 id 列并将两列都作为主键。
如果您开始向此关联添加一些附加信息,那么它可能会达到一个点,即它变成了两个实体的多对多关系。它本身就成为一个实体,如果它有自己的 id 独立于它连接的实体,它会更方便。
您不需要添加额外的自动递增索引列,但我(可能与大多数其他人相反)仍然建议您这样做。首先,在应用程序中使用单个数字来引用一行更容易,例如当您删除一行时。其次,有时能够知道添加行的顺序很有用。
不,根本没有必要,因为这两列已经在执行主键的功能。
第三列只会为您的表格增加更多空间。
但是...您可以使用它来查看将记录添加到表中的顺序。这是我在本专栏中看到的唯一功能。
您不需要添加自动递增索引列。标准做法是仅使用两个现有列作为您描述的 M:M 关联表的主键。
我会创建主键 category_id 和 product_id。仅当订单在以后的使用中相关时才添加自动增量。
There's a conceptual question - is products_categories an entity or is simply a table that represents a relationship between two entities? If it's an entity then, even if there are no additional attributes, I'd advocate for a separate ID column for the entity. If it's a relationship, if there are additional attributes (say, begin_date, end_date or something like that), I'd advocate to have a multi-column primary key.