关于字典表与实例表的思考

来源:互联网 发布:购买域名的网站 编辑:程序博客网 时间:2024/06/14 03:15

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

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