日期:2014-05-16 浏览次数:20453 次
在大致了解需求之后,就非常急切编码,而不是拿出一段时间来思考数据库的设计,这种做法是非常不专业的,也是我们应该避免的。数据库是我们软件大楼的根基,我们一定要重视起来,因为如果不重视,会出现很多诸如输出数据错误、性能差和难于后期维护等问题。
所以数据库设计很重要。
那么如何设计出来一个好的数据库呢?
这是一个不太好回答的问题,其实设计出好的数据库这个问题本身就是一个相对的概念,没有绝对好也没有绝对不好。这个要看具体情况,而且这个问题也是一个循序渐进的过程。
但是这个问题还是有一个设计根基,也就是我们的数据库设计三范式,三范式很明白了告诉我们如何设计出来一个设计良好的数据库(这里的设计良好代表着:在某种程度上减少冗余,保持数据一致性等)。我们在三范式的根基上,考虑相关业务应用的特殊性,来设计我们的数据库才有可能设计出来一个好的数据库。
因为三范式在有些时候也是相对的,因为我们在什么时候把“河北省廊坊市”拆成两个字段存储,还是把“河北省廊坊市”当作一个字段存储的情况都会发生,要是按照三范式可能我们就要选择第一种了。所以三范式不是万能的法宝,还是要看相关业务。
这也就是我们所说的世界上没有绝对的,唯独只有变才是不变的道理。
在数据库设计的范畴中,有两个概念即OLAP和OLTP。一个是联机分析处理,一个是联机事务处理。联机分析强调的是数据查询和整合分析,数据修改较少,而联机事务则强调数据修改较多,对数据一致性要求较高。这就对应着两个系统,一个系统对查询的性能要求很高,方便数据的可移植,一个系统对数据完整性和一致性要求较高。因此我们在做系统设计时必须搞清楚系统的特性,如果是查询性能高而且数据结构的修改较多,那么在数据库的设计时就不能完全遵循三范式,因为这样数据库会有一定的自检策略而且比较消耗性能,相反则更能很好的保证数据的正确性。【摘自:《灵活运用数据库主外键》】
也就是我们要在对理解业务的时候,要更加深入的分析系统是什么类型的,是强调查询的还是强调增删改的。针对不同的类型建立不同类型的数据库。适合才是最正确的,也是设计最好的。
还有,我们在设计数据库中有时候是非常需要考虑扩展性的,而我们在软件开发的时候会发现范式考虑扩展性问题的时候,肯定会带来冗余。这也是典型的鱼和熊掌不能兼得的问题。当我们有两个表结构有关系的时候,我们会选择主外键来维护这种关系;还是用一张第三张表结构来维护这种关系,就是这样一种问题。前者效率好,便于维护,但是扩展性上有些问题;后者冗余度大,难于维护,扩展性好。这个时候还是要看具体应用来说话,如果我们的应用对扩展性要求非常高的话,我们就要考虑一下后者,如果我们的应用对效率要求特别高的话,我们就要选择前者。这是一个选择问题,面对什么的情况选择合适自己的才是最正确的。
关于数据库的如何设计,这是一个需要反复推敲的问题,需要我们不断的在设计,不断的在修改,不断的重新思考和反思的一个问题。没有什么人一开始就能够设计出来非常合适的数据库的,所以在这个问题上需要经验,经验从何而来?就是在不断的去做,不断的去改,循环中得到的。