【问题标题】:Should we store an auto-increment ID when we have a unique indexed column当我们有一个唯一的索引列时,我们是否应该存储一个自增 ID
【发布时间】:2016-02-23 11:22:39
【问题描述】:

我正在设计一个MySQL数据表来存储电子商务订单,每个订单都有一个唯一的订单号,看起来像'20160223xxxxxx',它是通过指定的算法生成的,以确保它在表中是唯一的。我想知道我们是否仍然需要一个自动增量字段作为表中的主键,因为我认为订单号似乎也可以是主键。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    你不需要一个自动递增的 id,因为你有一个。但是,我是合成主键的忠实粉丝:

    • 它们为插入定义了一个序列,因此您知道哪些行最有效。
    • 4 字节整数(如果您的表不是很大)对于外键索引比长字符串更有效。
    • 如果其中一个唯一订单 ID 发生更改,合成主键可以轻松更改值。
    • 您与订单密钥生成系统的未来变化隔离。
    • 如果你使用mysql,主键一般是聚集索引。因此,使用合成键插入到表的末尾——这是有效的。使用外部键的插入可能是无序的 - 这是低效的。

    【讨论】:

      【解决方案2】:

      您不需要使用 auto-inc 字段。使用唯一标识符作为表的 PK。这将节省空间。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-28
        • 1970-01-01
        • 1970-01-01
        • 2021-08-31
        • 1970-01-01
        相关资源
        最近更新 更多