数据库设计
第一节:为什么需要规范的数据库设计
大多数开发人员开发复杂度不高项目时,都是根据业务需求,直接创建数据库,创建表和插入测试数据,然后再查下数据,为什么需要强调先设计再创建数据库,创建表呢?原因非常简单,正如修造建筑物一样,如果盖一间茅屋或一间简易平房,您会花钱请人设计房屋图纸吗?毫无疑问,没人请,但是如果是房地产开发商开发一个楼盘,修建多栋楼的小区,他会请人设计施工图纸吗?答案是肯定的,不但开发商会考虑设计施工图纸,甚至很多专业的购房者也会在看房时要求开发商出示设计图纸。
同样道理,在实际的项目开发中,如果系统的数据存储量较大,设计的表比较多。表和表之间的关系比较复杂,我们就需要首先考虑规范的数据库设计,然后再进行具体的创建库。创建表的工作,不管是创建动态网站,还是创建桌面窗口应用程序,数据库设计的重要性都不言而喻,如果设计不当,会存在数据操作异常,修改复杂,数据冗余等问题,程序性能会受到影响,通过进行规范化的数据库设计,可以消除不必要的数据冗余,获得合理的数据库设计,提高项目的应用性能。
1.1 什么是数据库设计
数据库设计就是将数据库中中数据实体以及这些数据实体之间关系进行规划和结构化的过程。
如图所示为一个数据库的结构,该数据库包含学生及其成绩信息,图中还显示了Student(学生)、Gade(年级)、Course(课程)以及Result(成绩)这四个数据实体之间的关系。
1.2 数据库设计重要性
数据库中创建的数据实体的种类,以及在数据实体之间建立的复杂关系是决定数据库系统效率的重要因素。
槽糕的数据库设计表现在两个方面
- 效率低下
- 更新和检索数据时会出现许多问题
良好的数据库设计表现在以下几方面
- 效率高
- 便于进一步扩展
- 使得应用程序的开发变得更容易
第二节 设计数据库步骤
开发一个项目需要经过需求分析,概要设计,(详细设计),代码编写,运行测试和上线维护几个阶段,下面重点讨论在各个阶段中数据库的设计过程。
需求分析阶段:根据项目功能需求,分析客户的业务和数据实体。
概要设计阶段:绘制数据库的ER模型图,用于在项目团队内部、设计人员和客户之间进行沟通,确认需求信息的正确性和完整性。
详细设计阶段:将ER图转换为多张表,进行逻辑设计,确认各表的主外键并应用数据库设计的三大范式进行审核,经项目组开会讨论确定后,还需根据项目的技术实现团队开发能力以及项目的经费来源,选择具体的数据库(如MySQL成 Oracle等)进行物理实现。包括创建库和创建表,存储过程等,创建完毕后,开始进入代码编写阶段,开发前后端应用程序。
现在,我们共同讨论在需求分析阶段,后台数据库的设计步骤。
需求分析阶段的重点是调查,收集并分析客户业务的数据需求,处理需求,安全性与完整性需求常用的需求调研方法有在客户的公司跟班实习,组织召开调查会,邀请专人介绍,设计调查表.并请用户填写和查阅与业务相关数据记录等。
常用的需求分析方法有调查客户的公司组织情况,各部门的业务需求情况,协助客户分析系统的各种业务需求和确定新系统的边界。
无论数据库的大小和复杂程度如何,在进行数据库的系统分析时,可以参考下列基本步骤
- (1) 收集信息(根据需求说明书)
- (2) 标识实体
- (3) 标识每个实体需要存储的详细信息
- (4) 标识实体之间的关系
2.1 收集信息
创建数据库之前,必须充分理解数据库需要完成的任务和功能。简单地说,就是需要了解数据库需要存储哪些信息(数据),实现哪些功能,以酒店管理系统为例.我们需要了解酒店管理系统的具体功能,以及在后台数据库中保存的数据。
酒店为客人休息准备充足数量的客房,后台数据库需要存放每间客房的信息,如房间号,房间类型,价格等。
旅客在酒店入住要办理入住手续,后台数据库需要存放客人的相关信息,如客人姓名房间号等。
2.2 标识实体
在收集需求信息后,必须标识数据库要管理的关键对象或实体,我们曾经学习过对象的概念,实体可以是有形的事物如人或产品:也可以是无形的事物,如商业交易,公司部门或贷款周期,在系统中标识这些实体以后,与它们相关的实体就会条理清楚,以酒店管理系统为例,我们需要标识出系统中的主要实体。
客房:包括单人间、标准间、三人间、豪华间、总统套房。
客人:入住酒店旅客的个人信息
数据库中的每个不同的