李子佩说的都队数据库设计心得

一.团队项目信息

项目名称:基于遗忘曲线的英语词汇学习系统(纸云记单词小程序)

指导老师:陈浩

开发小组:李子佩说的都队

小组成员:李子佩、李锦浩、李倩茹、张中信、高伊格、李德忠

 

二.团队成员心得

李锦浩——数据库设计心得

  在进行数据库初步设计的时候,一开始考虑到的还是不同用户类型有不同的操作限制,而且登录时要选择登陆角色,所以我们刚开始是分成了三个表,来存储三种用户的分别信息。并建了一个所有类型用户都存有的id、账号密码。但后来经过老师提醒,两个表的关系是1对1关系,完全可以减少表的数量,所以我们在用户表中加入了一个用户类型的参数,用来表示用户类型,并把其他类型特有的字段加入,设置为非填项。目前设想是,在检测登录类型时,在表中进行第一轮的select筛选再进行判断。

  我们的功能有听写、复习错词、积分兑换、班级管理、发布作业、家长绑定、成绩情况查看。

  我们根据需求文档中定下的功能以及已有的项目中写明的数据库设计规范进行设计。

  由于项目的重点是记忆遗忘曲线,所有必定有一个复习词汇时间表,存放本次学习的时间和下次学习的时间。加上一个错词记录表。积分兑换功能需要有两个表,一个为商城表,表示有哪些商品可以兑换,一个为兑换记录表,也就是交易表,用于记录用户的兑换行为,且每个学生用户在积分字段中都有数值。班级管理功能涉及一个班级表,其中存在各个班级的编号信息、以及主管班级的老师用户信息。发布作业功能有专门的记录表,是班级管理功能的衍生功能,作业记录表中设计需要涉及到发布日期和截止日期,这样以后在添加提醒功能时提供了很好的数据参考。成绩情况查看则是将每个学生每次使用听写功能时获得的成绩,其中包括了本次行为是否为作业要求,这个字段的加入主要是方便老师查看每次作业的成绩情况。

  具体实现部分由各位组员协作完成。协作方面让很多一开始的问题都得到了解决,也得到的完善,果然一堆人的想法比一个人的作用要重要!

 

李子佩——数据库设计心得

       我负责的部分是对数据库设计工程文件的二次完善。

  设计数据库给我最大的感受,是只有将自己代入角色,才能将设计做得合理实用。

  刚开始设计的时候,我们根据自己对项目的大概理解设计了几个大表,设置了一些必要的字段。当时觉得这个数据库对我们要实现的功能来说应该做得蛮全面的了。但是在小班课上,老师站在了真实用户的角度对我们的功能进行了层层理解分析,为我们的数据库设计提出了很多的问题和建议。下来之后,我也将自己作为用户,对着数据库模拟了用户的使用过程,才发现有一些细节真的不是站在一个想着方便统计数据的设计者的角度能看见的。比如,用户在记单词时需要看到单词的词性和释义,而我们设计者想的重点却在于将单词存储分类,当注意力聚焦在这时很难去想单词有什么附加属性是用户亟需的。

  这一体会对我产生了很大的启示。在以后的项目设计中,我也会尽量学着站在使用者的角度来模拟每一个细节。

  还有一点感受是组员的合作对一个好的设计至关重要。这次设计数据库,每一个组员都了解我们的设计内容,也都提出了很有用的细节改进方案。希望我们能继续通力合作,在开发过程中保持合作热度!

 

李倩茹——数据库设计心得

  首先谈一下数据库设计部分

  我们小组数据库设计的分工安排是一个人出底稿,然后其他人分模块进行订正分析

  对于数据库设计我感受最深的就是合作,每个人负责不同的模块,数据库又是互相相关的,因此多交流多沟通,统一命名,统一设计规则对数据库设计有很大的帮助。

  在小班课上,老师对于一些数据类型的建议和数据冗余的看法也对我们的设计有很重要的点醒作用。

  其次谈一下数据库设计文档编写部分

  这次数据库设计文档中我主要负责文案部分,主要包括编写目的,项目背景,外部设计,运用设计几个方面。编写初期,无从下手,简单认为只需要将powerdesigner中的设计导出即可,没有考虑文案的必要性和重要性。

  参考了别人的文档,发现数据库设计文档不止是数据字典那么简单,还应该有我们设计的初衷,标准和约束。这样才是一个完整的设计,这种设计思想的完整性是我需要在以后的学习中要贯彻和学习的。

  首先谈一谈编写目的,这里指明了我们数据库文档的使用对象和使用场景,一份好的手册需要有明确的使用场景,这样才能更好的服务于用户,服务于场景,让文档不再是形式主义,而是实用物品。准确的定位是成功的必备条件。

  其次,项目背景也是很重要的一部分,我们要找到社会痛点与难点,这样才能更好地有目的性地做出产品。这就是一个发现问题,分析问题,解决问题的过程,查找资料,明确项目背景,为我们后期的改进方向提供了指导性的内容。从问题的源头分析,才能期望获得更好的用户体验。

  之前写了需求文档,站在需求文档的基础上再进行数据库设计,不仅是事半功倍,而且方向结构都会更加明了,做事情前要有合理的逻辑时间规划。

  关于外部设计,主要说明了使用的数据库软件和建立的数据库名称,并且规范了命名约定和设计约定:数据库设计采用PowerDesigner,采用面向对象设计方法,首先进行对象实体的设计,最后将对象持久化到数据库中,所有的表和表之间的关联(ER图)都采用标准的PowerDesigner设计工具进行,这样能够将整个系统的设计和数据库设计有机的结合起来。这样保证了开发过程中由于人员习惯不同导致的一些问题。事先制定团队标准,是很重要的。

  最后在运用设计中,数据库的安全性也做出了说明,我们在设计一款产品时应该考虑到的不仅是事前的背景规则,事中的流程行为,还要考虑事后的保障,这样才是一个优秀的产品所具备的。

  编写数据库设计文档,不仅是数据库的知识,还牵扯到方方面面的要素,考虑问题的方式方法也在这个过程中得到了提高,希望在以后的学习中能将这种发现问题——分析问题——解决问题的思维运用的很好。

 

张中信——数据库设计心得

  本人负责的是有关学生类数据库表的设计,主要复审了有关单词复习和听写的模块以及学生测试的模块( dictate_review表、dictate_score表、dictate_wrong表以及dictate_word表)。

   一开始对dictate_word表中level字段有争议,认为没有四级以及六级这两个值,但是多了两个功能好像也没问题。

  在设计表的过程中,因为要实现遗忘曲线的算法,所以搜索到了相关的论文资料:可以通过最新记忆时间、最新错误时间以及错误次数来实现,所以dictate_wrong这个表中添加了count(记录错误次数)以及pubdate(记录上次错误时间)两个字段。这个表是实现遗忘曲线算法的关键。

 

 

高伊格——数据库设计心得

  进行数据库设计,首先要确定这个系统运行需要哪些数据。针对教师用户模块,我主要根据完善后的项目界面原型进行分析:系统界面需要展示什么数据、运行时需要哪些参数。

       以教师登录界面为例,可以看到系统需要用户输入手机号、密码,这两个数据是与各个用户一一对应的,在每次登录时提取出来进行验证,因此是需要进行存储的数据。所以我首先会为用户设计一个表,其中至少包括三个字段:用户账号、用户手机号、用户密码。比较特殊的是,在保存密码时,出于账号安全,我们不能直接显示地保存密码字符串,要进行加密处理。   

       接着,我们需要考虑,每个字段的数据类型是什么,以及域的完整性约束。例如手机号,它是不需要进行计算的数,将其存储为INT类型是不合适且消耗空间的,通常将其存储为CHAR。设置约束时,可以将它的长度规定为11,因为手机号本身只有11位,若存储不等于11位的手机号数据,则会成为错误数据。域的约束不仅根据实际来设定,还要根据需求确定。同时也要与代码中的规定一致,否则会造成数据存储和使用时的错误。

       为了在表中查找数据时,能够根据一个或一组字段快速找到唯一对应的记录,可以将其设为主键PRIMARY KEY。这里要注意的是,主键的数据必须不能为空,并且是唯一的。

将两个表联系起来时,还需要外键。外键的数据可以重复,但是在其对应父表中必须唯一,也就是作为父表的主键。需要考虑的问题是,两个表之间的关系是一对一、一对多、多对一还是多对多。

       在设计数据库时,必须要按三个范式来检查数据库的设计,避免完全依赖、部份依赖和传递依赖。

我使用的数据库设计工具是PowerDesigner,在这个过程中,我掌握了使用PowerDesigner设计CDM,并通过CDM直接转换为PDM,并按需要选择数据字典中的数据导出数据字典报告。

 

李德忠——数据库设计文档

  这次团队项目主要是基于微信小程序进行开发,根据之前的需求分析确定了增加的功能,这次数据库设计也是基于这个功能需求进行设计的。由于我是电科专业未接触过数据库,所以这次数据库设计参与较少,但是学习到了许多数据库有关的知识。

  首先这次项目数据库是使用MYSQL5.0版本,统一使用PowerDesigner进行数据库设计和E-R图的设计。通过项目数据库设计文档,我了解到数据库主要分为四个模块:用户模块、单词听写和复习模块、积分兑换模块、班级管理模块,每个模块的实体名称,属性和约束都是明确的。在具体的表格中,每个名称都有详细的注释、数据类型和长度以及主要的和外来键的规定,对于不管是开发人员还是用户以及测试维护人员都非常友好,以后我自己进行相关数据库设计时可以以这个为参考,做到规范化和提高可阅读性。在物理结构设计方面我学习到各个表格的创立和属性的声明,大体的结构代码形式。之前需求分析里我负责的是有关学生用户需求分析,所以在最初的数据库表格设计时,基于已有的数据库有关学生用户表格提出个人的一些修改意见,帮助团队完善部分数据库的设计。虽然后续的数据库设计未参与太多,但是个人也在积极学习MYSQL数据库的基本使用,了解其执行添加、查找、删除、修改的SQL语句,以及表格创立修改和属性主键的设置,还在继续学习有关的存储,管理和优化等相关知识。

  总而言之,这次数据库设计虽然是我第一次接触到数据库,但确实令我受益匪浅,让我对大数据时代下使用数据库如何去存储和管理数据有了一定的了解,也十分感谢团队成员的帮助。

 

posted @   惋奈  阅读(114)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示