zoukankan      html  css  js  c++  java
  • 字典表的维护

    问题:

    在数据库中多处使用到了字典,现在平台需要对字典进行管理,也就是现在的字典表不再是固定的,他是可以变化的,可以增加,删除,变更。

    在删除的时候就需要之前引用这个字典值的地方清空

    比如说字典里面有个字典YY_title(头衔),它里面有个(1,博士),专家表里面有三条数据引用了这一条字典记录,在专家表里面只存了一个“1”,当然这个字典可以被n个业务表引用,如果说现在的头衔里面不再使用博士这一项了,那么之前业务表里面存的“1”自然是要置空的,现在的问题是怎么通过字典找到引用他的业务表?

      

    实际场景:

        

    解决方案:

      新建关联表(中性表),关系表的结构如下图:【中间过程,有问题,正确结构图在下面】

    对关联表的操作放在业务表的处理过程中:

      (1)增加记录:在业务表新增记录的时候就新建一条关系记录,并将关系表的id存在业务表中

      (2)修改记录:在业务表中修改(添加)存放的值的时候,修改关系表中的字典的值

     应用过程出现的问题:

    (1)在我将某个标签(字典值)删除的时候,需要将引用其的业务项的该字段置空:

        UPDATE ${param1} SET ${param2} = '' WHERE id = #{param3}

    这段代码理论上是没有问题的,执行结果也对。

    但是!!!接下来在查询引用该字段的业务项的数量时发现结果竟然不是零!!代码如下

        SELECT count(id) FROM zgl_dictlink a WHERE a.dicttype= 'yy_title' and a.dictvalue= '0'

    这段代码理论上是也没有问题的,那么是什么原因导致的这个现象?

      仔细分析下,原来是数据库结构设计的有问题!有冗余。。

      既然在字典的关系表中标明了使用到的表名,字段名,实体id,又为什么要在业务表中添加字典联系表的id呢。所以说这个id是多余的。

        

    该方案的缺点:

    优化:

      (1)这可以在字典值表中新加个调用次数字段,用于统计被调用次数。(在没有使用中性表的时候这种方法对于统计调用次数是非常有效的,当然在使用了中性表后,调用次数可以直接的中性表中查询)

      (2)缓存。这个现在知识一个想法,具体实现之后再补充。。

      

  • 相关阅读:
    Flink之DataStreamAPI入门
    Spark底层原理简化版
    Spark调优
    Flink架构及其工作原理
    Kafka总结
    leetcode数学相关
    程序员的修炼之道5
    数据库连库建表
    完成了web系统
    即将完成大型web系统
  • 原文地址:https://www.cnblogs.com/excellencesy/p/9887975.html
Copyright © 2011-2022 走看看