目录
背景介绍
需求分析
外部接口需求
系统功能需求
用户需求
性能需求
安全性需求
可行性分析
技术可行性
应用可行性
经济可行性
概念设计
局部E-R图设计
门票信息局部E-R图
游乐项目信息局部E-R图(以此为例)
...
局部E-R图联系图
全局E-R图设计
逻辑结构设计
逻辑结构概述
关系模型设计
游乐项目信息
数据库表结构设计
游乐项目信息表
物理设计
物理设计概述
事务数据访问特性
数据库的查询事务
数据库的更新事务
数据库索引设计
小结
坐标上海黄渡某末流985,大三上学期结束了数据库的课程之后(以学习Oracle的数据库基本操作和数据库基础知识为主),在大三下学期开始了数据库课程设计这门课程。我们是在大三上学期已经完成了数据库课程设计的选题和基本的物理设计,在这学期主要是对上学期的目标进行一个实现。所以就有了这个前端基于Java Swing,后端基于MYSQL的迪士尼票务与信息管理系统。课程结束之后,我把功能展示的录屏传到了B站:
数据库课程设计:迪士尼票务与信息管理系统
感兴趣的可以去观看~(最好三连)
完整项目下载链接:迪士尼票务与信息管理系统
下面我就根据我设计并实现整个数据库的完整流程分成大致三篇博客进行一个讲解:
任何系统的开发初期,我们都需要明确自己的开发目的,也就是我们要完成什么样的需求。下面是我把迪士尼票务与信息管理系统简化之后得到的部分需求。
用户通过Java桌面程序使用本系统。需要有良好的图形界面。前端采用Java Swing进行编写,后端采用MYSQL进行编写。
这部分可以自行查阅参考其他数据库项目的安全要求。
核心功能主要围绕票务管理方面,编程工作量适中,总体大致设想为五个界面,包括登录界面、入园之后的功能管理界面、订票界面、查看信息界面和管理员的管理界面。当然,在核心功能的基础上,可以进行各种功能扩展,如预定园内某餐厅位置,进行线上快速通行证交换,线上退票等等功能。
前端拟采用Java Swing编写UI界面,这个部分我之前没有进行过系统的学习,但是已经找到了相关的学习资料并开始了进行相关的学习,我相信我能够顺利地完成前端的开发。
后端拟采用MySQL进行数据库的开发,主要涉及用户信息表、园区内游玩项目信息表、乐园内餐厅信息表、管理员信息表和票务信息表的建立和维护。结合我们数据库课上学习的内容应该可以顺利完成。
综上,我认为我的编程能力可以完成这样的项目。
这部分可结合迪士尼的发展背景进行描述。
主要针对开发软件是否收费,是否需要云服务器,是否有额外的经济费用支出等进行描述。
在前一节中,我们已经把客观世界中的数据需求用E-R图形式的概念模型表示 了出来。为了进一步完成从抽象数据模型到数据库的转换,还需要进行逻辑结构设 计,把一个符合E-R模型转换为关系模式的集合,并设计相应的表结构。这一个阶 段的设计可以建立在概念设计的基础上,但是需要做许多变化,以达到满足数据库 设计的范式要求,尽可能地去冗余并防止数据不完整。如果能够考虑将来可能的需 求和可能的数据库的变化,那就更妙了。
将E-R设计转换为关系设计,需要完成强实体集、弱实体集、联系集的表示。 在这个过程中,一些关系可能被合并导致属性数量的变化,一些模式可能因为冗余 需要被删除,还会有因为多值属性而要生成新的关系的情况。有一些转换是没有范式的,有很多种选择都是行得通的。如使用实体集还是属性、使用实体集还是联系 集、二元集还是n元集等等。这些问题在本次的设计中都由遇到过,具体需要怎么 处理则需要结合经验与实际情况。
进行逻辑设计的步骤为:
① 将概念模型中的每一个对象转换为关系模式
② 进一步转换为网状、层次模型,并向特定DBMS支持下的数据模型转换
③ 进行关系模式的合并和调整
以游乐项目信息为例。
得到的关系模型为:
游乐项目信息(游乐项目编号,开放时间,当前排队人数,预期游玩时长,项目简介,项目评价)
以游乐项目信息表为例。
游乐项目信息表用来存储每个游乐项目的相关信息,因为游乐项目是迪士尼的最重要的部分,所以对游乐项目的信息设定最为详细,具体的表结构如下所示:
虽然数据库系统提供了数据的高层视图,但最终数据必须以比特的形式存储 在一个或多个存储设备上,数据库在物理设备上的存储结构与存取方法称为数据 库的物理结构,它依赖选定的数据库管理系统,为一个给定的逻辑数据模型选取 一个最适合应用环境的物理结构的过程,就是数据库的物理设计。
进行物理设计的基本步骤为:
① 数据库逻辑模式调整
② 文件组织与存取设计
③ 数据分布设计
④ 安全模式设计
⑤ 确定系统配置
⑥ 物理模式评估
(这部分主要是对数据库的增删改查功能做一个相对详细的描述)
以游客查询游乐项目信息为例。
【事务内容】游客在浏览项目信息的时候,可以查看项目的具体信息。需要访问Amusement_period、Amusement_queue、Amusement_time、Amusement_info、Amusement_comment。连接的属性为Amusement_id即项目的编号,则可以查询到游乐项目的开放时间、排队人数、预期游玩时长、项目简介和项目评价。只有具有管理员权限的用户可以修改。
【操作频率】10000次/天
【性能要求】1s内完成
以游乐项目信息修改为例。
【事务内容】需要访问Amusement表,在其中可以修改项目的开放时间(Amusement_period)、项目简介(Amusement_info)、项目评价(Amusement_comment),并且可以实时更新项目的当前排队时间(Amusement_queue)。
【操作频率】1000次/天
【性能要求】2s内完成
以游客门票编号为例。
游客数据对于迪士尼乐园来说是十分庞大的,可能会有每天几万条记录,高效的检索算法是十分重要的。所以需要建立索引来对游客的信息进行管理。
用户编号的前四位记录门票日期,第五位“0”代表工作人员。“1”代表游客。第六至九位记录身份证后四位用于确认身份。这样的两级索引加快了查询用户的过程。
这一部分是基于我的课程设计报告的设计部分,简化得到的相对完整的一个数据库设计范例。主要是对整个设计需要涵盖的内容进行了展示,可以参考以上内容进行自己的数据库设计。其中省略的部分可以下载我附带的资源迪士尼票务与信息管理系统进行下载。