database design

一.为什么要设计数据库?
任何软件都是接受到客户的请求后对数据进行一系列操作,完后将结果返给客户。由于后台需要对大量的数据进行存储,修改,查询和完善等操作,因此事先的数据库设计是整个项目过程的关键步骤。一份优秀的数据库设计,有以下几个方面的好处:
1. 节省数据的存储空间;
2. 保证数据的完整性;
3. 方便进行数据库应用系统的开发。
二.如何设计数据库?
1.在设计数据库之前,应该收集信息,标识对象,标识每个对象的属性,标识对象之间的关系。
2.设置关系模式。应该满足以下规范
   ①第一范式(1NF),即关系R的每个属性值都是不可分的原子值,排斥了属性为元祖,数组或是某种复合数据的可能性;
   ②第二范式(2NF),即关系R(U),且其每个非主属性完全依赖于关键字;
   ③第三范式(3NF),即关系模式R(U)的每个非主属性都不部分依赖也不传递依赖于关键字。
   关系模式建立时除了要满足以上几个范式,还应该考虑操作的简便性与操作性。
比如在一个表中进行查询的速度远比对两个或多个表进行查询,所以找出重复次数最多的操作,尽量减小其复杂度,从而提高整体的优越性。
4. 画E-R图以及数据字典。
三.以上是我在数据库设计中所学到的技术知识,其实在过去的几天中,学习技术方面的东西发费的时间远不及学习技术之外的东西。
    1.不再是独自工作。我们有一个团队(有leader,商业成员和技术牛人),详细的分工以及及时的交流沟通,分布式实现软件的各个模块功能,最终会在最短的时间,发费最小的精力完成整个项目。
    2.将知识运用于实践,并从实践中升华知识。很早以前就已经学习过数据库设计,但是纯粹的理论知识与现实在很大程度上是截然不同的,实践的时候不仅仅要考虑知识理论,还应优先该考虑需求。
①数据库的冗余是不是应该不能有,这也是不一定的,有的时候一定的数据冗余还能提高查询的速度;
②属性的可用性有多高,这也是该考虑的问题。比如我在设计实现限量这个属性的时候,我是应该赋给它初始值,还是用户每运行一次就将这个值减小一次。我当时是选择了前一方法,但是当考虑到是否可以运行的条件后,我果断选择后面的方法。因为前面的方法,我在判断的时候,得累计之前运行的次数,并与初始值进行比较,而后面的方法,我只要判断该值有没有减小到0即可。所以不同的思维可能就会有更优的后果。
在实践之后,我觉得我更懂范式,其实范式也就是那么一回事,在以后设计完数据库后,我想我就不用按照范式去检查我的关系模式了,因为我在设计时,无形中就遵循了那些个规则。
    3.考虑到数据库的可实现性。在数据库设计中,应该考虑到技术人员能否对其中的数据进行操作,对于不能进行操作的数据,应该进行重新设计或是删除。
    4.重要属性不要设置为主关键字。
  最后。奋斗吧,少年!!!

猜你喜欢

转载自563132571-qq-com.iteye.com/blog/1768785