V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fengsi
V2EX  ›  问与答

数据表设计时主键叫做 id 还是 userId 好呢?

  •  
  •   fengsi · 2024-05-25 20:18:35 +08:00 · 2336 次点击
    这是一个创建于 412 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如一张 User 表,主键命名为 id 还是 userId 好呢?

    1. 每张表都叫 id ,而不叫 xxxId,这样即使表名比较复杂也没关系。

    2. 用户表跟实体映射时,如果表中是 user_id ,实体变量叫做 userId ,显然更清楚一点。而且也方便一些工具生成代码

    还听说了一些其他方案:

    1. 固定每张表都设计一个 id, 再根据需要再设计一个 userId ,这种的话按照我的业务来看,这个 id 好像确实比较多余。

    请教大家的习惯的方案,目前我的方案是,数据表叫做 id ,实体对象变量叫做 userId 。外键叫做 user_id

    另外请教大家:有没有一些实际的设计规范可以参考的呢?

    19 条回复    2024-05-26 15:13:33 +08:00
    ysc3839
        1
    ysc3839  
       2024-05-25 20:29:11 +08:00 via Android
    id
    ysc3839
        2
    ysc3839  
       2024-05-25 20:31:05 +08:00 via Android
    id ,因为一般情况下根据上下文信息就能得知是 user.id 了。变量名也没必要用 userId ,用 user.id 即可,除非是 userId = user.id 这种情况。
    laikick
        3
    laikick  
       2024-05-25 20:39:51 +08:00
    规定好就行. 别一下是 id 一下是 userId
    fengsi
        4
    fengsi  
    OP
       2024-05-25 20:41:05 +08:00
    @ysc3839 #2 感谢前辈回复,学到了。我多问一句,变量名我用 userId 的原因是为了返回数据给前端考虑,返回 userId 前端就可以很清楚的这是 user 的 id 了,前辈是推荐直接返回 id 吗?
    ysc3839
        5
    ysc3839  
       2024-05-25 20:57:03 +08:00 via Android
    @fengsi 前段也适合上述逻辑,比如是 getUser 的接口,那一般会写成 user = getUser(),那就能用 user.id 。如果是多种数据混合的话,可以看情况选择使用 userId 或者 user: { id }。
    adoal
        6
    adoal  
       2024-05-25 20:57:54 +08:00   ❤️ 1
    表内字段一般没必要带上表名作前缀
    Vegetable
        7
    Vegetable  
       2024-05-25 21:31:30 +08:00
    实践上来看都是 id 。
    `user`.`user_id`这种命名方式让我觉得很奇怪且多余
    godleon
        8
    godleon  
       2024-05-25 22:00:22 +08:00
    客观评价一下吧,我觉得应该根据业务来说;
    以 mysql 为例;
    一张表使用 uid mid sid 或者 id 作为主键,其实没什么性能上的区别,哪怕你映射实体不过是一个别名而已,从代码设计上,你用 userId 和 id 我觉得没啥标准的吧;

    但是在你的业务,存在拆表 分库分表 分布式等架构,这个时候你每个表都有一个 id 然后再有一个 业务的 uid 或者 mid sid 这类是这个业务的表示, 当你有分布式跨库全局唯一 ID 或者设计行锁 表锁 分布式事务等 这个 id 的存在就有很大意义了;
    ksc010
        9
    ksc010  
       2024-05-25 22:13:51 +08:00
    一般用 id ,但是 user 这个表比较特殊,习惯用 userid
    9dP06m83vIV00l72
        10
    9dP06m83vIV00l72  
       2024-05-25 22:55:18 +08:00
    user.id
    order.user_id
    NewMoorj
        11
    NewMoorj  
       2024-05-26 02:16:25 +08:00
    我用 user_id ,这样全表命名都比较统一,所有 ID 之前都加命名,方便识别。
    foolishcrab
        12
    foolishcrab  
       2024-05-26 02:43:04 +08:00 via iPhone
    显然是 id 好,实体类的字段是不可能脱离主体来使用的,加上 user 并无意义。

    延伸一下,有些人喜欢
    xxxXxxxxXxxxResponseType.responseStatusType.responseStatusMetaType
    而不是
    xxxxXxxxResponse.status.meta

    前者看着恶心,代码逻辑还没开始写就换行了
    kkwa56188
        13
    kkwa56188  
       2024-05-26 04:45:17 +08:00
    大项目, 表多, 关系复杂的, 用 user_id, 参见 数据库老祖宗 Oracle 的 E-business Suite, 或者大型 ERP 顶流 SAP, 的设计实践.
    没做过的就不要说了.
    小项目 小数据库的, 无所谓 怎么都行.
    hendry
        14
    hendry  
       2024-05-26 09:01:16 +08:00 via Android
    UID 可以吗不
    neptuno
        15
    neptuno  
       2024-05-26 09:06:47 +08:00 via iPhone
    我一般用 id ,之前有人跟我说过全部用 id ,联表可能可读性差一点,不过我觉得还行,联表的时候,别名写的清楚一点就好了。
    BeijingBaby
        16
    BeijingBaby  
       2024-05-26 09:43:05 +08:00
    user.user_id ,这样很蛋疼,不如 user.id
    mwjz
        17
    mwjz  
       2024-05-26 09:51:58 +08:00
    每一个表都是实体, 用 id 就代表当前实体的主键,规则清晰。 连表外键用 userId ,xxxId, 如果都用 xxxId ,会很疑惑
    wanguorui123
        18
    wanguorui123  
       2024-05-26 14:19:56 +08:00 via iPhone
    用 User ID 比较方便,用 ID 比较规范,有时候方便比规范重要
    akira
        19
    akira  
       2024-05-26 15:13:33 +08:00
    按公司定的规范来。。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2496 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 04:30 · PVG 12:30 · LAX 21:30 · JFK 00:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.