为什么字典表?

存在问题:

某些变量在多个地方使用,而且一般是固定的,但是随着系统升级和后期变化,可能需要改变,如果这些变量写死在代码里面将会变得难以维护,所以要将其从代码中抽离出来。

一般的业务系统客户端与用户交互的时候都会使用下拉框组件,对于某些比较固定的值的下拉组件的数据来源一般都是比较固定的一类数值。

如何解决

有的做法是使用枚举或者Constants常量类来实现,这种情况下在量少的前提是没问题的,而且一旦需要修改就及其避免修改源码;随着系统的开发拓展,后期将无法维护,甚至命名困难等问题。

所以通常把字典放在数据库,这样后期的维护变更就比较简单,也可以在不用修改代码的情况下修改配置。还有,对于某些固定的数据字典(例如,星期,月份等)不允许修改。

但是,放在数据库又有着频繁访问数据库的问题,这不是我们希望的,这时候通常做法就是加缓存,降低访问数据库的频率。

字典表的设计:

通常分成两张表来实现,一个是字典类型,一个是字典

字典类型表: SYS_DICT_TYPE

字段名

类型

作用

备注

code

varchar

编码

主键

name

varchar

类型

展示用

字典表 : SYS_DICT

字段名

类型

作用

备注

code

varchar

编码

主键

type_code

varchar

类型code

外键

name

varchar

字典名

展示用

value

varchar

字典值

使用值

fixed

int

是否是固定的

default 0不固定,固定的话用1

以上是字典表的关键列和结构的设计,根据不同系统不同业务自定其他列

注意事项

字典类型应该是不可编辑的,因为字典类型通常会和具体代码实现紧密耦合,如果非要进行编辑话需要考虑到对代码的影响以及如何保证修改之后系统正常工作

字典分可编辑与不可编辑,所以在提供字典管理的时候需要注意fixed字段,针对固定的字典不提供编辑功能

字典与系统参数不要混为一谈,字典通常用于一类的数据,一组具有相同含义的数值(例如,供客户端下拉选择的枚举);而系统参数是针对某种配置或者某种系统常量的存在。

关于缓存

对于缓存,可能每个人的意见不同,有人认为缓存增加维护成本,一旦使用缓存,对于编辑的数据得立马刷新缓存,不然将会与预期不符,并且对于访问不频繁量少的数据还达不到使用缓存的级别;有人认为缓存提高效率,减少数据访问。

个人认为,不同项目不同应用场景使用缓存的条件不同,对于高频的数据或者对响应时间要求严格的系统可以增加缓存,但是带来的就是数据改动的同时需要及时更新缓存信息;对于对响应时间、业务要求较高的系统可以不用缓存,保证业务的正确性。所以,具体情况具体分析,没有哪一种是正确的,选择适合的就可以。

mysql 字典表设计_字典表设计相关推荐

  1. java闹钟程序设计_JAVA课程设计_闹钟的设计与实现项目-报告_附源代码.doc

    JAVA课程设计_闹钟的设计与实现项目-报告_附源代码 第2章 MACROBUTTON AcceptAllChangesInDoc [双击此处键入1级标题] PAGE 2 - PAGE 1 - .. ...

  2. mysql 余额表设计_余额表的设计

    原由 在开发ERP应用中,我们经常需要知道某个实体的当前数量,例如知道商品当前的库存,或者科目的金额,或者某个客户剩余的信用额度,所以这种需求是比较普遍的. 通常会设计两张表,一张是流水账表,有的称明 ...

  3. 消息聊天系统MySQL表设计_聊天系统-数据库设计

    //常用的redis命令 CONFIG SET requirepass "mypass" //Hashmap hset [key] [field] value] hget [key ...

  4. 会签 数据库表设计_数据库表设计总结

    一.实体与表对应关系 表<=>实体,字段<=>属性. 二.表与表的关系(实体间的关系):一对一.一对多.多对多 一对一:一条记录只对应其他表中的一条记录有关系 学生基本信息表t ...

  5. mysql三大范式 答案_数据库逻辑设计之三大范式通俗理解,一看就懂,书上说的太晦涩...

    一.第一范式 1NF是对属性的原子性,要求属性具有原子性,不可再分解:表:字段1. 字段2(字段2.1.字段2.2).字段3 ...... 如学生(学号,姓名,性别,出生年月日),如果认为最后一列还可 ...

  6. mysql 字段名称规范_数据库表及字段命名规范

    数据库设计表及字段命名规范(我整理的,望大家多多提建议) 1.数据库表命名规范: (1)表名前应该加上前缀,表的前缀一个用系统或模块的英文名称缩写,前缀全部大写或首字母大写,表名中包含的单词首字母大写 ...

  7. mysql表结构设计_数据库表结构设计

    1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关系:即一张原始单据对 应且只对应一个实体.在特殊情况下,它们可能是一对多或多对一的关系,即一张原始单证 ...

  8. mysql数据库物理结构设计_通俗数据库设计(4)物理结构设计

    物理结构设计简介 物理结构设计:对于给定的逻辑数据模型,选取一个最适合应用环境的物理结构. 简单解释--选择合适的数据库,并设计具体的表.字段.数据类型.索引等.确定物理结构 (1)存储结构的设计-- ...

  9. mysql查询表的列名_查看表所有列名SQL

    为方便使用,特收集如下语句并分享... 参考连接: ORACLE: 1.查询当前数据库中所有表名及表的备注(注意 表名或者视图名大写): 1) select * from user_tab_comme ...

  10. mysql数据库实验查询_数据库表的查询操作(实验二)

    [实验目的]:了解SQL语言的使用,进一步理解关系运算,巩固数据库的基础知识. [实验要求]:掌握利用Select语句进行各种查询操作:单表查询.多表连接及查询.嵌套查询.集合查询等. [实验内容] ...

最新文章

  1. linux进程间通信:消息队列实现双端通信
  2. 【反传销】春节一个短暂误入传销和脱身的真实故事以及对技术的思考
  3. 蚂蚁集团万级规模 k8s 集群 etcd 高可用建设之路
  4. rest spring_Spring REST:异常处理卷。 3
  5. BZOJ4122 : [Baltic2015]File paths
  6. java 中文路径 读取_Java读取文件时中文路径处理
  7. 17.1.1.3 Creating a User for Replication 创建一个用于用于复制:
  8. 基于SSM的企业员工管理系统
  9. ios 拍照上传到服务器_iOS 上传图片到服务器
  10. 利用ccle数据库构造分类器区分耐药与不耐药样本
  11. 后端返回的类型都有哪些 如何处理这些数据类型?
  12. Java 实现四位数的吸血鬼算法
  13. 如何从一个完全自动化的交易系统获利
  14. [RK3288][Android6.0] USB OTG模式及切换
  15. java毕设项目婚纱摄影网站(附源码)
  16. 手机图片压缩大小的方法,用什么软件压缩
  17. 【必看】论文写作入门技巧
  18. openfeign调用异常:feign.FeignException: [405] during [GET]
  19. docker启动失败问题之/var/lib/docker/overlay
  20. android 雷达坐标系,Android Path之绘制雷达图的技巧

热门文章

  1. 电力拖动计算机系统考试,电力拖动自动控制系统__考试复习题.docx
  2. 惯性导航解算程序C++实现
  3. 唐山初中计算机考试知识点,画法几何点知识点及考点.doc
  4. 《微软System Center 2012 R2私有云部署实战》——第一章 微软私有云概述1.1 大数据...
  5. Java从服务器下载文件到本地
  6. oracle学习札记46
  7. Watir的操作使用
  8. tiny6410裸机实验第0章--------------开发环境的搭建(USB转串口)
  9. ubuntu16.04安装rabbitVCS
  10. 华为MA5620、MA5626 ONU改交换机详细配置(小白级教程)