【机房重构】一步一步往上爬——数据库设计

	期末考试结束了,寒假全职生活如期而至,终于可以开始全身心的投入我的机房重构了。又是一个新的项目,万事开头难,但不开头更难。自己也只能是一步一步往上爬,机房重构便从数据库设计开始。
	回想去年的自考学习,《数据库系统原理》中的知识就可以在机房重构的时候好好应用一把了。第二章的《数据库设计和ER模型》很仔细地教了我们如何进行数据库设计。所以,在参考自考书的基础上,把重构时的数据库全新地设计了一番。
	首先明确数据库系统的生存期一般可划分为七个阶段:规划、需求分析、概念设计、逻辑设计、物理设计、实现、运行维护。有了第一遍机房收费系统的经验基础,对该系统的需求有了一定的了解,下面就从采用ER模型的数据库概念设计步骤开始写起,看看数据库是怎么一步一步设计的。
一.设计局部ER模型
	1.确定局部结构范围。划分方式一般有两种,一种是依据系统的当前用户进行自然划分,例如,机房收费系统中的用户包含学生、操作员和管理员三种用户类型;另一种是按用户要求数据库提供的服务归纳成几类,使每一类应用范文的数据显著地不同于其他类,然后为每类应用设计一个局部ER模型。例如,机房收费系统中的操作员下可划分为:注册、充值、退卡等等几类。这里我将采用第二种方式设计。
	2.定义实体。任务就是从信息需求和局部范围定义出发,确定每一个实体类型的属性和键。这里我定义的实体包括:学生、操作员和管理员。
	3.定义联系。用于刻画实体之间的关联。依据需求分析的结果,考察是否存在联系。若有联系,进一步确认是1:1、1:N,还是M:N等。
	4.分配属性。确定属性的原则是:属性应该是不可再分解的语义单位;实体与属性之间的关系只能是1:N的;不同实体类型的属性之间应无直接关联关系。
二.设计全局ER模型
	1.确定公共实体类型。一般把同名实体类型作为公共实体类型的一类候选,把具有相同键的实体类型作为公共实体类型的另一类候选。
	2.合并局部ER模型。合并原则:首先进行两两合并;从公共实体类型开始,最后再加入独立的局部结构。
	3.消除冲突。包括属性冲突,即属性值的类型不同,如数据有字符串类型,数值型等;结构冲突,同一对象在不同应用中的不同抽象,如管理员,有时充当实体,有时又是另一应用的属性;命名冲突,这在我第一次机房中的数据库设计中有很大的共鸣,那时候同一字段都采用了不同的命名,所以自己总是得回头看看在某个表中它的实际含义。
三.全局ER模型的优化
	1.合并实体类型。一般在权衡利弊后,可以把1:1联系的两个实体类型合并。
	2.消除冗余属性。一般同一非键的属性出现在几个实体类型中,或者一个属性值可从其他属性的值导出,此时,应把冗余的属性从全局模型中去掉。
	3.消除冗余联系。
在经过了上面三个大阶段之后,机房重构的ER图(不包括各个属性)就在下面了:

接着根据将ER模型向关系模型的转换,就可以将关系模式给设计出来了。
	1.如果联系是1:1,可以在两个关系模式中的任意一个的属性中加入另一个模式的键作为外键。
	2.如果联系是1:N,则在N端实体类型转换成的关系模式中加入1端实体类型的键作为外键。
	3.如果联系是M:N,则将联系类型转换成关系模式,其属性为两端实体类型的键作为外键。
下面便是机房重构数据库系统的设计表:
	最后,就是要真正开始创建新的数据库,数据表了。第一次机房的时候就是在SQL中用代码编写的,不过对于其中的各个字段的数据类型都是很含混,一点也不严谨。所以,在这次重构的时候,需要将某些类型修改一番,不可能会做到完美,但必须要做的比前一次好。在浏览相关网页的时候,发现还可以将在Visio画出的ER图直接生成数据库系统的各个表,以后一定得试试。
	学习心得:
	总体说来,之所以在机房重构的这一次将数据库的设计也详细地做了一个总结,就是在自考中学过。那时候,学三范式,画ER图,写关系模式,都只是为了考试,没有实践,更多的只是做题,也就那样过去了,而这次机房重构是一次将其加以应用的好机会。
	在此过程中,虽然花费了不少时间,但相信,数据库设计得好些,后面的路会顺利些。从这几天的机房重构过程中,我想的最多的周杰伦《蜗牛》中唱的那一句歌词:我要一步一步往上爬。我不是想做蜗牛,但我需要学习蜗牛的精神。
	所以在机房重构这阶段中,我将用此句话来总结出我的系列文章,敬请期待~~
时间: 2024-12-21 14:31:15

【机房重构】一步一步往上爬——数据库设计的相关文章

【机房重构】一步一步往上爬——不仅仅是三层

不知道大家还记不记得之前学习的UML中一个单独列出来的一种图,也就是这次我想说的包图.那个时候,让我们画机房收费系统的各种图,用例图.类图等等,通过自己反复琢磨,还都勉勉强强画出来了.唯独只有包图,我是一点东西也没有画上,只是见到了传说中的"包"是长什么样子的. 现在到了机房重构的阶段了,之前也学习了三层,终于是知道了包图该怎么画了.但也不仅仅是理解了包图,而且也是见证到了包图是如何在一步一步层层升级的.下面就将用一个机房系统中的登录实例来看看为什么说<不仅仅是三层>. 三

【机房重构】一步一步往上爬——又见UML与文档

机房重构的代码编写完成后,下一阶段的任务就是画图和文档了.在师父细心的一番指导后,开始动工了. 在数据库设计的时候,自己也有根据自考学习的知识,画了张ER图.到现在系统完成后,回头看之前贴在博客上的那张ER图,也是错漏百出,自己都不知道误导了多少人了.. 今天一开始把ER图给师父看,师父第一个问题就是问ER图是给谁看的?我顿时懵了.师父接着说ER图是给用户看的,你用英文写,用户看的懂吗? 下面就从ER图说起: ER图,是需要在需求分析文档中出现的,那么就是需要给用户看到的,而不是程序员或者说是开

【机房重构】一步一步往上爬——验收给了我什么

整个机房重构过程中,一共经历了两次验收.一次是关于系统编程:一次是关于画图与文档,每一次,师父都是耐心.细心地指导.要问验收给了我什么,看下面的博客内容便清楚了. 个人机房重构可分为两个阶段,前期主要是代码的编写,后期主要是画图. 在前期阶段,慕夏师父也是非常关心我的进展,时常来我这里看看,问问我有什么问题,抓住这几次机会,师父也是和我说了很多,从而对整个机房收费系统的业务逻辑更加清楚了.刚开始接触到抽象工厂+配置文件+反射的时候,除了茫然还是茫然,几天下来没有什么成果,登录的主线也没有完全明白

【机房重构】一步一步往上爬——七层中的那些事

机房重构开始已经一个多星期了,从最开始的理解登录到现在已经成功完成至少一次的"增"."删"."改"."查"的操作,现在在七层的这个大环境下,从最开始的奄奄一息,终于变得生龙活虎起来了. 之前总是听师哥师姐们说,敲完登录一条线了,后面就会很顺利了.可是,从我来说,事实并非如此.然而,磕磕绊绊,四个字足以形容我的这些天.不过,我心态好,我可以忍受一个人花时间调代码的孤独,再说,我也可以找小伙伴.找师父帮助我,我有什么理由不成功.

【机房重构】一步一步往上爬——小问题大收获

机房重构进行了半个月之久了,其中遇到了不少问题,有的调试了很久,有的是因为自己的大意.不管怎样,自己还是通过各种问题,收获了许多,成长了许多.这篇博客主要就是对之前遇到的一些问题的集锦,希望能给大家一些帮助,遇到问题,成功地解决问题. 问题一:缺少参数,在U层传参数的时候少写了一个参数. 解决:根据提示检查U层的该参数,将该参数赋上相应的值. 问题二:进程无法访问文件,文件正由另一个进程使用. 解决:重新生成解决方案,或者是关闭程序,重新启动程序. 问题三:接口的实现错误,类型无法转换,这是因为

【机房重构】一步一步往上爬——企业管理器,好好利用

这么些天,一直在机房重构中.这么些天,从刚开始的迷茫,到已经完全理解七层间的调用,现在是敲代码敲得恶心了.因为自己好像什么都没有做,只是在一遍又一遍的敲重复的代码,有时候,真的不想干了.但不干是不行的,所以,还是想找些其他方法,在挥去一些厌烦情绪的同时,自己也学习些新的东西. 因为太多重复的代码,所以导致了自己不想敲下去,在经过了一些新的尝试后,总算是有种柳暗花明的感觉.那么,本篇博客就将介绍一下在机房收费系统中数据库中的企业管理器的应用,它的强大,以前只是听说或者看过,但自己还没有尝试过.这一

一步一步写算法(之克鲁斯卡尔算法 上)

原文:一步一步写算法(之克鲁斯卡尔算法 上) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com]     克鲁斯卡尔算法是计算最小生成树的一种算法.和prim算法(上,中,下)按照节点进行查找的方法不一样,克鲁斯卡尔算法是按照具体的线段进行的.现在我们假设一个图有m个节点,n条边.首先,我们需要把m个节点看成m个独立的生成树,并且把n条边按照从小到大的数据进行排列.在n条边中,我们依次取出其中的每一条边,如果发现边的两个节点分别位于两棵树上,

一步一步写算法(之prim算法 上)

原文:一步一步写算法(之prim算法 上) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com]     前面我们讨论了图的创建.添加.删除和保存等问题.今天我们将继续讨论图的一些其他问题,比如说如何在图的环境下构建最小生成树.为什么要构建最小生成树呢?其实原理很简单.打个比方,现在某一个乡镇有n个村,那么这n个村肯定是联通的.现在我们打算在各个村之间搭建网线,实现村村通的工程.那么有什么办法可以实现村村互通,同时又使得最后的总距离最小呢?要达

一步一步写算法(之哈夫曼树 上)

原文:一步一步写算法(之哈夫曼树 上) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com]       在数据传输的过程当中,我们总是希望用尽可能少的带宽传输更多的数据,哈夫曼就是其中的一种较少带宽传输的方法.哈夫曼的基本思想不复杂,那就是对于出现频率高的数据用短字节表示,对于频率比较低得数据用长字节表示.     比如说,现在有4个数据需要传输,分别为A.B.C.D,所以一般来说,如果此时没有考虑四个数据出现的概率,那么我们完全可以这么分配