湘新鄂鲁代表队——数据库设计心得
数据库设计心得
项目名称:家谱识别系统
指导老师:林红利
开发队名:湘新鄂鲁代表队
开发团队:梁原韶【PM】、郭琪、马玉梅、吕斐、窦越群
1、编写目的
对于我们团队以及团队成员来说,这是我们第一次进行数据库设计,花费了一两周的时间,经过交流讨论、设计、寻找不足、完善等一系列过程,终于完成了契合项目需求的数据库设计。俗话说万事开头难,但同时,好的开始也是成功的一半。成功的数据库设计是之后软件开发的基础,我们的第一次数据库设计也会为之后的其他数据库的设计提供宝贵的经验与深刻的教训。有鉴于此,我们在这里将数据库的设计心得记录。
2、综述
数据库设计的基本步骤分为需求分析阶段、概念结构设计阶段、逻辑结构设计阶段、数据库物理设计阶段、数据库实施阶段、数据库的运行和维护阶段。简单总结如下:
(1)需求分析阶段:需求收集和分析,得到数据字典和数据流图。
(2)概念结构设计阶段:对用户需求综合、归纳与抽象,形成概念模型,用E-R图表示。
(3)逻辑结构设计阶段:将概念结构转换为某个DBMS所支持的数据模型。
(4)数据库物理设计阶段:为逻辑数据模型选取一个最适合应用环境的物理结构。
(5)数据库实施阶段:建立数据库,编制与调试应用程序,组织数据入库,程序试运行。
(6)数据库运行和维护阶段:对数据库系统进行评价、调整与修改。
其中需求分析阶段需要我们准确了解与分析用户需求(包括数据与处理),是整个设计过程的基础,是最困难、最耗费时间的一步,我们需要在之前需求分析的基础上,进一步了解整个项目需要存储哪些实体的数据,这些数据有哪些属性,这些数据和属性的特点是什么。然后要确定实体之间的关系,也就是我们常说的一对一,一对多以及多对多。只有确定了这个关系,才能设计出一个业务逻辑上不会出错的数据库。
需求分析之后,就是概念结构的设计了,这是整个数据库设计的关键。设计过程中我们使用到的工具就是 ER 图。ER 图由矩形、菱形、椭圆形和线段组成,使我们可以将需求分析出来的实体、属性、实体间的关系由图体现出来,让人更加方便看懂理解。将 ER 图画出来后,就是使用设计范式去做更详细的设计了。
感谢前人为我们总结了设计的规范,让我们可以比较简单的做逻辑结构设计。逻辑结构设计是将概念结构设计阶段完成的概念模型,转换成能被选定的数据库管理系统支持的数据模型。这里主要将E-R模型转换为关系模型。在这里,我们主要遵循第一范式、第二范式、第三范式和BC范式。通过设计范式的指导设计,对表进行拆分或合并,可以得到一个完善且逻辑清晰的数据库设计。
在这之后,就是数据库物理设计的阶段了,我们要为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)。选择理论落脚点。第一步是选择DBMS系统及其存储引擎,这里我们使用MySQL和Innodb 存储引擎。之后就是定义数据库、表、字段的命名规范,选择合适的字段类型。
然后是数据库实施阶段,运用DBMS提供的数据语言、工具及宿主语言,根据逻辑设计和物理设计的结果,建立数据库,编制与调试应用程序,组织数据入库,并进行试运行。理论应用于实践。
最后是数据库的运行和维护阶段,在数据库系统正式投入运行的过程中,必须不断地对其进行调整与修改。
3、过程
3.1 准备
在进行设计前先明确数据库设计的具体过程,这样会使我们在设计时少走许多弯路且最终结果更加规范与完善。了解流程之后,我们又去向指导老师寻求了一些建议,林老师向我们指出了她认为必须要有的部分,这也是我们之后数据库设计的重心所在。最后我们经过讨论,进行了细致的分工,防止有人浑水摸鱼,大大提高了设计效率。
3.2 设计思路
根据需求分析与老师的指导,我们对数据库需要存储的实体有了大概的了解,之后就是需要进行逻辑及概念设计,通过ER图确定需要存储的实体,然后确定其需要的字段,之后确定实体间的联系,然后就是通过Powerdesigner确定表及字段的命名规范以及字段类型了。之后我们再拿设计好的pdm请指导老师指出不足,进一步优化。
3.3设计过程
因为本项目是家谱识别系统,所以最重要的是用户上传的家谱以及家谱经过识别、复核、结构化之后从家谱中提取到的人物信息,这也是在跟老师交流的时候老师反复强调的,这里我们通过家谱表和家谱人物表来存储这些信息。为了成功进行识别,需要进行字库管理,记录在字库表中。为了对识别、复核过程进行管理,我们需要记录未识别的家谱、已识别未开始复核的家谱、已识别未完成复核的家谱、已识别已完成复核的家谱。这些通过未识别表和识别表来记录,其中复核状态通过识别表中的状态字段来记录。此外还需要一个上传表来记录具体家谱是由哪个用户上传的。提到用户,因为该系统面向个人用户与企业用户,所以需要用户表来存储用户信息,为了使用户有更好的体验,提供存储图像的表来使得用户能够自定义头像,用户还可以对系统就功能及使用等方面进行反馈,记录在反馈日志表中。最后为了便于管理统计,添加登录日志表记录用户的登录时间。
由此我们设计出了要存储的实体、字段以及实体间的关系,具体见下方ER图:
之后就是进行数据库的物理设计了,根据设计好的ER图,物理设计就相对简单写了,不过需要注意数据类型,使其能够完整存储字段且不造成空间以及性能上的浪费。经过老师纠错,进行完善之后的具体的设计如下:
之后我们根据逻辑设计和物理设计的结果,建立数据库,编制与调试应用程序,组织数据入库,并进行试运行。
4、心得体会
1. 完善的数据库设计需要不断地探索、验证、完善,因此需要有足够的耐心。
2.数据库的设计关系到整个软件的方方面面,因此需要有系统的思维以及全面的视野,团队间的交流补充更是不可或缺。
2. 数据库设计的设计过程包括:需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库的实施和数据库的运行和维护。按照过程进行设计会更加高效、系统、完善地实现数据库的设计。
3.要多与老师沟通交流,老师所具备的知识和经验,能帮助寻找到设计中的缺漏之处,以及在我们遇到困难时指点迷津。
5.数据库的意义其实就是将系统运行时不可或缺的数据进行持久化的存储,所以通俗来讲,数据库的设计其实就是全面地寻找系统运行时需要存储的信息,对信息世界进行建模,抽象为一个个数据实体,通过字段存储实体相关信息,通过关系表现系统运行时实体间的关系,最后确定合适的数据库和存储引擎,根据知识及经验,确定合适的数据库名、表名、字段名以及字段类型,最后再根据业务需求添加相关约束。
6.团队间合理的分工、融洽的气氛以及积极的讨论也是至关重要的,良好的协作模式能够取得事半功倍的效果。
7.因为在设计数据库的时候数据库课程的知识还没有学到很多,通过这次课程设计发现这其中需要的很多知识我们没有接触过,去图书馆查书籍资料的时候发现我们前边所学到的仅仅是皮毛,还有很多需要我们掌握的东西我们根本不知道。同时也发现有很多已经学过的东西我们没有理解到位,不能灵活运用于实际,不能很好的用来解决问题,这就需要我们不断的大量的实践,通过不断的自学,不断地发现问题,思考问题,进而解决问题。在这个过程中我们将深刻理解所学知识,同时也可以学到不少很实用的东西。