http://blog.csdn.net/chenhuoren/article/details/4941131
搞数据库,从毕业出来工作到现在也有好几年了,总的来说,自己对数据库的架构设计算不上很精通,但还是把自己在设计中的经验说说吧,希望对大家今后的设计有帮助。
我个人认为,在数据库的架构中,需要注意以下的几个问题。
一:数据库名称命名要简洁,并体现其应用或功能。如库名QCOA,QC为公司简称,OA为OA系统中的主数据库;为了防止被分析破解,表名建议采用子系统简写+功能单词首字母,如审批管理子系统中:OAMD,该表的字段名为MD001,MD002......MD022并预留五到十字段供扩展,对常用表还应定义十个以上的自定义字段,供客户自定制,自定义字段统一命名UDF01...UD99。表和字段都应该在数据字典作标准,实际开发时,用向导从数据字典生成具体应用数据绑定窗口和控件,不过,这样设计的数据库,在交付用户使用的时侯需要同时交付数据库说明文档,方便客户的数据库管理。
二:嵌套关系的数据表,一定要在数据字典中注明,并备注好关键字段。注意这里嵌套并不一定是主从表。如ERP系统中的工单表,一个成品对应一张工单,该成品由N个半成品制成,又是N张工单,N个半成品可能又可细分若干层的半成品。一般就由单头单身表二个表表示这样的数据,也可用一张表。
三:数据字典的设计,表和视图都必须记录在字典中;其对应的触发器和存储过程也必须备注中对应的表中;表、视图必须按模块分类管理。
四:严格控制存储过程的使用,这是血泪教训呀,我们公司的HR有600多个存储过程,三四个人二三批维护修正了十个月都没完全搞定。这就是开发时的随意和图修改方便造成的恶果,那个别人开发的HR在我看来是垃圾,我都不碰那个东西。建议,除非大数据量的处理,则不用存储过程!业务逻辑封装到程序业务类中,或将SQL语句放在配置文件或数据库中,动态装入执行。
五:表单设置,即实际应用时某些有单号(流水号)的表,如订单表,其单号由单据性质和流水号组成。建议:建一个单据设置表,统一保存这些表的表单设置和最大单号,也方便用户进行单号的设置,以及单号的生成(可以据设置表中保存的设置和最大单号值,用存储过程无冲突生成最大单号)。我的数据库表一般都这样设计的,但现在看网上说,好像对这种方法不认可,主要在于这样设计的数据库关系繁多,没有使用存储过程来得方便。这里就看自己的需要吧,我的建议还是用我的办法,因为这样的话,程序的改动不会带来数据库大的变动。
六:在数据库设计中,并不是关系越多越好,而应该是在适度的范围内,这需要经验的积累,再这里一两句也说不清楚。模块与模块之间的数据交接,应该最多只有一个关系的存在。
七:不要轻易的允许某些字段为空,所有允许为空的字段必须是基于用户需求,而不是出于设计上方便的考虑。这样带来的好处是让详细设计中的某些错误和疏漏(如在设计中没有考虑对非空字段的内容检查)在编码和单元测试阶段就被发现,从而避免了进一步扩散,有助于提高软件的质量。
有评论曰:严重不同意你的第四条。看来你没在大型公司做过数据库