数据字典(Data dictionary)是描述数据的信息集合,是对系统中使用的所有数据元素的定义的集合。
什么是数据字典
什么是数据字典? 字典的英文是 Dict, 翻译过来是字典、词典。
和字典同类的东西呢,就是 Map。 Map 就是地图、映射的意思。
所以字典的本质就是 映射,对应。
字典一般分为两部分: 名称 和 描述信息。 用计算机术语说,就是 键-值对(Key-Value pair), 名值对、还有 Code-Name 等。
在系统中,因为有很多标准、规范、约定, 为了执行这些规范,对数据分类、数据状态进行精确定位,又或者因为多个系统之间需要进行数据交换,但叫法和显示上有差别,在存储数据时需要存储码值,而不能只存储显示时使用的名称。
例如状态值和状态名称。标准做法是只存储 VALUE, 不存储名称。 如果考虑优化,减少数据表的关联查询(join),那么可以在存储 VALUE 的同时冗余存储 NAME。 当然,需要根据具体情况来设计, 如果 NAME 或者描述信息太长,占用空间较大,那么可能就不会进行冗余。 顺便提一句, 减少空间占用 也是使用数据字典的一个原因。
数据字典作用是什么
在平时开发的过程中,特别是在遇到表单时候,我们经常需要为前端提供一些下拉选项的信息,这时候我们需要为前端提供下拉菜单的信息,让前端进行渲染。同时我们在数据库中存储的只可能是对应的编码。
如果前端直接将value值写死在前端代码中,那么就破坏了低耦合原则,如果未来清查状态有增加或者管理员想要修改,那么需要修改前端代码,会带来非常大的麻烦。
为解决该问题,就需要设计数据字典,其实就是数据库中的一张表。
数据字典的设计
最简设计
名称-值。
通用设计
如果状态、类型都有对应的字典表,那么随着系统规模的扩大,字典表会越来越多,可能200张表里面有30-50个是字典表。 这就很烦人了,这些表的字段都是差不多的。这时候比较好的办法就是合表。合表就会涉及到数据类型和如何区分的问题。
将相似的表结构合并时,添加一个字段来进行区分是常见的做法。数据字典的区分,我们一般使用 分类这个字段。分类的英文单词,大致有: type、class、classify、category 等。因为分类是给系统后台或者程序员看的,所以一般是使用字符串类型(String, VARCHAR(32))。
同时,为了避免再引入一个分类类型说明的表,我们做一点冗余: 使用2个字段: 分类编码(category_code) 和 分类说明(category_desc)。
简单优化
ID、排序
运维审查方便
创建时间、更新时间、创建人、修改人
最终结果
1 | CREATE TABLE IF NOT EXISTS `dict_common` ( |
参考链接
- 通用数据字典表结构设计,by Jessicahust.
- 数据库设计之数据字典的使用与设计,by 沉默终止.
- 数据字典,by baidu.