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

数据库字段名下划线法还是驼峰法好一些?

  •  
  •   jry · 2020-03-05 19:25:06 +08:00 · 12800 次点击
    这是一个创建于 1759 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前一直使用 thinkphp,没有 Entity 这回事,最近研究了 spring-boot,发现 Entity 的把字段映射定义成驼峰法通过注解来对应具体的下划线字段名称: 1、这样是否会有性能损失,要不要直接数据库字段改成驼峰法? 2、之前的系统是 php 的,想直接把后端改成 java,但是兼容原来的数据库,php 版本的后端返回比如文章信息时是直接 json(字段下划线法),那 java-jpa 有办法再输出 json 时再把驼峰法转换成下划线吗?还是直接方案 1,直接统一全局驼峰法?

    39 条回复    2020-03-08 15:57:42 +08:00
    janwarlen
        1
    janwarlen  
       2020-03-05 19:34:40 +08:00
    数据库不要用驼峰,驼峰一般只是针对代码的规约

    用,两者都可以用,个人从可读性是数据库使用下划线
    hantsy
        2
    hantsy  
       2020-03-05 19:42:19 +08:00   ❤️ 2
    一般都是用 Snake 比较多。Camel 方式会很多问题,特别一些系统处理不分大小写,有的语言或者框架已经加入大小写检测。

    SQL 关键字大写:SELECT * FROM posts, 函数小写:SELECT now()
    数据库一些命名我倾向于小写,posts(表名复数化),first_name, product_id (某表字段名)。当然 Oracle 用户好像一直喜欢全部用大写的。
    mesbbs
        3
    mesbbs  
       2020-03-05 22:15:36 +08:00
    表名下划线,字段名全大写
    Kontinue
        4
    Kontinue  
       2020-03-05 22:18:43 +08:00
    都支持的,输出 json 时再把驼峰法转换成下划线,这个可以用 fastjson 配置注解。一般来说,java 多用 mysql 吧,mysql 里数据库字段是下划线的,JPA 自动能映射成驼峰的。
    saulshao
        5
    saulshao  
       2020-03-05 22:30:05 +08:00
    我一般都用下划线。
    lc7029
        7
    lc7029  
       2020-03-06 02:55:50 +08:00
    汉字数据库名,汉字表明
    没见有问题,而且更直观
    lookas2001
        8
    lookas2001  
       2020-03-06 04:15:02 +08:00
    数据库 snake,后端 camel,接口 snake,前端 camel,多麻烦。
    我的话直接全部 camel,省心省事。
    sutra
        9
    sutra  
       2020-03-06 07:33:38 +08:00
    用下划线还是用驼峰,是编码规约决定的。
    数据库一般都是用下划线。
    chendy
        10
    chendy  
       2020-03-06 08:15:37 +08:00
    数据库用 snake,用 camel 可能会遇到一些大小写不敏感导致的问题
    至于代码 camel,数据 snake 的情况,一般都有单独的配置(比如 jackson 和 jpa 的 namingstrategy )做全局改名不需要挨个配置
    murmur
        11
    murmur  
       2020-03-06 08:55:12 +08:00
    对于行业软件其实中文命名真的是最省心的
    NoKey
        12
    NoKey  
       2020-03-06 09:18:57 +08:00
    数据库里不用驼峰,用下划线,代码里用驼峰,各框架基本也是这个规约
    csulyb
        13
    csulyb  
       2020-03-06 09:28:35 +08:00
    建议下划线,曾经 mysql 迁移到 pg,大小写出了一堆 bug 因为 SQL 语句是不分大小写的 但是 pg 里对大小写是敏感的 很多代码要改
    passerbytiny
        14
    passerbytiny  
       2020-03-06 09:33:28 +08:00
    1、没有性能损失,不管哪种 Java 服务器,都是要先启动容器才能 提供服务的,而容器是会缓存各种配置的。
    2、如果你们的数据库够理想,那么 jpa 那里啥也不用动,你要动的是 spring mvc 那里——配置一下 json 解析。但是,你们以前都没 Entity 这回事,那么 jpa 跟数据库的映射,八成很难做。这种情况的最佳建议是:后端完全重做,数据库重做并迁移数据,前端调整 json 规范。说句实在话,只是后端部分 PHP 换 Java,九成九都是坑。假如 PHP 三周就能做完的项目,这三周的时间就够 Java 配置一下开发环境。
    oneisall8955
        15
    oneisall8955  
       2020-03-06 09:39:54 +08:00 via Android
    springboot 的 json 默认库应该是 Jackson,前端返回 json 的 key 可以配置为 snake 风格。只需要在返回前端的 VO 类配置对应策略。搜索一下吧
    xnode
        16
    xnode  
       2020-03-06 09:56:48 +08:00
    我都用下划线
    hbolive
        17
    hbolive  
       2020-03-06 09:59:49 +08:00
    如果实在纠结,用中文吧。。
    hambut
        18
    hambut  
       2020-03-06 10:01:26 +08:00
    推荐全部使用下划线。兼容性更好

    实际项目中遇到过 mac 访问 mysql 一个返回表名大小写不匹配的问题

    information_schema.tables in name,当 name 长度为 1 时,返回小写,大于 1 时,返回大写。

    我当时是蒙蔽的
    aydd2004
        19
    aydd2004  
       2020-03-06 10:13:06 +08:00
    所有代码 不管啥语言 都特么下划线
    rogerus
        20
    rogerus  
       2020-03-06 10:17:06 +08:00
    数据库用下划线好一些,否则大小写问题逼疯你。
    optional
        21
    optional  
       2020-03-06 10:21:06 +08:00
    pg 大小写不敏感,所以我选择不给自己找麻烦。
    lcf0030
        22
    lcf0030  
       2020-03-06 10:26:49 +08:00
    _
    ccl945
        23
    ccl945  
       2020-03-06 10:27:34 +08:00
    @lc7029 原来那个表字段用中文的是你
    SheepM
        24
    SheepM  
       2020-03-06 10:28:59 +08:00
    并不建议用驼峰式,因为 oracle 数据库和 mysql 数据库有一些大小写方面的差异,mysql 大小写敏感,但 oracle 的命名统一都是大写,有一天如果需要将 mysql 数据上的表和存储过程切换到 oracle,用驼峰式会直接原地爆炸。驼峰式一般用于在代码中,但不适用于关系型数据库代码
    edk24
        25
    edk24  
       2020-03-06 11:50:11 +08:00
    推荐用中文字段 啊哈哈哈哈
    hantsy
        26
    hantsy  
       2020-03-06 14:25:26 +08:00
    @csulyb 我以前一次经历,MySQL 在 Windows 下默认大小不敏感(可以修改配置),到部署到 Linux 就有问题了(字段,表名大小敏感),很多人程序里面 SQL 根本没在乎大小写。现在新版本怎么处理的,就不知道了。

    有时写一些 POC,省事一点我有时也不在乎这些规则,数据库可能也和程序一样用 Camel。最近用了下 PostgreSQL (跑在 Docker 里面), 用 Helidon DBClient 访问结果是,如果用 CamelCase 的话,DbRow 读出来的字段全部变成小写。
    yinzhili
        27
    yinzhili  
       2020-03-06 14:28:19 +08:00
    数据库表名、视图名、存储过程名、函数名、字段名都建议用下划线法
    wozhizui
        28
    wozhizui  
       2020-03-06 14:33:52 +08:00
    @hantsy 行家啊,学习了。
    jzmws
        29
    jzmws  
       2020-03-06 16:14:28 +08:00
    推荐用下划线, 因为数据库可以设置不区分大小写 , 我就吃过这个亏 , 之前一个不区分大小写的,然后再 java 用小写,生产数据库是大写,区分大小写 ,然后我就 gg 了
    lucifer1108
        30
    lucifer1108  
       2020-03-06 16:16:36 +08:00
    @mesbbs 那还有可读性?
    Vegetable
        31
    Vegetable  
       2020-03-06 16:20:55 +08:00
    我这种数据库字段用中文名的是少数吗?如果我认真对待一个项目,数据库字段名一定是中文。
    jin7
        32
    jin7  
       2020-03-06 16:31:01 +08:00
    中文最省事了 不费脑子 不存在大小写问题
    jry
        33
    jry  
    OP
       2020-03-06 16:41:35 +08:00 via iPhone
    @aydd2004 ENTITY 没法下划线
    jingege
        34
    jingege  
       2020-03-06 16:45:13 +08:00
    必须下划线呀,很多时候 MySQL 并不区分大小写吧
    qile1
        35
    qile1  
       2020-03-07 00:03:27 +08:00 via Android
    @yinzhili 最近听说 oracle 的包执行的时候要把.换成_,比如执行 packs.fac ()要写成 packs_fac ()
    yinzhili
        36
    yinzhili  
       2020-03-07 09:20:58 +08:00
    @qile1 新的版本改了吗? 11g 还是用.来分割
    ZoR
        37
    ZoR  
       2020-03-07 16:11:31 +08:00
    推荐下划线,以后遇到换数据库 大小写敏感 兼容性问题 就等着哭吧
    james122333
        38
    james122333  
       2020-03-08 15:48:47 +08:00
    能的话我几乎所有东西都不想要驼峰 很容易误打的方式
    james122333
        39
    james122333  
       2020-03-08 15:57:42 +08:00
    还有都大写也是很奇葩的
    对于大小和小写当然是小写看起来比较不吃力 也比较美观
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2612 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 03:34 · PVG 11:34 · LAX 19:34 · JFK 22:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.