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

首先我们来看一个小例子,来理解为什么要引入字典表和实例表? 
 
情景一:假如你在玩一个游戏,突然爆了一件十分稀有的武器,假如开发者设计的表是这样的: 
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)最后,就是减少了数据库中数据的冗余。满足第三范式的要求。 

发布评论
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

数据库设计中的命名规范知识解答
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。