zoukankan      html  css  js  c++  java
  • 关于字典表与实例表的思考

    为什么要引入字典表和实例表

    首先我们来看一个小例子,来理解为什么要引入字典表和实例表?
    
    情景一:假如你在玩一个游戏,突然爆了一件十分稀有的武器,假如开发者设计的表是这样的:
    table inst_equip(
      id,
      userId,
      装备名称,
      装备图片,
      装备属性,
      ...
    );
    这样看起来不会有什么问题,只需要在inst_equip表中加入一条记录就好。接着我们来看下一个情景。
    
    情景二:如果这件装备突然被系统赠送给10000名玩家,那么问题就来了...
    数据库的inst_equip表在添加记录时需要将这件装备的信息重复添加10000次。
    然而这并不是致命的,如果系统觉得这件装备太bug了,要修改它的某个字段,那么这10000条inst_equip表的记录每条都要进行同样的修改...
    

    解决方案

    于是游戏开发者决定将装备的信息从equip表中抽离出来,建立
    table dict_equip(
        id,
        装备名称,
        装备图片,
        装备属性,
        ...
    );
    这样的话,inst_equip表就变成了这样:
    table inst_equip(
        id,
        userId,
        equipId,       //游戏字典表的ID
        ...
    );
    

    好处

    这样的话,如果需要对装备属性进行修改的话,就只需要对dict_equip记录的一条记录进行修改。有点像JAVA中的组合。
    

    什么是字典表和实例表

    说了这么多,那么什么是字典表和实例表呢?
    
    字典表:简单来说就是用户的各种操作不会对其记录产生影响(增删改),它存放一些与用户不相关的信息。如:dict_equip(装备字典表)
    
    实例表:反之,实例表则是与用户的信息息息相关的一些信息。如:(inst_equip)玩家装备实例表
    

    思考

    这样分表有什么好处呢?
    (1)首先,逻辑上看着更加清晰,因为系统是为用户服务的,所以建表分成与用户相关的表(实例表),与用户不相关的表(字典表);
    (2)其次,就是上面说到的便于字典表数据的维护(增删改操作);
    (3)再者,查询数字的效率要比查询字符串高,且存储空间更小(字符串重复的存储会造成空间的浪费);
    (3)最后,就是减少了数据库中数据的冗余。满足第三范式的要求。
    
  • 相关阅读:
    关于带权并查集
    Connections in Galaxy War ZOJ
    Supermarket POJ
    并查集判树 poj 1308
    最长异或值路径【字典树应用】
    最大异或对
    trie字典树【模板题】
    UVA536 二叉树重建 Tree Recovery
    UVA1584环状序列 Circular Sequence
    【CodeForces 622F】The Sum of the k-th Powers
  • 原文地址:https://www.cnblogs.com/jpfss/p/10418958.html
Copyright © 2011-2022 走看看