数据库设计心得
项目名称:基于知识图谱的课程考核系统
成员:高玉榕 张龙飞 梁海文 陈依诺 苟珊珊 丑怡丹
使用工具
我们使用了powerdesigner工具来进行数据库的建模
数据库:mysql 8.0
设计过程
1.需求分析
根据我们之前完成的需求文档,我们把需求需要的表分为4个模块:用户信息模块、课程模块、习题模块、审核模块,对不同模块的细分,能让我们更好的完成数据库设计。
2.概念模型CDM
直接使用powderdesigner的CDM模型设计。
概念模型就是要确定我们数据库的实体、属性、类型,以及实体之间的关系。1对1、1对多和多对多这三种关系在概念模型阶段就要确立,否则会造成很多问题。
3.物理模型PDM
使用powerdesigner可以根据CDM直接转换得到PDM,物理模型就有了我们数据库的表、字段、字段类型和约束关系 。
4.搭建数据库
使用powerdesigner可以根据PDM导出SQL脚本,方便我们的数据库的建立。
过程中的问题:
1.需求分析的不完整
在需求分析时,例如我们的课程模块,课程中的班级是教学班而不是行政班级;在习题模块:我们只有试卷结果表,而没有试卷表,这些都是因为我们对于一个项目需求的流程的不熟悉造成的。
2.概念模型时实体关系不明确
在创建概念模型时,需要把各个实体之间的关系明确,这样在导出PDM后,可以方便许多。
但是我们对于某些实体之间的关系不明确,这样导致了转换成PDM后,PDM中多出了许多关系表和字段;这些多出的都是因为我们的实体关系没有划分好,powerdesigner为了保证正确性,而多加的东西。
3. PDM的约束问题
构建主键和外键时,外键的约束名许多都是重复的,这样不但导致了表单中的索引重复,还导致了外键约束重复,无法建表。
主键的选择:例如我们的用户表里的用户编号,课程表的课程编号,这些我们一开始都选择使用varchar类型,通过后台设计编号代码来保证唯一性。后来我们直接使用了自增主键作为编号,虽然自增主键不应该有实际的意义,但是没有但是,我们就是用了。
外键的引用:连接外键时需要考虑,在删除主键时,引用的外键是否也需要被删除。
4.表和字段
表的名称和字段名都要满足规范,字段名使用小写字母,多个单词之间使用下划线“_”来分开,不应该超过三个以上的单词,要让名称有意义。
字段的类型,老师发的数据库设计规范里要考虑字段的大小和意义,能用char就不用varchar,大文本的text和图像blob要谨慎使用。
字段是否为空,为空后是否要设置一个默认值也要考虑。因为为空的字段里放一个NULL会影响数据库查询效率。
总结
我们系统的数据库的各个表之间的联系是非常紧密的,每个表之间几乎都存在外键约束,在初次建表时,PDM中出现了冗余的表和字段。
对于每个表的主键也是仅根据书本上的定义来选择,导致主键对于用户的意义过大,使它带有除了惟一标识一行以外的意义,不便于数据库以后的操作和管理。
字段类型,需要考虑到数据的大小,用尽量少的空间完成数据的储存, 因为一个系统的数据是庞大的,不能浪费数据库的空间。
标签:概念模型,数据库,外键,PDM,模块,不队,心得,主键 From: https://www.cnblogs.com/aiopr/p/16858918.html