前言
数据库设计是⼀个“系统⼯程”,要求数据库开发⼈员: 熟悉“商业领域”的商业知识,甚⾄是该商业领域的专家。 利⽤“管理学”的知识与其他开发⼈员进⾏有效沟通。 掌握⼀些数据库设计辅助⼯具。
商业知识和沟通技能
数据库中存储的数据是“商业领域”的信息,使⽤数据库技术可以解决“商业领 域”的“商业问题”。对于数据库开发⼈员⽽⾔,商业知识和沟通技巧永远是避不开 的话题。数据库开发⼈员必须熟悉某种商业领域的商业知识,甚⾄是该商业领域的 专家,才能使⽤数据库技术解决商业问题。 设计数据库时,数据库开发⼈员经常与其他开发⼈员(包括最终⽤户)⼀起⼯作, 并且需要使⽤“管理学”的知识与其他开发⼈员进⾏有效沟通,获取所需商业信息, 从⽽解决商业问题。因此,对于数据库开发⼈员⽽⾔,沟通的技巧也不能⼩觑。 熟悉⼀种“商业领域”的商业知识需要花费⼤量的时间,很多数据库开发⼈员⽤毕⽣ 精⼒研究某个特定⾏业,从⽽成为该“商业领域”的专家,继⽽可以成功地设计 该“商业领域”的数据库。同样对于同学⽽⾔,必须了解某⼀“商业领域”的商业知 识,才能将数据库技术应⽤到该“商业领域”,解决该“商业领域”的“商业问题”,进 ⽽才能更有效地学习数据库的相关知识。
数据库设计辅助⼯具
数据库开发是软件开发过程中⼀个⾮常重要的环节,甚⾄是⼀个核⼼环节。软件开 发过程中,软件开发⼈员经常使⽤⼀些辅助⼯具提⾼软件开发的速度与质量,典型 的辅助⼯具包括模型、⼯具和技术。
1.模型
软件开发时经常使⽤到⼀些模型,模型是现实世界中事物特征与事物⾏为的抽象。 模型包括数学模型(例如数学公式)、描述模型(例如报表、列表、备忘录等)和 图形模型(例如E-R图、数据流程图DFD、类图等)。对事物的特征进⾏抽象的过程 称为数据建模。软件开发过程中通过数据建模,可以得到软件系统的E-R图或者类 图等数据模型。对事物的⾏为进⾏抽象的过程称为业务建模。软件开发过程中通过 业务建模,可以得到软件系统的程序流程图、数据流程图DFD、时序图、状态图等 业务模型。 ⼀般⽽⾔,数据库设计更侧重于数据建模,程序设计更侧重于业务建模。然⽽在真 实的软件开发环境中,数据建模与业务建模两者相辅相成,不可或缺。E-R图是关 系数据库数据建模过程中经常使⽤的数据模型。
2.⼯具
软件开发时经常使⽤到⼀些⼯具,这些⼯具为创建模型或其他组件提供了软件⽀ 持。例如在系统规划阶段[1],需求分析⼈员经常使⽤软件项⽬管理⼯具为任务分配 资源、跟踪进度以及管理预算,常⽤的软件项⽬管理⼯具是美国微软公司的 Project。在系统分析与设计阶段,需求分 析⼈员经常使⽤计算机辅助系统⼯程⼯具 (Computer Aided Software Engineering,CASE)进⾏数据建模以及业务建模, 常⽤的CASE⼯具有ERwin、PowerDesigner、Rational Rose以及Visio等。在系统实 施阶段,编程⼈员经常使⽤集成开发环境(Integrated Development Environment, 简称IDE⼯具)进⾏软件编码、编译、调试等⼯作,常⽤的IDE⼯具 有VC 6.0、Visual Studio、Eclipse以及NetBeans等。在测试阶段,测试 ⼈员经 常使⽤测试⼯具进⾏单元测试、功能测试以及性能测试,常⽤测试⼯具有 Junit单元 测试⼯具、QuickTest Professional功能测试⼯具以及LoadRunner性能测试⼯具 等。 在关系数据库数据建模时,数据库开发⼈员经常使⽤ERwin、PowerDesigner、 Visio等CASE⼯具创建E-R图,甚⾄使⽤ERwin、PowerDesigner、Visio等⼯具直接 创建数据库(例如MySQL数据库)或者直接⽣成SQL脚本⽂件(例如MySQL的SQL 脚本⽂件)。
3.技术
软件开发时使⽤的技术是⼀组⽅法,常⽤的技术包括:⾯向对象分析和设计技术、 结构化分析和设计技术、软件测试技术和关系数据库设计技术等。其中,关系数据 库设计技术决定了关系数据库设计的质量,这也是本章着重讲解的内容。关系数据 库设计技术包含E-R图绘制以及关系数据库设计两⽅⾯的内容。
例⼦“选课系统” 业务流程如下: 游客⽤户只能浏览已经审核的课程信息,不能享受“选课系统”提供的其他服 务。游客⽤户注册成为学⽣或者教师,成功登录“选课系统”后,才能享受“选课 系统”提供的其他服务。 教师成功登录“选课系统”后,可以申报选修课程,要求选修课程⾯向全校学 ⽣。 为保证教学质量,每⼀位教师只能申报⼀⻔选修课程。由于很多课程需要在教 室内完成教学,因此课程的⼈数上限受到教室座位数量的限制(共有60座位、 150座位和230座位3种教室)。教师申报选修课程时需提供课程的详细信息, 其中包括课程名、⼯号、教师姓名、⼈数上限、教师联系⽅式以及课程详细描 述等。 教师申报课程信息后,经管理员审核通过才能供学⽣选修。 学⽣成功登录“选课系统”后,才可以进⾏选课。学⽣选课时,每位学⽣可以浏 览所有已审核的课程信息,并进⾏选修。为保证学习效果,限制每位学⽣最多 选修两⻔课程。学⽣选课时需提供学号、姓名、班级名、所属院系名和联系⽅ 式等信息,由系统⾃动记录选择课程的时间。 选课结束前,学⽣可以退课、调课。 选课结束后,当某⼀⻔课程的选修⼈数少于30⼈时,为避免教师、教室资源浪 费,管理员有权删除该课程信息。某⼀⻔的课程信息删除后,选择该课程的学 ⽣需要重新选修其他课程。 管理员负责审核课程,添加班级信息(且班级名不能重复),以及维护⽤户信 息。 教师可以查看本⼈申报课程的学⽣信息列表,管理员可以查看所有申报课程的 学⽣信息列表。
定义问题域
定义问题域是数据库设计过程中重要的活动,它的⽬标是准确定义要解决的商业问 题。本例⼦中定义“选课系统”存在的诸多“商业”问题,其中包括以下内容。
如何存储以及维护课程、学⽣、教师以及班级的详细信息? 不同教师申报的课程名能否相同?如果允许课程名相同,如何区分课程? 如何控制每位教师只能申报⼀⻔选修课程? 如何控制每⻔课程的⼈数上限在(60、150、230)中取值? 如何控制每⼀⻔课程的选课学⽣总⼈数不超过该课程的⼈数上限? 如何实现学⽣选课功能、退选功能以及调课功能? 如何控制每位学⽣最多可以选修两⻔课程,且两⻔课程不能相同? 系统如何⾃动记录学⽣的选课时间? 如何统计每⼀⻔课程还可以供多少学⽣选修? 如何统计⼈数已经报满的课程? 如何统计某⼀个教师已经申报了哪些课程? 如何统计某⼀个学⽣已经选修了多少⻔课程,是哪些课程? 如何统计选修⼈数少于30⼈的所有课程信息? 如何统计选修每⼀⻔课程的所有学⽣信息? 课程信息删除后,如何保证选择该课程的学⽣可以选修其他课程? 如何通过搜索关键字检索⾃⼰感兴趣的课程信息?