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

请问大家是怎样维护数据库字段含义的?

  •  
  •   onlyice · 2015-07-07 15:44:19 +08:00 · 3700 次点击
    这是一个创建于 3425 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如 MySQL 的某个表中,各个字段的含义是怎样维护的?

    现在我们这边用了一个 DOC 文档纪录字段的含义,但是时间一久字段的含义发生了变化,或者有一些字段废弃了,总是无法及时纪录到文档中。

    有没有更好的解决办法?

    有没有专门的系统来维护字段含义、是否废弃、负责人是谁等各种信息?

    23 条回复    2020-09-28 11:18:29 +08:00
    wintersun
        1
    wintersun  
       2015-07-07 16:01:14 +08:00   ❤️ 1
    MySQLWorkBench,自带数据库设计功能,由设计驱动数据库创建、变更
    PowerDesign,老牌数据库设计软件,DB2,Oracle,MySQL,PostgreSQL,通吃。当然价格嘛,我只能嘿嘿 and 呵呵了。

    想当年,远古时代,我们用excel、word记录数据库设计,甚至有哥们写了套web版的数据库字段定义、维护系统,呜呼那个哀哉!
    jybox
        2
    jybox  
       2015-07-07 16:02:47 +08:00   ❤️ 1
    在项目的代码里维护两个 SQL 文件,一个是创建数据库的 SQL 语句(CREATE TABLE 之类的),每个字段前加有关这个字段的注释,比如详细解释、和其他字段的隐性关联、有效/无效/弃用情况。
    另一个是历史更改数据库结构的语句(ALTER TABLE 之类的),每条命令的注释写上做这项修改的原因和注意事项等,这个文件只在末尾新增新增,不删改之前的。
    改数据库之前一定要先修改这两个文件,然后在部署的时候执行第二个文件中新增的语句。
    onlyice
        3
    onlyice  
    OP
       2015-07-07 16:10:51 +08:00
    @wintersun
    多谢指点 :-)

    刚试了一下 Workbench 的设计功能,的确很强大

    Web 版的系统想法很赞~~
    onlyice
        4
    onlyice  
    OP
       2015-07-07 16:11:30 +08:00
    @jybox 恩,也是一个办法
    wintersun
        5
    wintersun  
       2015-07-07 16:15:46 +08:00   ❤️ 1
    jybox提到的SQL就是MySQL WorkBench/PowerDesign的产出之一。
    工具和人手维护都是可以的,取决于有否条件。
    maemual
        6
    maemual  
       2015-07-07 16:16:26 +08:00   ❤️ 1
    把建表的 sql 放到 git 里面进行版本控制。
    强制要求在修改数据库,或者新建数据库的时候,通过提 PR 的方式,并且要求进行相关人员进行 review,同时写相应的注释和文档。
    loveyu
        7
    loveyu  
       2015-07-07 16:18:51 +08:00   ❤️ 1
    一般我会再SQL中写注释,然后几条脚本把注释更新到文档,最后GIT什么的,也挺方便
    onlyice
        8
    onlyice  
    OP
       2015-07-07 16:42:09 +08:00
    loveyu
        9
    loveyu  
       2015-07-07 16:44:18 +08:00   ❤️ 1
    @onlyice
    类似这样的:
    CREATE TABLE `courses` (
    `courseID` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '课程ID',
    `courseName` varchar(30) NOT NULL COMMENT '课程名称',
    `pinyin` varchar(120) DEFAULT NULL COMMENT '拼音的全拼',
    `pinyin_index` varchar(30) DEFAULT NULL COMMENT '拼音的索引',
    PRIMARY KEY (`courseID`),
    UNIQUE KEY `courseName` (`courseName`)
    ) ENGINE=InnoDB AUTO_INCREMENT=575 DEFAULT CHARSET=utf8 COMMENT='课程信息,相当于一张索引表';

    这个注释可以通过SQL语句查询的
    onlyice
        10
    onlyice  
    OP
       2015-07-07 16:49:00 +08:00
    @loveyu Thanks, 我来了解下 COMMENT
    shakoon
        11
    shakoon  
       2015-07-07 19:13:44 +08:00   ❤️ 1
    数据库建模业界第一的当然是Power Designer,MySQL Workbench是专为MySQL定制的工具,也不错。
    顺便强烈建议开发创始人不要图一时方便,因为省略掉数据库建模的粗放型的开发一定会导致后期继续开发、维护的一系列困难,给自己给后人挖下巨坑
    onlyice
        12
    onlyice  
    OP
       2015-07-07 19:41:03 +08:00
    @shakoon Thanks :-)
    “留下巨坑” 可能是怎样的坑呢?能简单举例讲一下么?
    akira
        13
    akira  
       2015-07-07 20:16:06 +08:00   ❤️ 1
    字段名不要用缩写,尽量描述清楚
    适当的注释是必需的
    gelupk
        14
    gelupk  
       2015-07-07 21:13:48 +08:00   ❤️ 1
    加注释,用的navicat挺方便的
    virusdefender
        15
    virusdefender  
       2015-07-07 21:21:48 +08:00   ❤️ 1
    使用orm 注释在model中
    takashiki
        16
    takashiki  
       2015-07-07 21:29:53 +08:00   ❤️ 1
    如果是php的话,一些框架提供的migrate功能就和记录sql的效果是一样的,而且方便迁移
    onlyice
        17
    onlyice  
    OP
       2015-07-07 21:37:36 +08:00
    @virusdefender 恩,的确是个办法
    但是我的场景里读数据库不只是用 ORM,也有裸写 SQL 的,就比较蛋疼。。
    onlyice
        18
    onlyice  
    OP
       2015-07-07 21:37:55 +08:00
    @gelupk 也是用 MySQL 的 COMMENT 选项?
    onlyice
        19
    onlyice  
    OP
       2015-07-07 21:38:49 +08:00
    @takashiki 恩,php 的 ORM 框架可以纪录 migrate 的注释么?
    takashiki
        20
    takashiki  
       2015-07-08 09:12:44 +08:00   ❤️ 1
    @onlyice 有些是可以的如yii2,有些原生不行但是有人写了扩展如laravel,而且orm一般都支持执行裸sql的
    shakoon
        21
    shakoon  
       2015-07-08 11:38:27 +08:00
    @onlyice 比如我和某系统做接口时见到了某数据库,在一个字段存了若干个参数,直接拼在一个字符串里,取出来后还得一位一位的分割开才能用,而且码表还找不到,得跟踪程序到前台显示界面才知道这是什么,遇到这种你不想抽人吗。如果有个pdm,字段的意义、码值这些都能一目了然,而且类似这样的完全不符合第一范式要求的破烂设计根本就通不过
    iamsk
        22
    iamsk  
       2019-02-13 16:23:46 +08:00
    同样有这样的困惑
    枚举值的变更,直接 alter 数据库,很不好;
    使用文档,同步又存在问题;
    自己开发了数据库同步方案,针对枚举,描述变更,可以单独更新。
    http://dbhub.bastionhost.org/
    iamsk
        23
    iamsk  
       2020-09-28 11:18:29 +08:00
    原地址已失效,放个代码地址: https://github.com/huifenqi/dbhub
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1006 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 22:21 · PVG 06:21 · LAX 14:21 · JFK 17:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.