公司 DDL 规范禁止表名和字段名使用下划线,现有项目必须重构 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tabris17
V2EX    数据库

公司 DDL 规范禁止表名和字段名使用下划线,现有项目必须重构

  •  1
     
  •   tabris17 2014-12-19 13:40:56 +08:00 3577 次点击
    这是一个创建于 4032 天前的主题,其中的信息可能已经有所发展或是发生改变。
    MySQL数据库。
    PHP项目。
    项目有用ORM也有执行原生SQL。数据库访问都是基于Zend Db组件。
    我尝试写了个SQLParser来替换SQL语句中的表名和字段名,但是因为SELECT * 的关系,返回数据集的字段名没法替换掉。

    有没有什么好办法可以尽可能少修改代码来实现,有没有可能在数据库上动手脚?
    !-- SOL tip topic -->
    72 条回复    2014-12-20 12:41:29 +08:00
    raincious
        1
    raincious  
       2014-12-19 13:44:07 +08:00 via Android
    第一步怎么不是禁止ORM执行原生SQL?禁了这个其他都好办。

    另外SELECT *也不是最佳操作吧?
    tabris17
        2
    tabris17  
    OP
       2014-12-19 13:45:53 +08:00
    @raincious 代码都已经写好了,现在说这个已经来不及了
    tabris17
        3
    tabris17  
    OP
       2014-12-19 13:46:50 +08:00
    现在的问题是不符合DDL规范的表,运维部门不给部署到生产服。现在的目的只要能骗过运维部让项目上线就行
    88250
        4
    88250  
       2014-12-19 13:50:18 +08:00
    花点时间改呗....
    66450146
        5
    66450146  
       2014-12-19 13:55:11 +08:00   1
    :%s/_/UNDERSCORE/g
    66450146
        6
    66450146  
       2014-12-19 13:55:35 +08:00
    千万不要真的这么做……
    tabris17
        7
    tabris17  
    OP
       2014-12-19 13:57:36 +08:00
    @66450146 不要怎么做?
    xiaogui
        8
    xiaogui  
       2014-12-19 14:00:14 +08:00
    为什么禁止下划线?那你们用什么分词?
    tabris17
        9
    tabris17  
    OP
       2014-12-19 14:01:03 +08:00
    @xiaogui 驼峰法
    tabris17
        10
    tabris17  
    OP
       2014-12-19 14:01:32 +08:00   2
    @xiaogui “为什么禁止下划线?”

    因为运维部门来了个神经病
    xiaogui
        11
    xiaogui  
       2014-12-19 14:06:13 +08:00
    @tabris17 运维部门出规范。。。不过这说明你们这个项目不太急,要不就能直接上了,哈哈。
    wesley
        12
    wesley  
       2014-12-19 14:06:56 +08:00
    给运维不熟的数据库里只放几个假表,部署完之后,在服务器上放个phpmyadmin,把真正的表导进去
    nicai000
        13
    nicai000  
       2014-12-19 14:07:37 +08:00
    规范应该先于代码啊....
    tabris17
        14
    tabris17  
    OP
       2014-12-19 14:08:36 +08:00
    @wesley 默认数据库用户没有create table权限啊
    tabris17
        15
    tabris17  
    OP
       2014-12-19 14:08:54 +08:00
    @xiaogui 运维才不管你项目是不是会延期呢
    dorentus
        16
    dorentus  
       2014-12-19 14:09:08 +08:00 via iPhone   1
    话说,Google 的各种语言的代码规范里面,大都会提到旧代码如果不符合规范该怎么办,其中一个很重要的原则就是不要*仅仅*去为了让代码符合规范而去改。

    所以在我看来这要求的确有点神经病了…

    没啥特别省事的方法了,也就是修改-单元测试如此循环,该多少工作量就上报多少工作量吧。如果有什么来不及,那责任肯定不在开发这边。
    xiaogui
        17
    xiaogui  
       2014-12-19 14:12:07 +08:00
    @tabris17 那就把修改这个需要的真实时间 * 2.5 提交给你的上级,然后列出因为要做这个所谓的规范,然后目前其他所有项目完全停工。
    tabris17
        18
    tabris17  
    OP
       2014-12-19 14:12:53 +08:00
    @xiaogui 我就是那个上级啊 T_T
    cloudzhou
        19
    cloudzhou  
       2014-12-19 14:14:25 +08:00
    使用下划线有任何问题吗?我不理解,一直依赖我们都是使用下划线作为分隔符号。
    xiaogui
        20
    xiaogui  
       2014-12-19 14:16:09 +08:00
    @tabris17 你不是老板的话,就肯定还有上级。
    tabris17
        21
    tabris17  
    OP
       2014-12-19 14:18:09 +08:00   1
    @cloudzhou 运维脑子进大便了,这点毋庸置疑,现在的问题是如何骗过运维让产品上线,唉
    tabris17
        22
    tabris17  
    OP
       2014-12-19 14:19:15 +08:00
    @xiaogui 再上级就不管技术了,肯定是加班咯,我也不希望为让团队里的人加班(主要是我也不想加
    raincious
        23
    raincious  
       2014-12-19 14:20:41 +08:00
    @tabris17

    你们公司运维的胆子和权利很大啊。这样没问题么?跟你们老板谈谈。
    wdd2007
        24
    wdd2007  
       2014-12-19 14:22:41 +08:00
    你是上级。。。你需要有能力拒绝这个要求。。。
    tabris17
        25
    tabris17  
    OP
       2014-12-19 14:23:21 +08:00   1
    @raincious 每个部门都想刷存在感。我昨天还经历了我司测试部给开发提功能需求呢
    tabris17
        26
    tabris17  
    OP
       2014-12-19 14:23:55 +08:00
    @wdd2007 运维部是别人家的部门,管不到
    xiaogui
        27
    xiaogui  
       2014-12-19 14:27:26 +08:00
    @tabris17 加班的话,也会影响其他项目的进度,把这些都弄清。你肯定是要向上面汇报这样造成的后果。
    另测试部可以提功能需求,任何人都可以。但是研发部要有自己的开发计划,以及预估出其他人提的需求需要的开发时间和重要性,结合实际情况,然后同意、拒绝或者放入需求池等等。
    tabris17
        28
    tabris17  
    OP
       2014-12-19 14:30:07 +08:00
    @xiaogui 测试提需求的意思如果不实现这个功能就认为是程序BUG不让过测试,另外测试直接和开发提,当产品经理死了吗
    ls25145
        29
    ls25145  
       2014-12-19 14:34:03 +08:00
    这个必须反映一下,不管上面是不是管技术的。
    代码先写的,规范后定的。明显是运维的问题,这个要是不强硬对待,以后有的是办法收拾你。
    要么延期,要么无视这个规范。
    xiaogui
        30
    xiaogui  
       2014-12-19 14:35:34 +08:00
    @tabris17 按这样的话,就只能拖着了,嗯。加班的时候记着拉上测试,随时让他们测试。
    另如果你是研发部门的头的话,你是有权力去拒绝任何你感觉不对的研发需求,规范,并参与对这些需求的谈论,规范的制定中的。否则的话,相信我,你们研发部估计是这公司最苦逼的部门,注意部门小伙伴们可能会陆续离开。
    tabris17
        31
    tabris17  
    OP
       2014-12-19 14:35:41 +08:00
    @ls25145 得罪了运维以后能落下好么
    raincious
        32
    raincious  
       2014-12-19 14:37:49 +08:00
    @tabris17 如果仅仅是想刷存在感:

    1、查一下你拿到手的需求以及之前所有的Note,看看运维在开发之前有没有提出规范限定,如果有,但是你的团队没遵守,那就是你的问题,如果没有,那就是没有必要遵守。
    2、如果之前没有提出,上线时临门一脚,你直接说明原因和后果报给Boss让他解决这个问题好了。

    其实作为Leader有的时候需要问一下各部门的,比如各种规范什么的,只需要一句话就能解决很多问题。

    3、运维竟然以非关键(且未知会过)的原因阻止项目上线,这你必须和Boss谈下,了解和规范下他们的权利。
    tabris17
        33
    tabris17  
    OP
       2014-12-19 14:39:11 +08:00
    我觉得有点跑题了,咱们还是回到技术问题上来好吗
    raincious
        34
    raincious  
       2014-12-19 14:43:54 +08:00
    @tabris17

    如果你真的要这么做,那就一点点修改代码,改成符合运维要求的

    > 我尝试写了个SQLParser来替换SQL语句中的表名和字段名,但是因为SELECT * 的关系,返回数据集的字段名没法替换掉。

    不要这么玩,增加了复杂度和不确定性。未来维护会非常麻烦。
    xiaogui
        35
    xiaogui  
       2014-12-19 14:46:05 +08:00
    快速替换的方法,有任何后果是需要你承担的。
    skybr
        36
    skybr  
       2014-12-19 14:46:14 +08:00   1
    我在想, 写django或者rails的没下划线怎么活
    cloudzy
        37
    cloudzhy  
       2014-12-19 14:53:02 +08:00   1
    蛇形法明显比驼峰法更容易一眼看出来。
    tabris17
        38
    tabris17  
    OP
       2014-12-19 14:54:29 +08:00   1
    @skybr 还真被你说中,手头还有个django项目,我准备到时候用ansible playbook自动部署,他们运维不懂的话也就闭嘴了。
    shadyxu
        39
    shadyxu  
       2014-12-19 15:19:24 +08:00
    “管不到其他部门”,其他部门当然不能管,沟通,沟通不了就向上反馈让上面决定。“不想得罪运维”,就不怕得罪自己组的人?

    作为一个leader,跨部门合作怎么能这么被动。这个就不应该是技术问题,无厘头的要求就必须说no。
    tabris17
        40
    tabris17  
    OP
       2014-12-19 15:21:44 +08:00   1
    @shadyxu 现在不是沟通的问题,沟通的话能破例上线,但是还是要限期修改。

    我只是想找个简单的技术修改方案而已啊
    shadyxu
        41
    shadyxu  
       2014-12-19 15:21:51 +08:00
    LZ你就想想,你自己都这么排斥,你的组员,也就是最后真正去改的人,会是什么想法。如果这种没来由且滞后还又跨部门的要求你都直接妥协,你的组员会怎么想你。
    shadyxu
        42
    shadyxu  
       2014-12-19 15:29:28 +08:00
    @tabris17 不仅仅是这次上线的问题,你们以前的项目也全部要改吗,新项目以后也要这样吗。既然你管不动跨部门的运维,那他们跨部门给你们提的要求你怎么就直接接受了。这种你觉得不对的东西,还要折腾耗费工作量,又会引起组员反感,这都不去据理力争,别人还能指望你什么。
    tabris17
        43
    tabris17  
    OP
       2014-12-19 15:35:38 +08:00
    @shadyxu
    规范和项目在我来公司之前就都存在了,是当时负责的开发没有留意规范,而项目一直没上线,所以直到最近要上线前才发现不符合规范的问题(当然这个规范有多傻逼就不提了),所以我没找开发算账已经不错了,开发还反感个毛啊。
        44
    aru  
       2014-12-19 16:13:30 +08:00
    老老实实改代码,或者去掉这个规划
    ibugeek
        45
    ibugeek  
       2014-12-19 16:18:07 +08:00
    @tabris17 作为开发人员,这种折腾耗费工作量的,还是擦前任的屁股,必然不爽啊,大不了不干了....
    只能是祝福了。
    loryyang
        46
    loryyang  
       2014-12-19 16:20:21 +08:00
    这,你作为技术总负责人居然没有怼回去?难道你们那边rd还不如运维强势?

    要是我我就给他排期排个三个月,给他慢慢改。上头要是对我有意见,老子拍拍屁股走人,哪儿不是一样干,干这样傻逼的事情,还不如不干

    你就这样想,你这么干对得起手下的弟兄吗?
    dingyaguang117
        47
    dingyaguang117  
       2014-12-19 16:22:04 +08:00
    表明字段名有下划线 有啥缺点呢
    loveyu
        48
    loveyu  
       2014-12-19 16:33:19 +08:00
    我咋觉得下划线明显比那个驼峰好区分
    sunhk25
        49
    sunhk25  
       2014-12-19 16:35:17 +08:00
    用的cakephp,官方文档,例子里面的表名,字段名全都是下划线来标识的。。。
    tabris17
        50
    tabris17  
    OP
       2014-12-19 16:36:09 +08:00   2
    @dingyaguang117 完全没有,反而是驼峰法会有问题,在不同系统下,mysql表名大小写敏感是不一样的。
    akira
        51
    akira  
       2014-12-19 16:3:11 +08:00
    按照你说的话,规范应该是一直存在的,老老实实的改代码吧,别取巧。
    akfish
        52
    akfish  
       2014-12-19 16:40:29 +08:00
    这种事情运维也来指手画脚?真是醉了。
    kaneg
        53
    kaneg  
       2014-12-19 16:47:19 +08:00
    这就是软件开发中的蝴蝶效应。
    edwardtoday
        54
    edwardtoday  
       2014-12-19 16:47:46 +08:00
    这个月刚把原先驼峰命名的MySQL表名改成全小写用下划线分词。
    开发环境MySQL是跑在linux上的,一直没问题。
    直到在某台Windows上装了MySQL,发现默认不区分大小写表名,真是悲伤。

    我不知道你们是否会遇到跨平台的问题,但是就表名而言,你们新来的话事人是不是还要把 information_schema 改成 InformationSchema 呢?问问MySQL同不同意??

    规范不对的时候改规范。规范不合理的时候,争取改合理了。忍气吞声埋头做,出问题谁负责?延期谁负责?责任都你团队负,权利都在其他部门,这不搞笑呢么。玩不转的。
    tabris17
        55
    tabris17  
    OP
       2014-12-19 16:53:43 +08:00   1
    @edwardtoday 本地开发环境是windows的,不过以后项目我会让他们都在vagrant虚拟机上开发。
    定这个规范绝对是人绝对是脑子进大便了,没办法
    evlos
        56
    evlos  
       2014-12-19 17:14:54 +08:00 via iPhone
    卧槽 表名还不让用下划线了 哪个逗比定的规范。。。
    cloudzhou
        57
    cloudzhou  
       2014-12-19 17:37:04 +08:00
    @tabris17 让运维发出邮件,详细列出这样做的目的、好处。并且表示,出于xxx的原因,如果没能说服这样修改的合理性,将不做这样的更改。
    aa88kk
        58
    aa88kk  
       2014-12-19 18:08:45 +08:00
    你们公司运维是个大5B, mysql默认的命名方式就是小写加下划线,查询是不区分大小写的。所以大小写只会在显示上有区别。你们公司也奇葩,运维能管这个? 换个公司吧。
    huigeer
        59
    huigeer  
       2014-12-19 18:09:28 +08:00
    别人吃大便就让他吃, 用不着赔他吃,
    zzColin
        60
    zzColin  
       2014-12-19 18:29:05 +08:00
    显然楼主措辞上有点问题,以致于几乎所有回复都当成是运维故意找茬了,但不管规定再怎么脑残,楼主显然已经在 43 楼承认了是自己和手下开发人员的疏忽
    cdxem713
        61
    cdxem713  
       2014-12-19 18:44:43 +08:00 via iPhone
    我记得sql是大小写不敏感的啊
    dong3580
        62
    dong3580  
       2014-12-19 19:44:19 +08:00
    @tabris17
    我们同时用两种:
    比如:
    UserAccount
    user_account
    。。。你们居然为了这个重构,有这个时间不如优化一下select *了,
    jjx
        63
    jjx  
       2014-12-19 20:00:02 +08:00   1
    你这当领导真没有领导的能力, 这种事情要是我,直接就顶回去,顶到最高层, 大不了不干了,如果公司同意这种sb做法,这种公司有什么留的必要
    mhycy
        64
    mhycy  
       2014-12-19 20:10:47 +08:00
    @jjx 我们领导即便是跨公司合作都会把这种无理需求顶回去....
    只要领导的领导还是个有脑子的人就不会在这些事上浪费时间..
    mhycy
        65
    mhycy  
       2014-12-19 20:12:09 +08:00
    说起来 这个规范真的是脑子被夹了....
    SQL的保留字符统统大写,表名,字段名小写+下划线在调试的时候容易看很多.....
    lincanbin
        66
    lincanbin  
       2014-12-19 20:31:41 +08:00
    运维脑子进水了,代码规范应该由开发团队自己制定,运维手伸这么长干嘛?
    billwang
        67
    billwang  
       2014-12-19 21:46:49 +08:00
    DDL,让我想起来灾备了,赶紧把检修期间注意的记了下来。
    tabris17
        68
    tabris17  
    OP
       2014-12-19 22:06:11 +08:00
    @jjx 刚来还没领第一个月工资就急着再找工作吗?而且就算要顶牛也要挑别人去好么,自己去顶岂不是缺心眼
    kurtis
        69
    kurtis  
       2014-12-20 00:57:41 +08:00   1
    下次运维规定你们不许用大拇指以外的手指来按空格,不许你们打字时看键盘,因为都违反指法规范。
    若是发现,一次警告,两次剁手指,三次挖眼珠。

    运维在给你下马威呢,强烈不推荐留在这样的公司,以后玩政治会很厉害的。
    revlis7
        70
    revlis7  
       2014-12-20 01:49:26 +08:00
    看了半天,我突然明白了,这就是传说中真真正正的DevOps啊
    wy315700
        71
    wy315700  
       2014-12-20 09:43:21 +08:00
    @cdxem713
    @aa88kk

    如果我没记错的话,mysql文件名是跟随表名的

    所以Windows上表名不分大小写,Linux上就区分了
    cdxem713
        72
    cdxem713  
       2014-12-20 12:41:29 +08:00
    @wy315700 确实没有下细去研究过这个,到现在为止看到的SQL写法都是用下划线的,很好奇楼主公司的规范是出于何种目的制定的...
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2339 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 04:49 PVG 12:49 LAX 20:49 JFK 23:49
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86