比如 MySQL 的某个表中,各个字段的含义是怎样维护的?
现在我们这边用了一个 DOC 文档纪录字段的含义,但是时间一久字段的含义发生了变化,或者有一些字段废弃了,总是无法及时纪录到文档中。
有没有更好的解决办法?
有没有专门的系统来维护字段含义、是否废弃、负责人是谁等各种信息?
1
wintersun 2015-07-07 16:01:14 +08:00 1
MySQLWorkBench,自带数据库设计功能,由设计驱动数据库创建、变更
PowerDesign,老牌数据库设计软件,DB2,Oracle,MySQL,PostgreSQL,通吃。当然价格嘛,我只能嘿嘿 and 呵呵了。 想当年,远古时代,我们用excel、word记录数据库设计,甚至有哥们写了套web版的数据库字段定义、维护系统,呜呼那个哀哉! |
2
jybox 2015-07-07 16:02:47 +08:00 1
在项目的代码里维护两个 SQL 文件,一个是创建数据库的 SQL 语句(CREATE TABLE 之类的),每个字段前加有关这个字段的注释,比如详细解释、和其他字段的隐性关联、有效/无效/弃用情况。
另一个是历史更改数据库结构的语句(ALTER TABLE 之类的),每条命令的注释写上做这项修改的原因和注意事项等,这个文件只在末尾新增新增,不删改之前的。 改数据库之前一定要先修改这两个文件,然后在部署的时候执行第二个文件中新增的语句。 |
3
onlyice OP |
5
wintersun 2015-07-07 16:15:46 +08:00 1
jybox提到的SQL就是MySQL WorkBench/PowerDesign的产出之一。
工具和人手维护都是可以的,取决于有否条件。 |
6
maemual 2015-07-07 16:16:26 +08:00 1
把建表的 sql 放到 git 里面进行版本控制。
强制要求在修改数据库,或者新建数据库的时候,通过提 PR 的方式,并且要求进行相关人员进行 review,同时写相应的注释和文档。 |
7
loveyu 2015-07-07 16:18:51 +08:00 1
一般我会再SQL中写注释,然后几条脚本把注释更新到文档,最后GIT什么的,也挺方便
|
8
onlyice OP |
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语句查询的 |
11
shakoon 2015-07-07 19:13:44 +08:00 1
数据库建模业界第一的当然是Power Designer,MySQL Workbench是专为MySQL定制的工具,也不错。
顺便强烈建议开发创始人不要图一时方便,因为省略掉数据库建模的粗放型的开发一定会导致后期继续开发、维护的一系列困难,给自己给后人挖下巨坑 |
13
akira 2015-07-07 20:16:06 +08:00 1
字段名不要用缩写,尽量描述清楚
适当的注释是必需的 |
14
gelupk 2015-07-07 21:13:48 +08:00 1
加注释,用的navicat挺方便的
|
15
virusdefender 2015-07-07 21:21:48 +08:00 1
使用orm 注释在model中
|
16
takashiki 2015-07-07 21:29:53 +08:00 1
如果是php的话,一些框架提供的migrate功能就和记录sql的效果是一样的,而且方便迁移
|
17
onlyice OP @virusdefender 恩,的确是个办法
但是我的场景里读数据库不只是用 ORM,也有裸写 SQL 的,就比较蛋疼。。 |
20
takashiki 2015-07-08 09:12:44 +08:00 1
@onlyice 有些是可以的如yii2,有些原生不行但是有人写了扩展如laravel,而且orm一般都支持执行裸sql的
|
21
shakoon 2015-07-08 11:38:27 +08:00
@onlyice 比如我和某系统做接口时见到了某数据库,在一个字段存了若干个参数,直接拼在一个字符串里,取出来后还得一位一位的分割开才能用,而且码表还找不到,得跟踪程序到前台显示界面才知道这是什么,遇到这种你不想抽人吗。如果有个pdm,字段的意义、码值这些都能一目了然,而且类似这样的完全不符合第一范式要求的破烂设计根本就通不过
|
22
iamsk 2019-02-13 16:23:46 +08:00
同样有这样的困惑
枚举值的变更,直接 alter 数据库,很不好; 使用文档,同步又存在问题; 自己开发了数据库同步方案,针对枚举,描述变更,可以单独更新。 http://dbhub.bastionhost.org/ |
23
iamsk 2020-09-28 11:18:29 +08:00
原地址已失效,放个代码地址: https://github.com/huifenqi/dbhub
|