数据字典的应用场景

使用场景 :

在平时开发的过程中,特别是在遇到表单时候,我们经常需要为前端提供一些下拉选项的信息,这时候我们需要为前端提供下拉菜单的信息,让前端进行渲染。同时我们在数据库中存储的只可能是对应的编码,例子如下:
在这里插入图片描述

这里我们可以看到在搜索栏中,有一个下拉菜单。如果前端直接将value值写死在前端代码中,那么就破坏了低耦合原则,如果未来清查状态有增加或者管理员想要修改,那么需要修改前端代码,会带来非常大的麻烦

解决方案 :

简单解决:
对字段值比较稳定,不存在比较大的变动,同时对应的分类数不超过3个,例如:性别(用0表示男,1表示女),我们在数据库中呢可以用char(1)这种数据类型来进行存储,同时在pdm文件中注释标明对应表示的含义
在这里插入图片描述

企业级理解:

对于字段数目比较多,情况复杂的情况(如下),我们考虑通过设计数据字典来解决这类问题。
在这里插入图片描述

数据字典是什么:
直接附上数据库设计

在这里插入图片描述
这里我们可以看到,某一个下拉框的数据通过标识字段dict_type存储,查询时如果我们需要某一个下拉框的数据,我们只需要获得该标识字段,同时进入数据字典查询即可,其中dict_label就是前端显示的文字。同时我们还添加了一些用于前端页面显示的字段,比如说有些选项需要高亮显示,或者设置一些默认值,我们可以通过在渲染时判断该关键值比如途中is_dafault 是否为N,或者绑定css字段中的class字段来实现样式的变换,这样通过接口返回给前端list时,前端便可以直接获取清晰明了的字段id,含义,同时还可以进行一些特殊样式的渲染等。

我的表字段设计:

字典数据表
在这里插入图片描述

字典类型表
在这里插入图片描述

附上数据库表sql:

create table sys_dict_data
(
   dict_code            int(11) not null auto_increment comment '字典编码',
   dict_sort            int(4) default 0 comment '字典排序',
   dict_label           varchar(100) default '' comment '字典标签',
   dict_value           varchar(100) default '' comment '字典键值',
   dict_type            varchar(100) default '' comment '字典类型',
   css_class            varchar(100) default '' comment '样式属性(其他样式扩展)',
   list_class           varchar(100) default '' comment '表格回显样式',
   is_default           char(1) default 'N' comment '是否默认(Y是 N否)',
   status               char(1) default '0' comment '状态(0正常 1停用)',
   create_by            varchar(64) default '' comment '创建者',
   create_time          datetime default NULL comment '创建时间',
   update_by            varchar(64) default '' comment '更新者',
   update_time          datetime default NULL comment '更新时间',
   remark               varchar(500) default '' comment '备注',
   primary key (dict_code)
)
ENGINE=InnoDB AUTO_INCREMENT=410 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='字典数据表';

alter table sys_dict_data comment '字典数据表';

/*==============================================================*/
/* Table: sys_dict_type                                         */
/*==============================================================*/
create table sys_dict_type
(
   dict_id              bigint(20) not null auto_increment comment '字典主键',
   dict_name            varchar(100) default '' comment '字典名称',
   dict_type            varchar(100) default '' comment '字典类型',
   status               char(1) default '0' comment '状态(0正常 1停用)',
   create_by            varchar(64) default '' comment '创建者',
   create_time          datetime default NULL comment '创建时间',
   update_by            varchar(64) default '' comment '更新者',
   update_time          datetime default NULL comment '更新时间',
   remark               varchar(500) default NULL comment '备注',
   primary key (dict_id),
   unique key dict_type (dict_type)
)
ENGINE=InnoDB AUTO_INCREMENT=131 DEFAULT CHARSET=utf8 COMMENT='字典类型表';

alter table sys_dict_type comment '字典类型表';

数据字典有几点疑问:
字典编码 和字典名称 保存到数据库的时候 是 保存 字典编码还是字典名称?
正常都是存编码,不想转换或者不涉及业务的存名称也行

字典编码 在什么情况下 == 字典名称 ?
字典名称如果比较是复杂的业务词汇,又没有更好的数字或者英文替代的话,字典编码== 字典名称比较合适。

数据字典使用场景:
字段数目比较多的情况下使用数据字典是为了方便管理维护吧。情况复杂的情况下使用数据字典是为了防止一直的修改数据。存储数据的时候用字典编码,查询数据的时候显示字典名称,这就是数据字典的意义所在。如果不使用数据字典,在情况复杂的情况下,就要因为需求的变更一直修改已经存储的数据。

我在项目中的使用:

存储数据的时候可以同时存储字典编码和字典名称,如果客户需求是无论字典名称如何修改,必须查询出所有的已经存储的数据,则我们使用字典编码查询。 如果客户需求是只要字典名称修改了,只需要查询最新的字典名称的数据,则我们使用字典名称查询。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值