上一篇👉:Oracle----PowerDesigner设计工具


总目录👉震惊!史上最菜的Oracle 11g教程(大佬勿进)

文章目录

  • 1、案例要求
  • 2、具体内容
    • 2.1、第一个要求分析
    • 2.2、第二个要求分析
    • 2.3、第三个要求分析
    • 2.4、第四个要求分析
    • 2.5、第五个要求分析
    • 2.6、第六个要求分析
    • 2.7、第七个要求分析
    • 2.8、第八个要求分析
    • 2.9、第九个要求分析
    • 2.10、第十个要求分析
  • 3、总结


🚴大家好!我是近视的脚踏实地,这篇文章主要是来做一个综合实案例对前面学的知识回顾总结。
     唯有行动  才能解除你所有的不安

1、案例要求

说明: 本设计方案重点考虑表的结构性设计,以及主要操作功能的支持。例如:用户信息中重点的就是用户名和密码,像性别、年龄等信息都属于辅助信息,辅助信息可以随后完善,设计时考虑核心字段。
注意: 本设计只是一个最为基础的系统设计,暂不用考虑过多的服务器性能以及数据管理。

企业在线学习系统可以提供企业员工在碎片时间进行有效学习的监督,同时还可以进行在线的测试检验等操作,本系统包含有如下功能:

1、 本系统主要针对于企业内部员工使用,考虑到系统的安全性,所有的用户信息必须通过系统管理员进行录入,所有员工凭借自己的员工编号以及密码进行系统登录;

2、员工登录到系统之后可以进行所有培训课程的查看,或者根据课程分类(课程分类分为两级,即:一级分类下会存在有多个二级分类)进行课程查找;

3、每门课程都会分为多个章节,每个章节都会有若千节课程;

4、如果员工要想进行课程的学习, 则必须选择“参加该课程”,参加之后才可以播放课程,同时要求记录好该雇员的课程学习进度;

5、员工可以针对于参加的课程进行测试, 而在测试时以选择题为主,进行四选一的回答, 并且要求可以根据已有题库随机生成测试题;

6、 每一个员工可以针对于每节课程进行自己的笔记记录;

7、 员工登录系统之后可以进行系统公告的浏览,同时可以自动提示用户有多少属于未读公告信息;

8、管理员可以进行针对于课程分类、 课程内容、测试题进行管理;

9、管理员可以控制课程的发布管理;

10、系统中允许有一位超级管理员,同时超级管理员不能够删除。不同的管理员可以根据其所对应的角色不同,生成不同的管理菜单

2、具体内容

任何的系统起码具备两个用户级别:前台普通用户、后台管理员。后台管理员负责发布所有的信息,而前台用户只是根据已发布的内容使用。

2.1、第一个要求分析

1、 本系统主要针对于企业内部员工使用,考虑到系统的安全性,所有的用户信息必须通过系统管理员进行录入,所有员工凭借自己的员工编号以及密码进行系统登录;

分析👇:

     ● 本系统主要针对于企业内部员工使用,既然是内部员工使用,那么用户的注册功能肯定是不需要创建的。
     ● 用户信息和管理员肯定是两张表,而且用户信息由管理员负责添加,那么为了得到数据的准确性,需要知道用户是由哪个具体的管理员负责添加。这个时候相当于一个管理员负责多个用户,那么就属于一对多的关系,一对多属于第三设计范式。

接着可以打开PowerDesigner新建一个物理模型👇:

接着来创建用户表👇:



对于此时的用户信息表之中需要注意的问题是:只关心核心字段,其他的非核心字段在后边进一步设计的时候再来完善。

接着来创建管理员表👇:


接着把两张表的关系标出来,从子表引导父表(用户表拉倒管理员表)

以上是我们正常的开发思路,但是现在的开发思路转变了,管理员也应该是一个用户。所以现在的开发会将管理员和用户信息保存在一起。但是为了区分到底保存的是管理员还是用户,那么可以设置一个标记字段

     ● 字段名称为flag,flag=0为普通用户、flag=1为管理员、flag=2为超级管理员。但是此时如果要想清楚地记录下每一个管理员创建的用户信息

那么就可以把管理员的表删了,在用户表里增加一个级别的字段👇:

刚才说过,一个管理员可以添加多个用户,那怎么办呢,那么我们可以参考emp表的设计,有个领导编号,用户表里面增加一个管理员的信息。

但是如果这么设计了,在日后使用Hibernate做数据库开发的时候就会出现可怕问题。会出现递归操作,有人在找人,再找人。就是说这样设计在数据库本身是可以的,但在Hibernate开发角度,他就有问题了,但是使用MyBatis就没事了。那么如果现在想更好去改变这样的设计,希望所有的表都可以使用它,那么还可以中间增加一张数据表,做数据保存。(现在只是在分析可能性,当然最终现阶段先保留这种设计方法)

那么现阶段来看还是这种最好👇:

2.2、第二个要求分析

2、员工登录到系统之后可以进行所有培训课程的查看,或者根据课程分类(课程分类分为两级,即:一级分类下会存在有多个二级分类)进行课程查找;

此时一个一级课程会包含有若干个二级课程分类,这属于一对多关系。


但是在每个分类下会存在有若干门课程,课程属于一级分类,也会属于二级分类。那么这个时候对于课程中需要的信息:编号(自动增长)、名称、老师(可能也是用户,所以需要做个标记,tflag=1是老师)、课时、图片、内容简介、开始时间、结束时间。

2.3、第三个要求分析

3、每门课程都会分为多个章节,每个章节都会有若干节课程;

但是这个时候新的问题又出现了,一个课程下会存在若干内容。如果要是课程分章,那么还需要引入课程章节表。一个课程包含有多个章节,每个章节包含有多个内容。

还可能会存在课程状态。因为课程需要审核。还需要加入审核标记,课程由管理员发布(用户),所以还需要设计一个发布用户的外键

2.4、第四个要求分析

4、如果员工要想进行课程的学习, 则必须选择“参加该课程”,参加之后才可以播放课程,同时要求记录好该雇员的课程学习进度;
     ● 一个员工可以参加多门课程,一门课程可以有多个参加的员工;使用第二范式

     ● 追踪员工的课程学习进度。
          ● 假设一门课程有30节课,那么在该员工选择完参加该课程之后,应该有一个记录表,自动生成该样的所有与本课程有关的内容,但是此内容后面的学习标记设置为默认值,对于学习状态有以下几种取值:
              ● flag=0:未开始学习;
              ● flag=1:表示已开始学习,但是没有学习完;
              ● flag=2:已学习完成;

2.5、第五个要求分析

5、员工可以针对于参加的课程进行测试, 而在测试时以选择题为主,进行四选一的回答, 并且要求可以根据已有题库随机生成测试题;

一门课程会有一套试题库。一对多关系,第三设计范式。但是题库里面包含有若干个题目,四选一

如果员工选择开始测试,则应该有一张测试记录表(假设员工只能够测试一次),那么在这张表里面需要生成所有动态抽取出来的题目,而抽取的个数由题库提供的。

2.6、第六个要求分析

6、 每一个员工可以针对于每节课程进行自己的笔记记录;

笔记信息就是一个员工针对某个课程的记录,如果再细致一些,可以针对某节课程的记录。

2.7、第七个要求分析

7、 员工登录系统之后可以进行系统公告的浏览,同时可以自动提示用户有多少属于未读公告信息;

公告是由管理员发出的, 所以一个管理员可以发布多个公告信息

每一个用户需要针对于读过的公告做一个标记。

2.8、第八个要求分析

8、管理员可以进行针对于课程分类、 课程内容、测试题进行管理;

管理员本身就是用户,也就说一个用户可以发布多个课程,一个用户可以发布多个测试题。

2.9、第九个要求分析

9、管理员可以控制课程的发布管理;

课程表里面存在一个发布状态的字段。0表示未发布,1表示发布、2表示待审核。上面已经完成了

2.10、第十个要求分析

10、系统中允许有一位超级管理员,同时超级管理员不能够删除。不同的管理员可以根据其所对应的角色不同,生成不同的管理菜单

超级管理员已经由级别描述了,这一点可以省略了,但是下面才是一个核心的设计问题:

每一个管理员所具备的功能称为权限组(group),但是每一个权限还需要划分为具体的子权限(Privilege)

那么最基础的初期功能就完成了,后面要做的就是在这个的基础上进一步业务的细化等等操作了,表的内容不足就内容等等

3、总结

数据库设计没有标准答案,也几乎不会存在有完全符合范式的设计。而现在的设计也没有考虑到过多的性能。

本篇博客到这就完啦,非常感谢您的阅读🙏,如果对您有帮助,可以帮忙点个赞或者来波关注鼓励一下喔😬 ,嘿嘿👀

更多推荐

Oracle----综合实战:数据库设计分析实例