sql - 使用数据库的主键作为业务对象标识符是一个坏主意吗?

标签 sql business-logic object-relational-model

我想知道,使用自动增量主键作为业务实体标识符(例如 Partner Id)是坏主意还是好主意或 Account Number ?

另外,如果我选择这种方法,我会面临哪些陷阱?

最佳答案

我不认为每个人都有相同的意见,但我确实认为这是不好的做法。在我看来,将 ID 作为“ key ”传递给用户是不好的,原因有很多:

  • ID 对用户来说并不自然。他们不是在谈论“1474623”项目,而是在谈论“ABC”项目。他们不是在谈论“363528”,而是在谈论“Patrick Hofman”;
  • 身份证易碎。你真的不能指望他们不改变。如果您选择移动到另一个数据库平台或当前平台的新版本,并且您想使用“插入”语句移动所有数据,那么可能会丢失 ID 字段。

  • 在我们的产品中,我们始终使用 'natural key' ,在主键旁边,是人类可以理解的键。

    如果没有可用的人类可理解的自然键,例如当它是日志表时,您可以恢复为人工键。

    关于sql - 使用数据库的主键作为业务对象标识符是一个坏主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27375279/

    相关文章:

    c# - 业务逻辑类命名

    python - 我为 Neo4j 做的 Python 对象映射是否太天真了?

    php - 在 laravel 中更新表及其相关模型?

    php - 如何从MySQL中的单个表中选择依赖列

    sql - ORACLE sql查询获取前3名工资rownum大于

    MySQL 删除 "inactive"行

    php - json_encode() 是否可以防止 SQL 注入(inject)?

    model-view-controller - 如何封装web2py业务逻辑?

    php - 无捆绑 Symfony 4 中的整体结构