热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

教务系统数据库设计(一)

从11月中旬以来一直在做教务系统,开始阶段是各个子系统独立开发,包括评教系统、选修课系统、考试系统三个子系统,这三个系统已经有原型

        从11月中旬以来一直在做教务系统,开始阶段是各个子系统独立开发,包括评教系统、选修课系统、考试系统三个子系统,这三个系统已经有原型,我们采用的都是原型开发,因为需求已经确定,研究了一段时间把用例图、类图等画了画,完成了大部分了,快该写代码了然后,老师说需要把这三个系统整合在一起,做一个教务系统,教务系统是一个平台,可以往里面扩充子系统,使得信息可以共享,避免信息孤岛的出现。

 

        对于想要建立共享性、集成性高的系统即要设计一个结构紧密又灵活性好的共享数据库,下面一段很长的时间就是设计教务系统的数据库……

       下面是我们数据库设计的过程中遇到的一些问题

 

       1. 数据库表之间该不该多用主外键呢 ?

            先说我们做的评教系统,单独从这一个系统角度考虑,建立我们自己的数据库表,我们多加一些主键无所谓,加多点主键还可以使得表结构严谨,数据一致性好,但是当我们再加入新的系统的时候,把选课系统也加入到这个系统中,那么评教系统中的表就需要从新设计里面的主外键,出现这样的情况是当初设计表结构时没有考虑到灵活性,单独从一个系统角度考虑,即过多使用主外键也会使得表结构过于紧密、灵活性差,在什么情况下使用还需多多考虑。

 

            那主外键就不使用了吗?当然不是,既然主外键可以使得表一致性高、扩展性差,那我们可以避开缺点,使用优点,在需要扩展的地方尽量不使用主外键关系,而在要求扩展性不高的地使用主键外键,根据这一原则更改表结构

           更改后的数据库设计,如下

          

           新增了中间表(关系表)充当主外键的作用维持数据一致性,把基础表中的键关系移动到了基础表与关系表中,这看上去好像是降低了基础表与基础表之间的耦合度,给基础表解耦,这让我想起了中介者模式,通过一个中介类来给各个对象解耦,通过中介通信,而不是让各个类直接通信,举个例子:各个国家中国、美国、日本等有时并不直接交涉而不是通过联合国,给各个国家之间解耦,不管是在生活、学习中,设计模式的思想无处不在,值得学习。

          

       2.  基础表与子系统表如何划分 ?

          从每一个子系统方面考虑,子系统表无论放基础里还是放自己系统里都可以实现,其区别是放基础里面别的子系统可以使用,来共享信息,分表的时候按着信息是否需要共享来分表,如果这种信息不需要共享,那我们就没有必要往基础表里面放,如果放在基础表里面反而会增加基础表负担,增加数据库表冗余。

 

          举个例子:例如TB_Student、TB_Teacher、TB_College、TB_Department等表,只要是学校里的系统,一般都会用到这些信息,很显然,这些表应该归为基础表,另外还有一些特殊关系表也应该规则基础表,如老师课程关系表等,这也是基础信息,这些信息不依附于某个子系统。

         

          其中,也还有很多细节问题,不一一列举,下面是数据库设计一点点经验

 

          我们设计数据库时可以遵循这样的设计原则:

 

          (1) 数据库中表的个数越少越好。

                   形成了对客观世界的高度抽象,进行了系统的数据集成,防止了打补丁式的设计

          (2) 表中组合主键的字段个数越少越好。

                  因为主键的作用,一是建主键索引,二是做为子表的外键,所以组合主键的字段个数少了,不仅节省了运行时间,而且节省了索引存储空间;

          (3) 表中的字段个数越少越好。

                  减少数据冗余,一种方法是“列变行”,所谓“列变行”,就是将主表中的一部分内容拉出去,另外单独建一个子表。这样就防止了将子表中的字段拉入到主表中去,在主表中留下许多空余的字段。

 

          (4) 降低范式,增加冗余, 少用触发器, 多用存储过程。

          (5) 当计算非常复杂、而且记录条数非常巨大时,复杂计算要先在数据库外面。

 

          (6) 发现某个表的记录太多,例如超过一千万条,则要对该表进行水平分割。水平分割的做法是,以该表主键PK的某个值为界线,将该表的记录水平分割为两个表。若发现某个表的字段太多,例如超过八十个,则垂直分割该表,将原来的一个表分解为两个表。

          (7) 对数据库管理系统DBMS进行系统优化,即优化各种系统参数,如缓冲区个数。

 

 


转:https://www.cnblogs.com/lilongsheng/archive/2012/12/31/3226070.html



推荐阅读
  • IT方面的论坛太多了,有综合,有专业,有行业,在各个论坛里混了几年,体会颇深,以前是论坛哪里人多 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • Final关键字的含义及用法详解
    本文详细介绍了Java中final关键字的含义和用法。final关键字可以修饰非抽象类、非抽象类成员方法和变量。final类不能被继承,final类中的方法默认是final的。final方法不能被子类的方法覆盖,但可以被继承。final成员变量表示常量,只能被赋值一次,赋值后值不再改变。文章还讨论了final类和final方法的应用场景,以及使用final方法的两个原因:锁定方法防止修改和提高执行效率。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 本文讲述了孙悟空写给白骨精的信件引发的思考和反省。孙悟空在信中对自己的行为进行了反思,认识到自己胡闹的行为并没有给他带来实际的收获。他也揭示了西天取经的真相,认为这是玉皇、菩萨设下的一场陷阱。他还提到了师傅的虚伪和对自己的实心话,以及自己作为师傅准备提拔的对象而被派下来锻炼的经历。他认为路上的九九八十一难也都是菩萨算计好的,唐僧并没有真正的危险。最后,他提到了观音菩萨在关键时刻的指导。这封信件引发了孙悟空对自己行为的思考和反省,对西天取经的目的和自己的角色有了更深入的认识。 ... [详细]
  • Windows2003 IIS上设置301定向,实现不带www域名跳转带www域名的方法
    打开IIS,建一个网站,主机头用不带www的域名,随便指向一个目录。然后在这个网站上点右键,属性--主目录--重定向到URL如图ÿ ... [详细]
  • 本文介绍了在Ubuntu下制作deb安装包及离线安装包的方法,通过备份/var/cache/apt/archives文件夹中的安装包,并建立包列表及依赖信息文件,添加本地源,更新源列表,可以在没有网络的情况下更新系统。同时提供了命令示例和资源下载链接。 ... [详细]
author-avatar
小于2502919693
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有