database-design - 为主键使用特定于项目的前缀和自动编号?

标签 database-design primary-key

今天早上我们开了一个 session ,讨论如何为我们正在制作的数据库中的一些 Assets 存储我们的 ID,讨论产生了一些热量,所以我决定咨询 SO 的专家。

我认为我们应该拥有的表结构(简短版本)如下所示:

示例 1)

  • AssetId - int(32) - 主键
  • 类型 - 字符串

  • 所以一些示例数据是这样的:
    ==AssetId======Type===
      12345        "Manhole"
      155415       "Pit"
    

    等等。

    团队的另一位成员提出了这样的建议:

    示例 2)
  • AssetId - 字符串 - 主键
  • 类型 - 字符串

  • 所以一些示例数据是这样的:
    ==AssetId======Type===
      "MH12345"    "Manhole"
      "P155415"    "Pit"
    

    我们制作了一个简短版本的类型并将其附加到 ID 的前面并将其存储在数据库中。我见过一些这样做的 Assets 数据库,但从未真正采用过这种方法。

    出于排序的原因,我从来没有真正喜欢使用字符串作为 ID 的想法。我也觉得它只是为了它而存储无用的信息,当你已经拥有 Assets 存储类型时。

    你会采取什么方法?为什么?使用方法 1 比使用方法 2 有什么好处吗?

    编辑:是的,我将在方法 1 中使用 AUTO_INCREMENT。

    最佳答案

    通常经验法则是永远不要在主键中使用有意义的信息(如社会安全号码或条形码)。只是简单的自动递增整数。
    无论数据看起来多么稳定——它可能会在某一时刻发生变化(新立法出台,所有 SSN 都被重新计算)。

    关于database-design - 为主键使用特定于项目的前缀和自动编号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/506164/

    相关文章:

    java - NetBeans 表示用户 'root' @'localhost' 的访问被拒绝(使用密码 : YES))

    database-design - 设计超大、低粒度数据库的技巧/链接/书籍?

    database - 一个真正的查找表的优点与缺点

    c# - 存储大量分析数据

    python - 如何使主键自动增量为 0001、0002、0003 而不是 1、2、3?

    c# - 如何在 Entity Framework 代码优先数据库中手动设置实体主键?

    mysql - 插入查询优化

    sql - 性能 - Int vs Char(3)

    sql-server - 将 Char PK/FK 转换为 Varchar 或 RTRIM?

    mysql - varchar() 主键还是 int 主键?