数据库设计心得-五仁队

 

项目名称:博物馆多媒体互动系统

 

团队:五仁队——软件1901

 

指导老师:李珩

 

成员:叩雅茹、罗湘然、蒋雨可、田佳禾、张博锐

 

PM:张博锐

撰稿人:叩雅茹

 

综述

我们组的项目是“博物馆多媒体互动系统”,为了实现系统和观众通过微信小程序实时答题互动的功能,系统架构分为云后台,前端展示客户端(投影大屏幕)以及手机微信小程序三大模块组成。三大模块通过数据作为中间媒介,对数据库中的数据共享访问,从而达到三个模块信息同步的效果。

 

java 博物馆管理系统 博物馆建立数据库_外键

 

 

设计过程

由于数据库的课程正在进行中,我们的数据库的设计不算特别成熟,在实践中学习,在学习中实践。

一、准备工作

工具

我们使用powerdesigner来进行数据库设计,这是一款十分好用的数据库设计软件。通过这个软件,我们可以直接画出数据库的E-R图来作为概念数据模型,还可以通过概念数据模型直接生成物理数据模型、数据库生成语句以及数据字典,这极大的简化了数据库的设计。

需求分析

之前已经有了最终的需求文档,需求文档中也描述了web管理端、小程序端、客户端的功能需求,根据这些功能需求,可以初步提炼出数据的需求,我们首先研读了需求文档,初步从中提取了数据库的数据需求。

完整性约束

数据的设计首先需要满足完整性约束规则。比如主键、外键的设计,除此之外,必须搞清楚字段的数据类型,比如,用户名密码之类的设计成varchar就比较好,既能满足要求,还可以减少数据库的存储空间。其次,对于字段类型是否可以为空也要进行考虑。除此之外,对于一些只靠字段类型不可以满足要求的,在powerdesigner可以设置指定的约束。

二、数据库设计

我们从用例图提取数据的效率感觉不是很高,所以采用的方式是从原型的设计出发,分为小程序、web、客户端三个方面,从这三个方面的原型分析出需要哪些数据,然后进行数据库的设计。从web管理端出发,分析每一个页面所需要的数据,比如登录注册界面,对应数据库中需要管理员的账号,手机号,密码,邀请码等数据;对于管理员的个人信息设置界面,对应数据库中需要管理员的姓名,所在博物馆,工号,联系方式等数据……然后要考虑功能方面的数据考虑,比如管理员的权限不同,开放的页面不同,所以可以在数据库中增加管理员的权限数据,从而更容易控制不同管理员访问不同的界面,最后再考虑细节管理。

实现过程

通过之前的需求分析,和数据库的设计分析,我们使用PowerDesigner开始创建实体,根据不同的模块的需求和功能分析,使用powerdesinger工具创建实体,分析实体与实体之间的联系,确定关系类型:一对一、一对多或者多对多。由概念模型生成物理模型,修改部分字段类型,利用powerdesinger生成sql语句以及数据字典。

 

java 博物馆管理系统 博物馆建立数据库_外键_02

 

 

创建概念模型CDM:

1. 我们首先确定数据库需要的所有实体,商讨实体所具有的字段,确定字段的数据类型。

2. 根据实际的需求,确定实体之间的关系。比如管理员实体和项目实体之间是多对多关系,管理员可以管理多个项目,一个项目也可以被多个管理员管理,项目和用户之间是多对多关系,一个项目可以被多个用户体验。

生成物理模型PDM:

1. 概念模型设计完成之后,利用powerdesinger可直接生成物理模型。

2. 生成的PDM中的外键自动生成的,但是如果需要外键同时作为本表中的主键,需要手动设置。(关于联合主键的设置)

生成数据字典:

可以设置数据字典的模板生成我们所需要的数据字典的格式。

生成SQL文件:

1. 每个PDM中属性栏中可以找到SQL代码,这是生成表的SQL语句

2. 直接使用物理模型导出SQL文件,便于我们之后在Navicat数据库管理工具中在远程服务器上创建数据库。

在实现设计的过程中,我们也遇到了一些问题:

1. 创建PDM之后会出现多余的字段

这个问题是由于PDM会自动生成外键造成的,我们在设计CDM过程中不用把外键的字段考虑进去,我们只需要考虑本实体所需要的字段信息,在创建实体和实体之间关系之后,实体之间的外键会自动生成。如果我们在CDM中设置了本应该是外键的字段,在生成PDM的过程中会产生多余的字段。

2、设置作为外键的同时也作为主键

在CDM中是不会开放外键的选项的,所以外键的生成必须在PDM中,而且如果想要外键同时作为主键,需要在PDM中手动修改(也学习到设置依赖关系,也可以做到外键同时作为主键)。

最终的ER图如下图所示:

 

java 博物馆管理系统 博物馆建立数据库_数据_03

 

 

 

心得体会

 

  本次数据库的设计是一个循序渐进的过程,从初步的设计不断迭代更新完善数据库的信息,第一次完整的做数据库的开发,首先是PowerDesigner的使用,通过的这次的设计也变得更加灵活;其次是数据的分析,起初无从下手,不知道从哪些方面去分析需要哪些数据,也并不知道如何把数据归纳;但是我们不断地摸索,也不断地向老师同学们寻求帮助,老师和同学都提供了自己的建议;比如,哪些信息需要在一个表中显示,不必要分开成两个表;哪些信息需要分开显示,合成一张表不合理且查询效率低。通过全程参与从概念设计到逻辑设计再到物理设计的整个过程,慢慢地掌握了数据库设计的流程和步骤。通过做中学,逐渐学习并完成设计,并解决数据库设计中遇到的问题,不断提高了自己对数据库设计的认识和理解,也提高了小组团队合作的能力。

  这个过程中,我们体会到,设计数据库首先要对整个项目的内容有准确的认识和了解,我们一开始感觉到无从下手,而且表数达不到要求,在和老师的会议上我们探讨了数据库设计方面的内容,老师给出了建议,当时老师的建议就囊括了十张表以上。这也让我们意识到目前的数据库设计还没有完全达到要求;所以后面我们又经过一次次的协商,将数据库扩充,并考虑到功能的需求。同时,在和老师的商讨的过程中,老师也着重讲了一些冗余数据,冗余表的存在,也需要取出这部分数据,以免给数据库造成不必要的负担。

  通过本次的数据库设计,我们意识到数据库的设计十分之重要,关系着最后实现的项目的效率,同时也关系着后序开发阶段是否能够顺利进行,我们需要认真对待数据库开发,综合全面考虑需求,征求多方意见,不断完善补充和优化,最终得到满足大家的项目。