代码之家  ›  专栏  ›  技术社区  ›  ʞɔıu

单行汇总表是否应具有主键?

  •  2
  • ʞɔıu  · 技术社区  · 15 年前

    假设您有一个汇总表,它只包含一行(存储关于另一个表的一行统计信息)。在本例中,我使用了innodb,这样我就可以更新它,以及包含事务性摘要的表。我应该让这个表有主键吗?如果是的话,什么,只是一个始终等于1的极小值?

    7 回复  |  直到 15 年前
        1
  •  3
  •   Quassnoi    15 年前

    InnoDB 如果不提供主键,将为您创建一个隐藏的主键。

    有时访问这个密钥会更容易,因为

    INSERT
    ...
    ON DUPLICATE KEY UPDATE
    

    可用于更新此表,而不管它是否已具有值。

    是的,只要用一个常数 1 .

        2
  •  2
  •   Jhonny D. Cano -Leftware-    15 年前

    我认为您应该,您不知道将来是否可以使用同一个表来存储其他表的统计信息,这似乎是存储它们的好地方,然后您需要标识表中的每一行。

        3
  •  1
  •   Jamie Ide    15 年前

    我会在上面加上一个identity列(我不知道innodb的等价物是什么)。这样做是无害的,而且如果需要的话,可以更容易地选择或删除特定的行。

        4
  •  1
  •   Bill Karwin    15 年前

    考虑到大多数其他的答案是“不,你不需要”的话,我将给出一个魔鬼代言人的答案。

    主键约束确保在应用该约束的列中不会获得具有重复值的行。你说你想让这张桌子只有一行,为什么 不会 你声明了约束条件?它可以帮助防止重复,这是你想要的。

        5
  •  0
  •   Dana    15 年前

    我从不为这样的案子操心。pk用于区别于其他记录,在这种情况下没有记录。

        6
  •  0
  •   Shree    15 年前

    如果你打算扩大这张桌子怎么办?定义一个键可能有一定的意义。再说一遍,这只是一种意见,而不是你的必要条件。

        7
  •  0
  •   Ralph M. Rickenbach    15 年前

    我现在不会介绍PK。如果您决定将此表也用于其他记录,只需重构并添加新行(您可能无论如何都需要)(过早优化)。添加这样的主键还有一个原因:如果您使用的框架在没有标识记录的主键的情况下无法更新记录。