机房重构——数据库设计

   ER图设计


   一开始参考了第一次的经验,画出了一个ER图,在现有的数据库的基础上做了两处改动,一是将日结账和周结账表合成一个账单表,因为这两个表的字段是一样的,查询日账单和周账单可以通过日期这个字段筛选得到。二是将原来的学生表拆分成了学生表和卡表。


机房重构——数据库设计_第1张图片

 

 

       画是画出来了,但是涉及到了11个表,表的数量合并了一个,又拆分了一个,不增不减。在全局ER模型优化这一步骤需要注意一点就是要消除冗余属性,即在工作表中有用户ID、登录日期、登录时间、机器号这些属性,在工作记录表中全部包含了这几个属性。在线表里的属性和上机记录表里的属性也是重复了,导致了在全局范围内的冗余属性,冗余属性应予消除。第二版ER图出炉~~~


机房重构——数据库设计_第2张图片


            在设计数据库时好几个表都需要记录日期和时间,在上图中也看的出来,一直有疑惑为什么要把日期和时间分开写,也没有深想,猜测可能是方便查询吧。但再后来跟同学交流期间了解到好像VS里是没有Time这个类型的,到后来转换起来也是个问题,相反的,把日期和时间结合起来更方便查询,于是又将ER图做了一番调整。第三版出炉~~~

 

机房重构——数据库设计_第3张图片

 

最终确定了9个表:

 

基本数据设定表

BasicData

退卡表

CancelCard

账单表

Check_Info

卡表

Card

上机记录表

LineLog

      充值表

Recharge

学生表

Student

用户表

User_Info

工作记录表

WorkLog

 

 

关系模式:

 

 用户表:(UserID,PWD,Level,UserName,state)

学生表:(studentNo,cardNo,studentName,sex,department,grade,specialty)

卡表:(cardNo,studentNo,Balance,state,regdate,Ischeck)

基础数据表:(serial,Rate,UnitTime,LeastTime,ReadyTime,LeastCash,head)

上机记录表:(serial,cardNo,computer,onDate,offDate,mins,cash)

工作记录表:(serial,UserID,LoginDate,LogoutDate,computer,state)

充值记录表:(serial,cardNo,RechCash,Balance,RechDate,UserID,computer)

退卡表:(serial,cardNo,CancelCash,CancelDate,UserID,computer)

账单:(serial,CheckCash,RechCash,CancelCash,RemainCash,CheckDate,head)

 

逻辑设计:

 

1)用户表(User_Info

描述

字段名

数据类型

长度

是否Null

用户ID

UserID

varchar

20

密码

PWD

varchar

20

验证等级

Level

varchar

20

用户名

UserName

varchar

20

状态

state

bit

1

 

2)学生表(Student

描述

字段名

数据类型

长度

是否Null

学号

studentNo

varchar

20

卡号

cardNo

varchar

20

姓名

studentName

varchar

20

性别

sex

bit

1

学院

department

varchar

20

年级

grade

char

6

专业

specialty

varchar

20

 

3)卡表(Card

描述

字段名

数据类型

长度

小数

是否Null

卡号

cardNo

varchar

20

 

学号

studentNo

varchar

20

 

余额

Balance

numeric

10

2

 

操作员

UserID varchar              20  

状态

state

bit

1

 

注册时间

regdate

smalldatetime

 

 

是否结账

Ischeck

bit

1

 

 

4)基础数据表(BasicData

描述

字段名

数据类型

长度

小数

是否Null

设定时间

serial

smalldatetime

 

 

单位费用

Rate

numeric

10

2


         

单位时间

UnitTime

int

 

 

至少上机时间

LeastTime

int

 

 

准备时间

ReadyTime

int

 

 

最小金额

LeastCash

numeric

5

2

管理员

head

varchar

20

 

 

5)上机记录(LineLog

描述

字段名

数据类型

长度

小数

是否Null

流水号

serial

int

 

 

卡号

cardNo

varchar

20

 

机器号

computer

varchar

20

 

上机日期

onDate

smallDatetime

 

 

下机日期

offDate

smallDatetime

 

 

上机总时长

mins

int

 

 

消费金额

cash

numeric

10

2

 

 

6)工作记录表(WorkLog

描述

字段名

数据类型

长度

是否Null

流水号

serial

int

 

用户ID

UserID

varchar

20

登录日期

LoginDate

smalldatetime

 

注销日期

LogoutDate

smalldatetime

 

机器号

computer

varchar

20

状态

state

bit

1

 

7)充值表(ReCharge

描述

字段号

数据类型

长度

小数

是否Null

流水号

serial

int

 

 

卡号

cardNo

varchar

20

 

充值金额

RechCash

numeric

10

2

当前余额

Balance

numeric

10

2

充值时间

RechDate

smalldatetime

 

 

操作员

UserID

time

 

 

机器号

computer

varchar

20

 

 

 

8)退卡表(CancelCard

描述

字段名

数据类型

长度

小数

是否Null

流水号

serial

int

 

 

卡号

cardNo

varchar

20

 

退卡金额

CancelCash

numeric

10

2

退卡日期

CancelDate

smalldatetime

 

 

操作员

UserID

varchar

20

 

机器号

computer

varchar

20

 

 

 

9)账单(Check_Info

描述

字段名

数据类型

长度

小数

是否Null

账单编号

serial

int

 

 

结账金额

CheckCash

numeric

10

2

充值金额

RechCash

numeric

10

2

退卡金额

CancelCash

numeric

10

2

上次结余

RemainCash

numeric

10

2

结账日期

CheckDate

smalldatetime

 

 

结账人

head

varchar

20

 

 

 

结语


       这次重构比起上次来要清晰很多,学的时间越久越会发现反反复复就是这些东西,其实这也是生活,太阳总是日出而升日落而降,只是这其中的过程可以千姿百态,找不到方向时,停下了好好想想,然后选择最顺手的去走就好了。

你可能感兴趣的:(数据库)