一、团队:你说的都队
二、团队成员:黄金朋 陈哲 张蔚 黄云腾 林玉龙
三、团队项目信息:
-
项目名称:企业实习管理系统
-
项目指导老师:欧阳柳波
-
项目描述:企业实习管理系统的目标是开发Web服务网站,并同时为学院实习管理人员、校内指导老师和学生提供服务。让学生的实习材料的提交电子化,同时让学生提交材料情况的管理易于管理、易于观测。
四、数据库设计工具及流程
1. 设计工具
PowerDesigner 和 Navicat。
2. 设计流程
虽然是初次接触数据库设计,但是在指导老师的帮助下,我们弄清楚了如下的大致设计流程:
我们从首先大致从需求文档中抽象出项目涉及的实体,然后找出实体与实体之间的联系。然后使用 PowerDesigner 构建 E-R 模型即设计概念数据模型CDM,在此过程中我们对实体之间的联系经常发生分歧,到底是一对一、一对多还是多对多。
完成 CDM 设计后便开始设计PDM,这两个设计比较类似,主要的区别就是借助外键约束把实体与实体之间联系表达出来。在这个过程中,我们经常对主键的指定产生分歧,突出体现在到底是把已有字段指定为主键还是使用自增主键。
在完成 PDM 设计后导出数据库文件在 Navicat 上运行,为了清楚表达字段的意思和表之间的联系,我们对遗漏的注释进行了补充。
五、数据库设计三大范式
1. 第一范式(确保每列保持原子性)
第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。
2. 第二范式(确保表中的每列都和主键相关)
第二范式在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。
3. 第三范式(确保每列都和主键列直接相关,而不是间接相关)
第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。
六、问题与解决
1. 不同类型用户的基本信息存储
? 在实习管理系统项目中,用户被分为了三个类别:实习生、指导老师、管理员。在数据库的设计过程中,我们一开始考虑将用户名与密码单独存在一张表里,并且保存该用户名对应的身份,再建立三张表来分别存储三个类别用户的基础信息。但经过与项目指导老师和助教的讨论,考虑到该项目不同类别的用户基本信息大体相同,最终决定将所有类别的用户存在一张表中,某一个类别没有该字段的值就用null来表示
2. 表单的管理
? 实习生填写表单并上传是该项目的核心功能之一,我们一开始设计数据库时将用户上传的表单填写内容序列化为二进制对象存在数据库中。在与助教商量后,考虑到最后统计时可能需要获取到实习生填写表单的某一项,如果按现有设计则需要将整个对象取出并进行反序列化处理,最终确定的解决方案为给每一个表单在数据库里建立一张单独的表,将用户填写的每一项作为一个字段的内容存在数据库中,方便后期使用,并且能降低后期开发难度
七、最终数据库设计
八、总结
1. 团队合作、直面变化
数据库设计需要团队所有成员共同参与,需要多次团队内讨论以及与项目指导老师进行沟通和讨论。随着不断变化的需求一点一点更新我们的数据库设计,同时可以向其他人寻求一些建议,以此来不断完善数据库设计。
2. 实战得真知
课堂上对于数据库设计的讲解以及相关工具的使用介绍终究是纸上谈兵,通过此次的数据库设计加深了我们对数据库系统设计相关知识的理解。比如如何设计一张的主键和外键、如何设计表和表之间的关系。与此同时我们也熟悉了一些数据库的基本操作,比如在建表、建立视图等。通过这一系列的动手实践,我们既对数据库有了更深的理解,同时对于设计工具以及数据库管理应用程序的使用更加熟练。