代码之家  ›  专栏  ›  技术社区  ›  Matteo Riva

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

  •  5
  • Matteo Riva  · 技术社区  · 15 年前

    我有两张桌子, products categories 它有很多对很多的关系,所以我要添加一个 products_categories 将包含 category_id product_id .

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

    6 回复  |  直到 5 年前
        1
  •  10
  •   Tomek Szpakowicz    5 年前

    那要视情况而定。

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

    • 有些窗体/框架/工具不支持多列主键。 如果您碰巧使用其中一个,则需要额外的ID列。

    • 如果只是一种多对多关系,没有与之相关的附加数据, 最好避免使用额外的ID列,并将这两列都作为主键。

    • 如果您开始向这个关联添加一些附加信息,那么当它变为 两个实体的多对多关系。 它变成了一个拥有自己权利的实体,如果它拥有自己的ID就更方便了 独立于它所连接的实体。

        2
  •  5
  •   Thomas Padron-McCarthy    15 年前

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

        3
  •  3
  •   Kico Lobo    15 年前

    不需要,因为这两列已经在执行主键的函数。

    第三列只会给您的表增加更多空间。

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

        4
  •  2
  •   Randy Minder    15 年前

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

        5
  •  1
  •   Adriaan Stander    15 年前

    我会把主键分类为“id”和“product”。只有在订单在以后的使用中有关联时才添加一个自动增量。

        6
  •  0
  •   SergeyKazachenko    15 年前

    有一个概念性的问题——产品是一个实体,还是仅仅是一个表示两个实体之间关系的表?如果它是一个实体,那么,即使没有其他属性,我也建议为该实体单独设置一个ID列。如果这是一种关系,如果有其他属性(例如,开始日期、结束日期或类似的属性),我建议使用多列主键。