开发者社区> you一年> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

简介: <pre><span style="font-family:KaiTi_GB2312"><span style="font-size:18px; white-space:pre"> </span><span style="font-size:18px">期末考试结束了,寒假全职生活如期而至,终于可以开始全身心的投入我的机房重构了。又是一个新的项目,万事开头难,但不开头更难。自己也只能是一步
+关注继续查看
	期末考试结束了,寒假全职生活如期而至,终于可以开始全身心的投入我的机房重构了。又是一个新的项目,万事开头难,但不开头更难。自己也只能是一步一步往上爬,机房重构便从数据库设计开始。
	回想去年的自考学习,《数据库系统原理》中的知识就可以在机房重构的时候好好应用一把了。第二章的《数据库设计和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图,写关系模式,都只是为了考试,没有实践,更多的只是做题,也就那样过去了,而这次机房重构是一次将其加以应用的好机会。
	在此过程中,虽然花费了不少时间,但相信,数据库设计得好些,后面的路会顺利些。从这几天的机房重构过程中,我想的最多的周杰伦《蜗牛》中唱的那一句歌词:我要一步一步往上爬。我不是想做蜗牛,但我需要学习蜗牛的精神。
	所以在机房重构这阶段中,我将用此句话来总结出我的系列文章,敬请期待~~

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
数据库表的设计
不是数据库表设计大神   最近做订单系统,出现问题是这样的, 有客户表,订单表,套餐表. 通过下单生成订单表. 付款后更改订单状态码为1(表示已付款) (1)如果甲订购2份黄焖鸡米饭,1瓶矿泉水,那么这个订单如何保存这个数据? 剖析: 整个订单系统还要能通过用户修改已下单但未付款的订单内容吗?(或许...
1061 0
新冠疫情数据开源项目 欢迎测试
这个项目提供查询公开的全世界各个国家地区的新冠确诊、治愈、死亡等数字,有些国家地区可以挖掘到省份城市和州县,包括所有日期,并且最新的数据每天根据CDC更新而自动更新。基于 Restful 协议,支持 swagger 文档调试等。免费使用。
1371 0
数据库设计
数据库设计 ER模型 Entity-Relationship,实体-关系模型。该模型的图形化表示就是ER图。 1.用矩形表示实体。 2.用椭圆表示实体属性。 3.用零星表示是体检关系。 例一:有一个简单的数据库系统,实体有班级、学生、课程。 一个班有若干个学生,一个学生只能属于一个班。 一个学生可以选修多门课,一门课有若干学生选修。 将ER图转换为关系数据模型 1.
1314 0
数据库设计
<p><br></p> <p><br></p> <p></p> <p class="p0" style="margin-top:0pt; margin-bottom:0pt; padding-top:0px; padding-bottom:0px; font-family:Helvetica,Tahoma,Arial,sans-serif; font-size:14px; line-
2116 0
数据库设计范式
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chinahuyong/article/details/2573413 关系数据库设计之时是要遵守一定的规则的。
731 0
权限设计(上) - 数据库表设计
web权限设计,做权限目前有三种主流实现方式 第一种:手动实现   配置2个拦截器,一个是拦截是否登陆,一个是拦截url的权限,通过角色权限表的配置,把权限url的路径与访问资源的url进行匹配 第二种:spring-security实现,比较重,不推荐 第三章:shiro,目前spring...
1127 0
多层数据库开发一:设计数据库应用程序
                                          第一章 设计数据库应用程序  数据库应用程序允许用户与存储在数据库中的信息进行交互。
1084 0
+关注
92
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载