数据库设计之E-R模型转换成关系模型
个人重构版机房收费系统中需要自己重新设计数据库,那么如何设计数据库呢?这也是咱们自考中一门重要的课程《数据库原理》,对于考过这科的同学想必已经从中受益,直接就可以学以致用。我是今年10月份考这本书,所以就先实践一把。 原先看过的耿建玲老师的视
个人重构版机房收费系统中需要自己重新设计数据库,那么如何设计数据库呢?这也是咱们自考中一门重要的课程《数据库原理》,对于考过这科的同学想必已经从中受益,直接就可以学以致用。我是今年10月份考这本书,所以就先实践一把。
原先看过的耿建玲老师的视频,里面重点讲解的是数据库内部的具体操作,没有怎么涉及到数据库设计中不可或缺的一个步骤即从概念模型到逻辑模型的转换。进入正题:
背景:数据系统生存期
我们把数据库应用系统从开始规划、设计、实现、维护到最后被新的系统取代而停止使用的整个期间,称为数据库系统生存期。这个生存期一般可以划分成七个阶段:规划、需求分析、概念设计、逻辑设计、物理设计、实现、运行维护。今天的重点概念设计到逻辑设计的转换。
关于E-R图百科中有详细介绍
以机房收费系统为基础,画出全局概念模型如图:
把E-R图转换成关系模型的步骤:
第一步:把三个实体类型转换成三个模式:
student(studentNo,studentName,sex,academy,major,grade,class)
card(cardID,money)
user(userID,password,level)
第二步:对于1:1关系“使用”,可以在“card”模式中加入学号(学号为外键)。这样第一步得到的三个模式如下:
student(studentNo,studentName,sex,academy,major,grade,class)
card(cardID,money,studntNo)
第三步:对于M:N的联系,形成新的关系
Registe(cardID,studentNO,userID,note,Date,Time)
CancelCard(cardID,studentNo,cancelCash,date,time,userID,status)
Charge(cardID,studentNo,addCash,date,time,userID)
Online(cardID,studentNo,OnlineDate,OnlineTime,computer)
Outline(cardID,studentNo,OutelineDate,OutlineTime,concumeTime,concume,)
最后形成的8个关系模式:
T_student(studentNo,studentName,sex,academy,major,grade,class)
T_card(cardID,money,studntNo)
T_user(userID,password,level)
T_Registe(cardID,studentNO,userID,note,Date,Time)
T_CancelCard(cardID,studentNo,cancelCash,date,time,userID)
T_Charge(cardID,studentNo,addCash,date,time,userID)
T_Online(cardID,studentNo,OnlineDate,OnlineTime,computer)
T_Outline(cardID,studentNo,OutelineDate,OutlineTime,concumeTime,concume,)
下面个关系模型是根据系统功能设计的:
T_Worklog(userID,OnlineDate,OnlineTime,OutelineDate,OutlineTime)
T_Basicdate(Rate,tmpRate,unitTime,leastTime,PrepareTime,limitCash,head,date,time)(关于报表的表有待更新)
这个过程让我明白的是数据库中的表不是凭空想象的,同时也不是根据系统功能需要什么我就设计出什么字段,而是现根据数据库设计的规划阶段和需求分析阶段对用户需求以及可行性分析得出实体,联系,属性之后设计出表,应用到系统功能时再根据功能设计出视图。根据上面的步骤设计出来的表,减少耦合的同时也符合三范式(第一范式:不可再分,第二范式:防止局部依赖,第三范式:消除传递依赖)
PS:初学者,如有错误往指正!