哪个网站可以付费做淘宝推广,手机哪个网站好,织梦可以做论坛网站吗,免费wordpress模板问答类在目前的企业信息系统中#xff0c;数据库还是最佳的数据存储方式#xff0c;虽然已经有很多的书籍在指导我们进行数据库设计#xff0c;但应该那种方式是设计数据库的表结构的最好方 法、设计时应遵从什么样的原则、四个范式如何能够用一种方式达到顺畅的应用等是我一直在思…在目前的企业信息系统中数据库还是最佳的数据存储方式虽然已经有很多的书籍在指导我们进行数据库设计但应该那种方式是设计数据库的表结构的最好方 法、设计时应遵从什么样的原则、四个范式如何能够用一种方式达到顺畅的应用等是我一直在思考和总结的问题下文是我针对这几个问题根据自己的设计经历准备 总结的一篇文章的提纲欢迎大家一块进行探讨集思广益。其中提到了领域建模的概念但未作详细解释希望以后能够有时间我们针对这个命题进行深入探讨。1) 不应该针对整个系统进行数据库设计而应该根据系统架构中的组件划分针对每个组件所处理的业务进行组件单元的数据库设计不同组件间所对应的数据库表之 间的关联应尽可能减少如果不同组件间的表需要外键关联也尽量不要创建外键关联而只是记录关联表的一个主键确保组件对应的表之间的独立性为系统或表 结构的重构提供可能性。2)采用领域模型驱动的方式和自顶向下的思路进行数据库设计首先分析系统业务根据职责定义对象。对象要符合封 装的特性确保与职责相关的数据项被定义在一个对象之内这些数据项能够完整描述该职责不会出现职责描述缺失。并且一个对象有且只有一项职责如果一个 对象要负责两个或两个以上的职责应进行分拆。3)根据建立的领域模型进行数据库表的映射此时应参考数据库设计第二范式一个表中的所 有非关键字属性都依赖于整个关键字。关键字可以是一个属性也可以是多个属性的集合不论那种方式都应确保关键字能够保证唯一性。在确定关键字时应保 证关键字不会参与业务且不会出现更新异常这时最优解决方案为采用一个自增数值型属性或一个随机字符串作为表的关键字。4)由于第一点所述的领域模型驱动的方式设计数据库表结构领域模型中的每一个对象只有一项职责所以对象中的数据项不存在传递依赖所以这种思路的数据库表结构设计从一开始即满足第三范式一个表应满足第二范式且属性间不存在传递依赖。5)同样由于对象职责的单一性以及对象之间的关系反映的是业务逻辑之间的关系所以在领域模型中的对象存在主对象和从对象之分从对象是从1N 或NN的角度进一步主对象的业务逻辑所以从对象及对象关系映射为的表及表关联关系不存在删除和插入异常。6) 在映射后得出的数据库表结构中应再根据第四范式进行进一步修改确保不存在多值依赖。这时应根据反向工程的思路反馈给领域模型。如果表结构中存在多值 依赖则证明领域模型中的对象具有至少两个以上的职责应根据第一条进行设计修正。第四范式一个表如果满足BCNF不应存在多值依赖。7) 在经过分析后确认所有的表都满足二、三、四范式的情况下表和表之间的关联尽量采用弱关联以便于对表字段和表结构的调整和重构。并且我认为数据库中的表 是用来持久化一个对象实例在特定时间及特定条件下的状态的只是一个存储介质所以表和表之间也不应用强关联来表述业务数据间的一致性这一职责应 由系统的逻辑层来保证这种方式也确保了系统对于不正确数据脏数据的兼容性。当然从整个系统的角度来说我们还是要尽最大努力确保系统不会产生脏数 据单从另一个角度来说脏数据的产生在一定程度上也是不可避免的我们也要保证系统对这种情况的容错性。这是一个折中的方案。8)应针 对所有表的主键和外键建立索引有针对性的针对一些大数据量和常用检索方式建立组合属性的索引提高检索效率。虽然建立索引会消耗部分系统资源但比 较起在检索时搜索整张表中的数据尤其时表中的数据量较大时所带来的性能影响以及无索引时的排序操作所带来的性能影响这种方式仍然是值得提倡的。9) 尽量少采用存储过程目前已经有很多技术可以替代存储过程的功能如“对象/关系映射”等将数据一致性的保证放在数据库中无论对于版本控制、开发和部 署、以及数据库的迁移都会带来很大的影响。但不可否认存储过程具有性能上的优势所以当系统可使用的硬件不会得到提升而性能又是非常重要的质量属性 时可经过平衡考虑选用存储过程。10)当处理表间的关联约束所付出的代价常常是使用性上的代价超过了保证不会出现修改、删除、更改 异常所付出的代价并且数据冗余也不是主要的问题时表设计可以不符合四个范式。四个范式确保了不会出现异常但也可能由此导致过于纯洁的设计使得表结 构难于使用所以在设计时需要进行综合判断但首先确保符合四个范式然后再进行精化修正是刚刚进入数据库设计领域时可以采用的最好办法。11)设计出的表要具有较好的使用性主要体现在查询时是否需要关联多张表且还需使用复杂的SQL技巧。12)设计出的表要尽可能减少数据冗余确保数据的准确性有效的控制冗余有助于提高数据库的性能。转载于:https://www.cnblogs.com/xieon1986/archive/2012/10/23/2736021.html