在过去几年中,我们将敏捷方法应用于数据库设计中。我们总结出一些技巧,使得当应用程序发展时,数据库也能够进化,这是敏捷方法的一个重要属性。我们的方法是通过持续集成以及自动重构,通过数据库管理人员(DBA)和应用开发人员的紧密合作。这些技巧在应用开发的各个时期都有效。
1 敏捷方法学
近年来,出现了一种新的软件开发方法学—敏捷方法学。这给数据库设计提出了一些新的、巨大的需求。这些需求的一个中心就是进化设计。在一个敏捷项目中,需要假定我们并不能事先确定系统的需求。因此在项目的初期有一个详细设计阶段的想法是不现实的。系统的设计必须随着软件的变化而进化。敏捷方法,尤其是极限编程(XP),通过一些实践使这种进化设计成为可能。在数据库设计采用敏捷方法,反复迭代。
许多人会怀疑敏捷方法能否用于有大型数据库组件的系统。但我们的确使用了许多敏捷和XP技巧,用于解决基于大型数据库的项目中的进化与迭代问题。
本文将介绍一些在数据库设计采用敏捷方法的实践。当然,这并不是说我们已经完全解决了数据库进化的问题,但是我们想提供一些行之有效的方法。
2 积极应对变化
敏捷编程的一个显著特点就是它面对变化的态度。对软件过程的一般解释是尽早理解需求,停止需求的变动,将这些需求作为设计的基础,停止设计的变动,然后开始构筑体系。这就是瀑布方法--基于计划的生命周期。
这种方法通过大量的前期工作来减少变化。一旦前期工作完成,需求变化会引起很大的问题。因此当需求变化时,这样的方法就会有很大的问题,因此需求变动是这种过程的一个很大的问题。
而敏捷编程却以另外一种方式来面对变化。拥抱变化,甚至允许在项目开发的后期发生变化。尽管变化会被控制,但是这种态度会允许尽可能多的变化。变化部分来自于项目需求的不稳定,部分来自于要支持变化的商业环境来面对竞争压力。
为了做到这样,必须采取不同的设计态度。设计不仅仅是一个阶段—-在开始建筑之前就大部分完成的一个阶段;设计是一个持续的过程,与编码、测试甚至发布相关。这是计划设计与进化设计的不同之处。敏捷方法的一个重要贡献是提出了在可控制方式下的进化设计。因此不是由于设计没有预先计划好,产生了混乱。敏捷方法提供了控制进化设计和使其可行的技巧。
敏捷方法的一个重要特点就是迭代式开发,即整个项目生命周期中运行多个完整的软件生命周期循环。敏捷过程在每次迭代中都会度过一个完整的生命周期。迭代可以完成最终产品的需求子集中编码、测试以及集成代码。敏捷方法迭代时间较短,通常是一周到两个月之间,而且我们更倾向于更短的迭代周期。
当使用敏捷方法时,最大的问题就是数据库如何进行进化设计。许多人认为数据库设计是前期计划的工作,而在后期改变数据库设计计划会引起应用软件的崩溃;在配置以后改变数据库设计计划会导致数据迁移问题。
在过去三年我们参加了一个大型的项目,其中用到了切实可行的进化设计的方法。该项目包括100人的项目组, 200多张表格,数据库在一年半的最初开发中一直在进化,甚至在为多用户分发的过程中也在进化。一开始我们一个月迭代一次,过了几个月之后变为2周迭代一次。
随着我们将这些经验推广到项目中越来越多的部分,从越来越多的案例中获得经验。同时,我们也从其他敏捷项目中吸收了一些经验。
2.1限制条件
在讲述实践方法之前,必须指出我们并没有解决所有的数据库进化设计问题,特别是:
*** 我们是为单独的应用设计一个应用数据库,而不是试图集成多个数据库;
*** 我们没有做到24*7的数据库更新。
虽然很多人认为我们无法解决这个问题,但其实这些问题是可以解决的。当然这需要进一步的工作,光说是不能解决问题的。
3 实践
我们有关于数据库进化设计的方法依赖于一些重要的实践。
3.1数据库管理人员与开发人员紧密合作
敏捷方法的一个重要原则就是拥有不同技能和背景的人能够紧密合作。正式的会议和文档不能达到交流效果,因此他们需要一直一起工作,亲密合作。所有的项目组成员都需要紧密合作:系统分析人员,项目经理,行业专家,开发人员以及数据库管理人员(DBA)
开发人员的每项工作可能都需要DBA的帮助。开发人员和DBA需要考虑是否需要对数据库计划做很大的改变。开发人员向DBA咨询如何应对变化:开发人员知道需要什么新的功能,而DBA对应用中的数据有全局的观念。
为了达到亲密合作的效果,DBA必须使自己易于接近。DBA需要留出几分钟的时间,让开发人员来提问。必须确保DBA和开发人员坐在一起,这样他们就很容易沟通。同时必须确保应用设计会议是公开的,这样DBA可以随时加入进来。在很多情况下我们发现人们在DBA和应用开发人员之间建立屏障,这些屏障必须去除,这样进化数据库设计才有可能。
3.2每个项目组成员都有自己的数据库实例
进化设计认为人们通过尝试来进行学习。在编程期间开发人员在如何实施某个特征,应用某个首选的方案之前做一些试验。数据库设计也是如此。因此,每个开发人员都有自己用来试验的实例,而不必影响其它人,这一点很重要。这样每个人都可以根据自己的需要进行试验。
许多DBA专家认为多个数据库是一种麻烦,不易于实际应用,但我们发现操作一百个左右的数据库是很容易的。当然其中很重要的是拥有便利的工具,使你像操作文件一样操作数据库。
3.3开发人员数据库经常集成到共享主数据库
尽管开发人员可以在他们自己的空间频繁试验,但是将不同的工作定期汇合也是很重要的。应用开发需要一个共享主数据库,所有的工作都汇集于此。当开发人员开始工作时他们从主数据库获取拷贝到自己的工作空间,进行操作和修改,然后将变化反馈进入主数据库。我们的规定是每个开发人员要每天提交汇合一次。
假设开发人员上午10点开始一项开发任务,这项任务的一部分是改变数据库计划。如果这种改变很简单,如增加一个字段,他就可以自己决定。通过数据字典的帮助,开发人员还必须确保他想增加的字段数据库中没有。但是如果他与DBA讨论这种可能的变化,那么工作就要简单的多。
当他准备开始时,先从主数据库中获取一份拷贝,这样就可以自由地改变数据库计划和代码。因为他使用的是自己的数据库实例,所以不会影响别人。在某个时候,如下午3点,他很清楚需要什么样的数据库变化,甚至此时他还没有完全做完他的编码工作。这时他找到DBA,告诉他想要的变化。这时DBA可以提出开发人员没有考虑到的问题。当然大多数时候都很好,DBA同意这种变化(通过一个或多个数据库重构)。DBA使变化马上发生(除非他们是破坏性的变化),这样开发人员可以继续他的工作,在任何时候提交代码,因为DBA已经将这些变化发送给主数据库。
可以将这个原则看作类似于持续集成,持续集成常用于源码管理。实际上这就是将数据库看作是另一种源代码。因为配置管理系统象控制源代码一样控制主数据库。只要我们构建成功,数据库和源代码一起被送入配置管理系统,这样我们就有两者完整和同步的版本历史。
对于源代码来说,集成中的问题被源代码控制系统处理。对于数据库来说,要做的工作稍微多一些。所有数据库的变化都需要妥善处理,如自动化数据库重构。此外DBA需要审视任何数据库变化,保证其符合整个数据库的计划。为了使这项工作做的比较平稳,在集成的过程中不应该出现大的变化--因此需要DBA与开发人员紧密合作。
我们强调经常性的小集成,因为它比非经常性的大集成容易得多。集成的复杂度会随着集成的规模呈几何级度增加。因此做许多小的变化在实践中更易于实现,当然这看上去与直觉相抵触。
原文:http://sd.csdn.net/page/0001acb5-47ff-49f2-9be7-35e313cb66fc
分享到:
相关推荐
不同的软件开发模型,如瀑布模型、增量模型、螺旋模型、敏捷开发等,会影响数据库设计的时机和方法。例如,瀑布模型强调线性顺序,数据库设计在需求分析后立即进行;而敏捷开发则提倡迭代和灵活,数据库设计可能在...
在线考试系统的数据库设计与实现是信息技术领域中的一个重要课题,它涉及到多个关键知识点,包括系统架构、数据库模型、数据存储和管理、以及系统开发流程。在这个过程中,数据库的设计是核心,它直接影响到系统的...
数据库设计包括需求分析、概念数据模型(如ER图)的建立、逻辑数据模型(如SQL表结构)的设计以及物理数据模型的选择,确保数据的一致性、完整性和安全性。 2. **关系数据库管理系统(RDBMS)**:可能使用的RDBMS有...
这份文档详细阐述了如何在SOA(Service-Oriented Architecture,面向服务架构)环境中进行数据库设计,以满足敏捷软件工程的需求。 第一章 概述 1.1 编写目的: 此文档的主要目的是为开发团队提供一个清晰的指南,...
2. 数据库设计优化:使用如ER图和ORM映射来简化数据库结构,提高查询效率。 3. 自动化工具:引入自动化测试工具(如Jenkins, Selenium)和DevOps工具(如Docker, Kubernetes)以提升效率。 4. 持续学习与改进:定期...
【敏捷开发】是一种以用户需求为中心,通过迭代和增量方式进行软件开发的方法论。它强调灵活性、协作和快速响应变化,旨在提高开发效率和客户满意度。敏捷开发的核心原则包括尽早并持续交付有价值的软件、欢迎需求...
软件工程的设计思想部分强调了软件工程在数据库设计中的重要性,介绍了面向对象和面向过程等不同的设计思想,并概述了瀑布模型、螺旋模型和敏捷开发等不同的设计方法。这些理论和方法论对于整个系统开发周期的每个...
1. 数据模型的迭代开发:传统上,数据库设计是在项目初期一次性完成的,但在敏捷模式下,设计是逐步细化的,随着业务需求的变化进行迭代。 2. TDD(测试驱动开发)与ATDD(验收测试驱动开发):这两种方法强调先...
数据库设计是核心部分,需要考虑数据的完整性、安全性以及查询性能。例如,可以设计教材表、用户表、订单表等,通过关系数据库管理系统(如MySQL或SQL Server)来实现数据的存储和管理。 在实现阶段,开发者会编写...
- 探讨了如何在项目开发过程中逐步改进数据库设计。 - 涵盖了敏捷模型驱动开发、测试驱动开发、数据库重构等内容。 - **第三部分:实用的数据导向开发技术**(Practical Data-Oriented Development Techniques) ...
在IT行业中,采购开发文档、流程以及数据库设计是构建高效企业资源规划系统(ERP)的重要组成部分,特别是对于集团型企业来说,这些元素对于实现集中采购和分销具有决定性作用。以下是对这些关键知识点的详细说明: ...
在项目开发过程中,我们需要采用敏捷开发方法,如 Scrum 或 Kanban,以迭代的方式进行开发,快速响应变化,提高开发效率。同时,版本控制工具如 Git 可帮助团队协作,管理代码变更。 文档记录是项目成功的关键,...
综上所述,设计和实现一个人事管理系统涵盖了数据库设计、SQL编程、前端开发、软件工程等多个方面,是学习和巩固计算机科学基础理论与实践技能的良好实践。在这个过程中,学生不仅能够深入理解数据管理,还能提升...
通过以上方法,我们可以实现数据库访问、UI和域逻辑的有效分离,从而在敏捷开发环境中提高软件的质量和团队的生产力。在实际项目中,不断迭代和完善这些分离策略,将有助于构建出更加健壮和灵活的系统。
数据库设计是IT领域中的核心技能之一,它直接影响到系统的性能、稳定性和可扩展性。这份“数据库设计指南-60个设计技巧”旨在提供一系列实用的建议和策略,帮助开发者和设计师优化他们的数据库架构。以下是对这些...