jry
V2EX  ›  Java

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

  •  
  •   jry · Mar 5, 2020 · 14108 views
    This topic created in 2265 days ago, the information mentioned may be changed or developed.

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

    39 replies    2020-03-08 15:57:42 +08:00
    vvvVictoria
        1
    vvvVictoria  
       Mar 5, 2020
    数据库不要用驼峰,驼峰一般只是针对代码的规约

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

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

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

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

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

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