代码之家  ›  专栏  ›  技术社区  ›  Zombies

我应该使用一个唯一的字符串作为主键还是将其作为一个单独的自动增量INT?[副本]

  •  3
  • Zombies  · 技术社区  · 15 年前


    Surrogate Vs. Natural/Business Keys
    When not to use surrogate primary keys?

    所以,我更喜欢用INT作为AI的主键。但是,我之所以考虑将唯一的字符串作为主键,是因为我不必查询相关的表来获取主键,因为我已经知道了它。


    我有一个多对多的关系:

    客户-订单-产品

    谈论优化/运行时速度, 一点也不 ).

    3 回复  |  直到 8 年前
        1
  •  5
  •   DVK    15 年前

    • 独特性

    例如,如果您的问题域是-并且将始终是-这样,两个产品名称始终是不同的,并且任何产品都不会更改其名称(请考虑Norton Antivirus->Symantec Antivirus作为名称更改的简单示例),那么您可以使用产品名称作为唯一密钥。

    因此,强烈建议您使用数字ID,因为您可能并不总是能够预测到这类情况—而且稍后更改DB结构以获得产品ID当然比需要从查询中的名称映射和ID带来的小不便要严重得多。

        2
  •  3
  •   marc_s    15 年前

    如果你能保证 VARCHAR 字段确实是唯一的,并且希望是稳定的(不改变),那么您肯定可以使用它作为主键,而不存在任何概念问题。

    反对将它用作主键(或者更重要的是:sqlserver中的集群键)的唯一真正原因确实是基于性能的。更宽且大小不同的聚类键在许多方面都是次优的,它不仅影响表及其聚类索引,还影响该表上的所有非聚类索引。但如果这不关你的事,再说一次-你会没事的 瓦尔查尔 作为你的主键。

        3
  •  0
  •   gbn    15 年前

    呃。。。两者在某种程度上都是正确的

    • 您的逻辑模型和设计将使用唯一的字符串。这是天然的钥匙。