数据库设计心得体会--君士坦丁堡队
前言
在今年的软件项目导论之中,我们进行一个项目开发的实际流程,其中数据库的设计是一个项目成功的关键,我们使用powerdesign完成了本次数据库设计的概念模型,逻辑模型,物理模型的设计,在设计实践的过程中,我们也学习到了一些理论之外的知识
团队介绍
项目名称:基于自动驾驶图像去噪的图片社区系统
指导老师:刘琴
所属小组:4班-君士坦丁堡队
小组人员:余胜杰(PM),胡剑锋, 蔡佳霖, 吴垚敏, 许乐媛
数据库的设计过程
需求分析
数据库设计的基础是需求的确定,在数据库设计之前,我们已经进行的需求的确认,并编写了相关的需求文档,以此为基础进行数据库的设计
概念模型设计
1.细化需求,将功能独立,角色分离
在设计的过程中,需要把各个功能细化,得出细致的事务的罗列.通过使用UML用例图辅助分析,我们最终确定了用户和管理员两个角色,并确定了若干的功能,如下图所示:
2.设计局部的E-R图
依据上面的用例,我们需要将一些相关的板块整合成局部便于协同设计,并且要给予这些实体一些特定的属性来进行现实的模拟
-
首先,用户自身便是一个板块,我们需要将用户的相关信息整合并创建一些关系
-
其次,用户相关的图片库也是一个需要存储的实体,保存原始上传和经过处理之后的图片,方便用户进行查看
-
然后,就是可以和所有用户交互的社区图库,这上面的资源需要单独储存,并附加很多社区相关的其它信息
-
最后还有管理员相关的模块,来存放一些管理员需要的服务的数据
3.设计全局的E-R图
逻辑模型设计
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中执行即可,大大减少了数据库设计人员的工作量。下图是本项目中所有的数据库表:
数据库设计过程中的问题
- 刚开始没有考虑到相同的实体的属性应该融合在一个表之中,以及一对多的联系不需要单独建立联系表,造成了很多表格的冗余.后来经过小班课老师的指点提醒,我们对数据库设计进行了合理的更改
- 最开始的表以及其相应属性的命名很随意,还造成了大量重复,使人理解不是很清楚,后来学习了他人的优秀的命名方法后,对整个数据库的命名重新进行了规范
数据库设计心得
- 数据库的设计不是一蹴而就的,需要前面的需求分析的设计相结合起来共同设计,而数据库也不能直接开始从物理设计入手,要从概念设计,逻辑设计,物理设计步步逐步推进,并根据实际情况返工修改,这样设计的表才会没有冗余和缺漏.
- 数据库的设计要和指导老师多多交流,搞清楚项目的需求.在交流的过程中要多些细致,耐心,对某些重要的部分要不厌其烦的与老师进行交流.而且一些细节也要和组员商讨出结果.
- 数据库要考虑到规范性和扩展性的设计,在前期数据库的架构的时候就要借鉴现在一些成果的经验,比如范式的规则和函数依赖进行分析.同时要对自己的业务烂熟于心,这样才能够设计的时候考虑的更为长远,不至于后面真正实现的时候再来重构这个数据库的设计