4班君士坦丁堡数据库设计心得博客

发布时间 2023-11-10 18:05:41作者: 软件2104余胜杰

数据库设计心得体会--君士坦丁堡队

前言

在今年的软件项目导论之中,我们进行一个项目开发的实际流程,其中数据库的设计是一个项目成功的关键,我们使用powerdesign完成了本次数据库设计的概念模型,逻辑模型,物理模型的设计,在设计实践的过程中,我们也学习到了一些理论之外的知识

团队介绍

项目名称:基于自动驾驶图像去噪的图片社区系统

指导老师:刘琴

所属小组:4班-君士坦丁堡队

小组人员:余胜杰(PM),胡剑锋, 蔡佳霖, 吴垚敏, 许乐媛

数据库的设计过程

需求分析

数据库设计的基础是需求的确定,在数据库设计之前,我们已经进行的需求的确认,并编写了相关的需求文档,以此为基础进行数据库的设计

概念模型设计

1.细化需求,将功能独立,角色分离

在设计的过程中,需要把各个功能细化,得出细致的事务的罗列.通过使用UML用例图辅助分析,我们最终确定了用户和管理员两个角色,并确定了若干的功能,如下图所示:

image-20231110151929752

2.设计局部的E-R图

依据上面的用例,我们需要将一些相关的板块整合成局部便于协同设计,并且要给予这些实体一些特定的属性来进行现实的模拟

  1. 首先,用户自身便是一个板块,我们需要将用户的相关信息整合并创建一些关系

    image-20231110152909093

  2. 其次,用户相关的图片库也是一个需要存储的实体,保存原始上传和经过处理之后的图片,方便用户进行查看

    image-20231110153035437

  3. 然后,就是可以和所有用户交互的社区图库,这上面的资源需要单独储存,并附加很多社区相关的其它信息

    image-20231110153158502

  4. 最后还有管理员相关的模块,来存放一些管理员需要的服务的数据

    image-20231110153254571

3.设计全局的E-R图

image-20231110153926111

逻辑模型设计

1.数据库总体设计

经过上面的ER图的相关考虑与设计,我们最终将数据库定为10个表,将我们的概念上的模型映射为实际SQL的逻辑存在的数据库,得到如下关系:

序号 表名 功能说明
1 t_user 用户表
2 t_head_picture 头像表
3 t_origin_picture 原始图像表
4 t_denoised_picture 去噪图像表
5 t_community_picture 社区图像表
6 t_blocking_record 封禁记录表
7 t_comment 评论记录表
8 t_admin 管理员账户表
9 t_web_information 网站信息表
10 t_pending_record 审核记录表

物理模型设计

物理设计是为逻辑数据结构做一个最为适合的物理环境,每个模型如何存储,每个字段如何优化,建立索引来减少查询时间等.

物理模型的设计,我们采用的是建模工具是PowerDesigner。并且在本项目中,对应的物理环境是关系型数据库mysql。所以在建模工具PowerDesigner中选取的ODBC(数据库对象)为mysql。并且根据所设计的E-R图、逻辑模型,完成系统物理模型(PDM)的设计:

数据库

数据库定义

数据库的设计和搭建的时候,我们统一了表的前缀为"t_",并且多个表的属性多个单词用下划线连接

并且因为本项目采用了PowerDesigner设计PDM,PowerDesigner可以通过PDM自动生成相应数据库表的创建sql语句,我们只需要在DBMS中执行即可,大大减少了数据库设计人员的工作量。下图是本项目中所有的数据库表:

数据库设计过程中的问题

  1. 刚开始没有考虑到相同的实体的属性应该融合在一个表之中,以及一对多的联系不需要单独建立联系表,造成了很多表格的冗余.后来经过小班课老师的指点提醒,我们对数据库设计进行了合理的更改
  2. 最开始的表以及其相应属性的命名很随意,还造成了大量重复,使人理解不是很清楚,后来学习了他人的优秀的命名方法后,对整个数据库的命名重新进行了规范

数据库设计心得

  1. 数据库的设计不是一蹴而就的,需要前面的需求分析的设计相结合起来共同设计,而数据库也不能直接开始从物理设计入手,要从概念设计,逻辑设计,物理设计步步逐步推进,并根据实际情况返工修改,这样设计的表才会没有冗余和缺漏.
  2. 数据库的设计要和指导老师多多交流,搞清楚项目的需求.在交流的过程中要多些细致,耐心,对某些重要的部分要不厌其烦的与老师进行交流.而且一些细节也要和组员商讨出结果.
  3. 数据库要考虑到规范性和扩展性的设计,在前期数据库的架构的时候就要借鉴现在一些成果的经验,比如范式的规则和函数依赖进行分析.同时要对自己的业务烂熟于心,这样才能够设计的时候考虑的更为长远,不至于后面真正实现的时候再来重构这个数据库的设计