posts - 297,  comments - 1618,  trackbacks - 0

设计之路:数据库设计的心得(一)

/阿蜜果

日期:/2013-4-17

1、定义命名规范——没有规矩不成方圆

         在数据库设计之初,为了管理和维护方便,事先定义索引、触发器、视图、外键、字段名、表名等的命名规范。没有规矩就不成方圆。

2、字段适当冗余——提供处理速度

设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。

目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴德斯科范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。

第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号、部门名称、部门简介等信息。那么在员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。

但往往在进行数据库设计的时候,为了提高处理速度提倡适当冗余。只有低级冗余才会增加数据的不一致性,因为同一数据,可能从不同时间、地点、角色上多次录入。因此,我们提倡高级冗余(派生性冗余),反对低级冗余(重复性冗余)。

例如某个表中有“总结算金额”、“SI比率”、“运营商比率”字段,为了提高处理速度可适当冗余加入“SI结算总金额”和“运营商结算金额”字段。

又如“考核信息表”中会有某次考核的“总分”、“考核日期”字段,在具体的各个考核指标打分表“考核数据表”中加入“考核日期”字段。

设计人员需要在数据冗余和处理速度中找到适当的平衡点。

3、主键取值——自增主键 or UUID

         主键是供程序员使用的表间连接工具,一般可采用自增主键、UUID等,不建议将具有物理意义的字段或字段组合作为主键。例如将登录名作为主键等。如果需要多个字段作为联合主键,建议采用无意义的代理字段作为主键。联合主键的字段个数太多时不但索引空间大,而且速度慢。

4、基本表提供CODE字段

         当系统与多个外围系统有关系,而且需要保持唯一字段保持一致时。建议采用CODE(编号)字段与其它系统建立关系,ID字段可以是UUIDCODE字段可以系统自己定义规则。可能对于独立的系统加上CODE字段有点多余,但对于与外围关系复杂的系统,你会认识到必要性。

5、分解多对多关系——使用关联表

         分解多对多关系的办法就是添加中间表,例如在基于角色的权限分配的物理模型中,“角色表”和“权限表”中间添加“角色权限关联表”,“用户表”和“角色表”间添加“用户角色关联表”。关联表与两个主表建立外键关系。这是基本的数据库设计方法,不一一赘述。

6、举一反三,触类旁通

         系统资源这一块的设计需要“资源类型表”(例如虚拟机)、“资源类型参数表”(例如CPU、内存、硬盘、IP地址等参数)、“资源清单表”(具体的虚拟机)、“资源参数值表”(资源清单记录的CPU、内存、硬盘、IP地址等参数的具体值)。

         类似这种设计可以用在很多地方,例如薪酬通的工资条模板针对不同公司有不同的模板,有可能同一个公司也有不同的工资模板。可以有“工资模板表”、“工资模板项表”、“工资数据表”、“工资模板项值表”。

         待续。

7、参考文档

数据库范式_百度百科》:http://baike.baidu.com/view/402020.htm

3NF_百度百科》:http://baike.baidu.com/view/726437.htm

数据库设计的一点心得和体验》:http://www.nowamagic.net/librarys/veda/detail/642

                                                                                                                                                

posted on 2013-04-17 17:17 阿蜜果 阅读(3173) 评论(0)  编辑  收藏 所属分类: 架构师之路

只有注册用户登录后才能发表评论。


网站导航:
 
<2013年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

      生活将我们磨圆,是为了让我们滚得更远——“圆”来如此。
      我的作品:
      玩转Axure RP  (2015年12月出版)
      

      Power Designer系统分析与建模实战  (2015年7月出版)
      
     Struts2+Hibernate3+Spring2   (2010年5月出版)
     

留言簿(255)

随笔分类

随笔档案

文章分类

相册

关注blog

积分与排名

  • 积分 - 2170297
  • 排名 - 3

最新评论

阅读排行榜

评论排行榜