大型应用项目中数据库设计模式的探研

点赞:19013 浏览:83536 近期更新时间:2024-03-24 作者:网友分享原创网站原创

[摘 要] 现在大型应用系统越来越多,这不但体现在系统的功能数量上,还体现在系统底层的数据存储数量上.本文基于作者在政府、企业项目的设计经历,提出了在大型系统中数据库设计的一些设计经验,并从这些设计经验中总结出两种数据库设计模式,从而解决了大型应用系统中统计、查询等应用性能和应用完整性的问题.


[关 键 词 ] 应用系统 数据库 数据库设计 设计模式

一、引言

现如今绝大部分的应用系统都是基于数据库的,也就是说没有数据存储的应用系统是非常少的.那么在应用系统的设计阶段,必然会涉及数据模型的概要设计和物理设计,良好的数据库设计是关系到系统能否成功运行、维护的关键之一.在当今系统越来越庞大,应用数据越来越多的今天,数据库设计的合理性和灵活性显得越来越重要,因为在任何应用中,数据是最重要的、最核心的、最有价值的,技术上可以根据需要选择不同的架构和技术,但数据不会因此改变而发生任何变化,甚至可以说数据是企业在信息世界的灵魂,例如现在的电信、金融、、劳动、民航等系统都是这种应用的典型代表.

在各种大型应用系统中,系统操作的信息主体无外乎单位和个人两类,拿个人来说,个人基本信息按照信息生命周期的可变性分为不变属性和可变属性两种,不变属性包括:公民身份(目前随着二代系统的实施,18位的公民身份理论上可以保持惟一)、姓名、性别、出生日期、民族等,可变属性包括:年龄、文化程度、政治面貌、户籍所在地、居住所在地等,大部份的数据库设计都会将个人不变属性和可变属性放在一个个人基本信息表中存储,在业务表中通过公民身份做主外键关联.

但是,这样的设计在实际应用系统中有时会存在非常大的问题.例如有如下业务场景:某人在某个时间点上做过一次业务,当时他(她)的文化程度是“大专”,在此之后又做过一次相同的业务,此时他(她)的文化程度是“本科”,当然这个业务场景存在的前提是业务逻辑是符合业务规则的.如果现在有一个按照时间范围和文化程度的统计,时间跨度覆盖此人的上述两次业务,那么,按照上面的描述应该把此人分别统计为“大专”分类1次/人,“本科”分类1次/人的统计数据,而不是2次/人的“本科”分类统计数据.这种情况如何解决呢?

二、数据库设计模式

1.规范模式设计.这种模式是在个人基本信息表的基础上设计一个变更表(见图1),记录此人历次基本信息项变更时的信息(通过“变更类型”属性区别本次变更的是个人基本信息表中的哪个属性),在个人基本信息表中保存最新的个人基本信息,业务表记录此人业务发生时的信息.这种设计完全符合数据库关系模式的规范化要求,做到了最小的数据冗余(除主外键的关联外),从而消除了数据的传递依赖,这是此模式的优点.但如果当需要针对业务表进行统计、查询时,就需要关联3个信息表,且当3个表的数据量处在较高的数量级别时(例如分别在上百万数量级),那么关联所占的临时存储空间和消耗的时间都是非常巨大的,甚至是不可忍受的.有些业务系统经常出现部分统计、查询需要几十分钟,甚至几个小时才能出现结果的情况,一般都是因为这个原因,当然部分情况可以通过建立索引或者优化索引的方式解决,但不能从根本上解决性能下降的问题.

大型应用项目中数据库设计模式的探研参考属性评定
有关论文范文主题研究: 关于数据库的论文范文数据库 大学生适用: 学院学士论文、自考毕业论文
相关参考文献下载数量: 91 写作解决问题: 如何写
毕业论文开题报告: 文献综述、论文前言 职称论文适用: 论文发表、职称评初级
所属大学生专业类别: 如何写 论文题目推荐度: 经典题目

2.冗余模式设计.这种模式是在业务表中增加必要的个人基本信息属性的冗余,即冗余列反范式技术.这种方法的设计思想就是在当业务发生时,将当时个人的业务信息和相关的个人基本信息中的状态信息记录到业务表中,形成当时时间点上个人信息的一个“快照”.例如,如果业务需要对业务信息按文化程度属性进行统计,那么就冗余文化程度属性,如果需要按年龄段(20周岁至25周岁,25周岁至30周岁等)进行统计,那么就冗余年龄属性,这样在业务信息表中除了公民身份作为外键关联外,还将冗余文化程度和年龄属性.而这些属性实际在个人基本信息表中已经存在,在业务表中又保留了它的一个“拷贝”.此模式也可以增加一个变更表记录历次变更的信息,但它的作用只限于变更情况的记录,不参与系统的统计、查询操作.

当然冗余的设计需要在需求分析过程中,对业务需求进行详细、充分的需求调研,要从业务的角度寻求对冗余的设计的业务需求支持,这决定了到底要冗余那些信息项;在系统设计过程中细致、缜密,并且具有丰富的业务和设计经验,也就是说冗余要做到有效冗余,不能为了冗余而过度冗余那些没有必要的属性.这种方法的好处是减少了数据表之间的关联,增加了业务统计、查询的效率,缺点是需要额外的冗余数据存储空间.

三、结束语

系统的建设应当是综合设计的结果,不但要考虑系统的功能要求和非功能要求,还要从统计、查询的效率,统计、分析的完整性,数据量估算、数据量增长等角度设计系统,当从这些维度考虑系统设计问题时,很多时候会对数据库设计产生重大的影响.例如当考虑:为了保证业务的完整性,需要增加变更表记录历史变更信息,为了系统统计、分析的正确性,需要在业务表中冗余必要的属性:为了统计、查询的效率,需要关联正确的数据表或者在业务表中冗余必要的属性,考虑较快的数据增长速度,而又不能通过分区解决的,可以适当考虑数据冗余.

这些因素时,必须在数据库规范化设计和数据冗余两个方面做出综合平衡,或者通过牺牲存储空间获得较高的系统性能,或者降低系统性能的要求而满足数据存储的要求.