字典表设计
一、业务场景
Web项目开发中,字典表的一般都会存在,主要用来给整个系统提供基础服务。比如男女性别的类型可以使用
0和1来进行表示,在存储数据和查询数据的时候,就可以使用字典表中的数据进行翻译处理。再比如之前做的一个
项目中宠物类型包含老虎-1、海豚-2、大象-3、长颈鹿-4等等;做答题处理时的答题类型,比如单选题、多选题、填空
题等等;比较常用的有用户类型,普通用户还是VIP用户等等;这些类型的数据也可以存储在数据字典中进行统一处理。
二、需求分析
一般情况下在不同的表中存储数据时,会使用到字典表的数据,比如说用户表在存储用户信息时,用户类型
就会存储字典表中对应的值,而不会存储中文的用户类型。这样在数据处理的时候会方便很多,如使用mysql,有些
关键字段使用中文存储的话,则可能会出现各种问题,在进行排序和分组操作的时候,支持不是很友好。因此各种
类型一般都是使用英文字符和数字进行存储。这样在查询数据的时候,就需要对存储的类型进行翻译操作。常规的
有几种方式,一种是在查询的时候直接进行表关联进行查询,直接将查询的数据翻译为中文,还有一种方式就是
在页面中去进行翻译处理,或者在代码中进行处理。比如0表示性别女,1表示性别男,在页面中显示的时候,
就需要将其值转换成对应的男和女。
三、解决方案
具体该如何实现数据字典的存储呢?常用的有两种方式:一种是使用两张表来存储字典表的数据,一张表存储各种
类型数据,一张表存储类型对应的具体的值。自己在以往开发的项目中,大多都是使用这种方式,简单明了,一看就懂。
如下面的两种设计方式,都是使用两张表来保存数据。
还有一种方式是使用一张表来存储字典表的数据。这种设计的字段不多,只使用一张表就可以完成两张表的功能,
主要字段有父id,字典类型,分组名称,存储值,显示值,排序值等等。简单解释一下这种设计方式,排序
值就不用多说,比如用户类型有好几种,在页面中添加的时候,可以对其进行排序,方便页面中展示。存储值就是真正
存储的值比如1,显示值就是对应的中文意思,比如1对应的是男。分组名称可以看作是一个具体的类型,比如用户类型。
字典类型可以有多种,按照需要来进行设置,比如与用户相关的,与菜单相关的,与日志相关的等等。父id不用说,
存在子父级关系,比如二级联动的时候,常规的有省市二级联动,选择一个值的时候,另外一个值也会跟着变化,
这时候就可以使用起来。
提示:推荐使用在页面中进行翻译的方式,可以加快数据处理的效率。因为数据字典中的数据一般不会太多,可以全部
加载到缓存当中,页面中查询的时候,直接从缓存当中获取,效率很快。