上周跟一个做图书电商的朋友喝酒,他愁眉苦脸地说,后台数据乱成一锅粥,库存对不上,用户下单后发货地址还经常出错。我问他,你建库的时候,数据字典写清楚没?他愣了下,说直接建表了,哪有时间搞那个。我说,兄弟,你这是在埋雷啊。
咱们做网上书城网站开发的数据字典,真不是给甲方看的那些花里胡哨的文档,那是给开发自己留的保命符。你想想,书城里的书,跟卖衣服卖鞋的不一样。衣服可能就S、M、L三个码,书呢?ISBN号、作者、出版社、版次、开本、页数、定价、折扣价、库存量、上架状态、分类标签,这一堆字段,要是没个标准,后面维护起来能把你逼疯。
我有个前同事,之前接了个小型书店的转型项目。当时为了赶进度,数据库字段命名随心所欲。有的叫book_id,有的叫id,有的叫book_num。更离谱的是,价格字段,有的用decimal,有的用int,还有的直接用varchar存“9.9元”。结果到了双十一大促,系统崩了,查原因发现,是因为有人把价格字段填成了负数,或者填了中文的“免费”,导致计算总价时直接报错。要是当时有个规范的数据字典,规定好所有金额字段统一用decimal(10,2),并且禁止非数字字符,这种低级错误根本就不会发生。
所以,搞网上书城网站开发的数据字典,核心在于“规范”和“细节”。
第一,字段命名要有逻辑。别搞那些缩写,比如把“author”写成“authr”,把“publish_date”写成“pub_date”。虽然短了点,但半年后你自己都看不懂。建议用全小写加下划线,比如user_info, book_detail, order_status。这样不管谁接手,一眼就能看懂。
第二,枚举值要统一。书城的分类、状态、支付方式,这些在数据库里通常是用数字或短字符串表示的。比如状态,0代表下架,1代表上架,2代表缺货。这个映射关系,必须写在数据字典里。不然,新来的实习生看到status=3,根本不知道是啥意思,只能去代码里翻,或者干脆猜,这一猜就出bug。
第三,必填项和默认值要明确。比如ISBN号,那是书的身份证,必须唯一且必填。而封面图片,如果暂时没有,默认值应该是什么?是空字符串,还是留一个默认的占位图路径?这些细节,都在数据字典里定好,开发时就不会因为疏忽导致页面显示异常。
我见过最惨的一个案例,是一个大型书城项目,因为数据字典缺失,导致两个不同团队开发的模块对接时,时间格式一个用Unix时间戳,一个用YYYY-MM-DD HH:MM:SS,结果用户下单后,订单创建时间显示成1970年,整个前端展示全乱套。修复这个问题,花了整整三天时间改代码和清洗数据。要是当初有个统一的数据字典,规定好所有时间字段统一用UTC时间戳,或者统一用数据库的datetime类型,这种扯皮的事根本不会发生。
搞网上书城网站开发的数据字典,不是为了增加工作量,而是为了减少未来的返工。它就像是你房子的水电图纸,装修的时候可能觉得没用,等要打孔装柜子的时候,没有图纸,你只能盲打,打断了水管,那就麻烦大了。
别嫌麻烦,把字段类型、长度、是否允许为空、默认值、注释,都一条条列清楚。特别是那些容易混淆的字段,比如“售价”和“成本价”,“库存量”和“预销量”,一定要区分清楚。这不仅是给开发看的,也是给测试人员写用例的依据,更是给后期运维排查问题的线索。
记住,好的数据字典,是项目能平稳运行的基石。别等到数据乱了,再来后悔当初没花那半小时写文档。这钱,花得值。