MySQL数据库设计说明.docx
《MySQL数据库设计说明.docx》由会员分享,可在线阅读,更多相关《MySQL数据库设计说明.docx(16页珍藏版)》请在冰豆网上搜索。
MySQL数据库设计说明
MySQL数据库设计
课程设计说明书
题目:
驾校学员管理糸统
院系:
信息与智能工程糸
专业班级:
嵌入式技术与应用
学号:
2011251011
学生:
杳
指导教师:
2012年1月9日
驾校学员管理系统
-•系统概述
驾校学员管理系统主要用于管理驾校的各种数据,利用这种mysql数据库的驾校管理系统可以给学员的管理资料的整理,资料的查询,数据的处理带来了很大的方便,能够很大的提高管理员的工作效率.
本系统主要用于管理学员的学籍信息/体检信息/成绩信息和驾驶证的领取信息等•这些信息的录入/查询/修改等操作都是该系统的重点解决的问题.
本系统分为5个管理部分,即用户的管理/秘籍信息管理/体检信息管理/成绩信息管理和领证信息管理.
本驾校学员管理系统的开发语言为JaVa语言,选择的数据库是mysql.本系统是B/S架构的系统,需要Web服务器tomcat
二.系统功能
驾校学员管理系统主要的功能是5个管理部分,即用户的管理/秘籍信息管理/体检信息管理/成绩信息管理和领证信息管理•本系统的管理模块如图所示
驾校学员管理糸统
图中模块的详细介绍如下:
用户信息管理:
主要是对管理员的登录进行管理.管理员登录成功后,系统会进入到系统的管理界面•而且管理员可以修改自己的密码.
学籍信息管理:
主要是对学生信息的插入/查询/修改和删除.查询学员的信息时,可以通过学号//报考的车型和学员的状态进行查询/通过这四个方面的处理,使学籍信息的管理更加的方便.
体检信息管理:
主要对学员的体检信息的插入/查询/修改和删除.
成绩信息管理:
对学员的学籍信息进行插入/查询/修改和删除等操作,以便有效的管理学员的成绩信息.
领证信息管理:
对学员的驾驶证的领取进行管理.这部分主要是对学员的领证信息的插入/查询/修改和删除等操作.这样可以保证学员的驾驶证领取后,领取驾驶证的信息能够有效的管理•
三.数据库设计.
数据库设计是开发管理系统的一个重要的步骤,下面是数据库的设计过程•
数据库设讣是要确定创建一些表/表中的字段/字段的数据类型和字段的长度.
1.设计表
本系统所有的表都放在drivingschool数据库下,创建drivingschool数据库的SQL代码如下:
CREATEDATABASEdrivingschool;
DyQ(II.>ShOvJdatabases;
:
Da.ta.base
!
infoPnIaLtion_SChema!
bookdata
!
dι*iuInCfschool
!
mysql
!
test5rowsinS巳七<0.03sec〉
运行的结果如图:
1.user表
USer表中存储用户名和密码,所以将USer表设汁为只有两个字段.USernamez?
段表示用户名,PaSSWOrd字段表示密码•因为用户名和密码都是字符串,所以这两个字段都是使用VarChar类型•而且将这两个字段的长度都设置为20.而且用户名必须唯一・USer表的每个字段的信息如表所示
字段名
字段描述
数据类型
主键
外键
非空
唯
默认值
自增
USername
用户名
VarChar(20)
是
否
是
是
无
否
PaSSWOrd
密码
VarChar(20)
否
否
是
否
无
否
根据上表的容创建USer表•创建USer表的语句如下:
CREATETABLEuser(
USernameVarChar(20)PrimarykeyUniqUenotnull,
PaSSWOrdVarChar(20)notnull
);
创建完成后,可以使用desc语句来查询USer表的结构,如图所示:
mysql>descUSeFJ
*H+■!
H÷h
IFieIdSTypeSNUll!
KeSF'DefaUIt∣EXtraS
+++-b十♦+
:
HSepnane:
UaFChar(20):
NO:
PRl:
MULL:
:
1PaSSWOFd!
UaFChaI√20)!
NO!
!
MULL!
!
♦H+■!
H÷K
2rowsinSet<0.02sec>
1・StUdentinfO表
StUdentinfO表中主要的存放学员的学籍信息,包括学号//性别/年龄和号等信息•用SnO字段表示学号,因为学号是StUdentinfO表的主建,所以Sno字段是下能为空值的,而且必须是唯一的・identify字段表示学员的,而每个学员的必须是唯一的•因为在些的是以字母X结束的,所以identify字段设计为VARCHAR类型・
SeX字段表示为学员的性别,该字段只有”男”和"女”两种取值•因此SeX字段使用enum类型.SCOnditiOn字段表示学员的学业状态,每个学员只有3种状态,分别为”学习”Γ结业”Γ退学”•因此,Scondition字段也使用enum类型•入学时间和毕业时间都是日期,因此选择date类型.s_text字段用于存储备注信息,所以选择text类型比较合适・StUdentinfo表的每个字段的信息如下表所示:
StUdentinfO表创建在功以后,通过desc语句查看StUdentinfO表的结构,也可以通过ShOWCreatetable语句查看StUdentinfO表的详细信息,查看如图:
ιI.
illrowsinSetmysql>ShOWCreatetableStUdentinfo;
!
StUdentinfO;CREArETABLEIStU(Ientinfo,<
BSnO%int<8>NOINULL,'snane'UarChar<2U>NOINULL,'sex'enun<,男J女〉NoTNULL,Jge'int<3>DEFAULTNULL,'identify'UaVChal<18>NOTNULLF'tel'UaFChar<15>DEFAULTNULL,'car_type'UarChaι<4>NoTNULL,⅛npoll-time'dateNOTNULL,'leaue.time'dateDFFfiIJLTNULL.
textλ
'econdition'entm「学习结业退学〉NOTNULL,'s-,to×t
PRIMARyKEY<⅛lw'>,UHlQUEKEY'snu'<'srw'>,UNlQUEKEY'identify'「identify'儿KEYWindex_StU_nane%<'snaπe*>j.KEy'index_car*('caυ-ti∣pe'>j.KE?
'index_COn'('scondition'>
>ENGINE=InnODBDEFAlJLTCHARSET=IatinI!
++
Ψ:
mysql>descStudentinfo;
⅜∙
+-
4
卜
++
:
FieId
II
TyPes
NUlII
«
:
KeiF
II
DefaUItI
IEXtra:
L.-Λ.
TBi----————————
~T-
——————r
卜
T-
Br
SnO
II
int<8>:
NO
:
PRI
II
NULL
II
II
Snane
II
UarChav<20>!
NO
!
MUL
II
NULL
II
II
SeX
II
enuπ(,男—,女。
;
NO
I
:
1
II
NULL
II
II
age
■I
int<3>:
VES
!
II
NiJLL
I■
II
identify
■I
UarChav<18>!
NO
:
UNI
II
NiJLL
I■
II
tel
■I
UarChav<15>!
VES
!
II
NiJLL
I■
II
Car_type
II
UaVCbar<4>!
NO
1MUL
II
NULL
II
II
enroll_time
II
date!
NO
!
II
NULL
II
II
IeaUe_time
II
date!
YES
!
II
NULL
II
II
SCOnditiOn
II
enun<^学习,「结业艮学,〉;
NO
:
MUL
II
NULL
II
II
s_text
II
text!
VES
I
II
NlJLL
II
II
11vov/sInSet<0-03sec>
3・healthinfo表因为驾校体检主要体检身高/体重/视力/听力/拜色能力/腿长和血压信息•所以heathinfo表中必须包含这些信息•身高/体重/左眼和石眼视力分别用height字段/weight字段/left_sight字段和rightβsight字段表示•因为这些数值有些小数,所以这些字段都定义成float类型•拜色能力/左耳听力/石耳听力/腿长和血压分别用CHfferentiate字段/IefJear字段∕right-ear字段/legs字段和PreSSUer字段表示.这些字段的取值都是在特定儿个取值中取一个,因此定义成enum类型・创建healthinfo表的SQL代码如下:
Createtablehealthinfo(
Idint(8)PrimClrykeyUniCIUenotUnlIauto-increment,
SnOint(8)UniqUenotnull,
SnameVarChar(20)notnull,
Heightfloat,
Weightfloat,
Differentiateenum('正常','色弱','色盲'),
Left-Sightfloat,
RighteSightfloat,
Left_earenum('正常','偏弱'),
Right-earenum('正常','偏弱'),
LegSenum('正常'J不相等'
PreSSUreenum('正常'「偏高'「偏低'
HiStOryVarChar(50),
H_texttext,
COnStrainthealth.fkforeignkey(sno)
ReferenCeSStUdentinfO(SnO)
);
创建healthinfo表时将SnO字段设置为外键,而且外键的别名为health_fk.而且,id字段加上了auto-increment属性,这样就可以将id字段设置为自增字段.
表建好了后用desc语句查询,如下:
nysql>deschealthinfo;
-W
+
!
FieId
I
■
r
!
TyPe
■
!
NulI
P
:
Key
P
!
DefaUIt
丄-
!
EXtVa
-Λ.
厶
■
!
id
!
int<8>
:
NO
:
PRl
!
NULL
!
auto_incre
nent!
'SnO
I
!
int<8>
!
NO
!
UNI
!
NULL
1I
I
'height
■
'fIOat
:
VES
II
:
NULL
■I
I
SWeight
I
!
F丄Oat
:
YES
BI
:
NULL
aa
I
;differentiate
I
!
enun<*lE常J
色弱色盲TiYES
aI
:
NULL
II
I
;Ieft_sigbt
I
!
float
!
YES
■I
:
NULL
■I
■
;Vlgħt-sight
I
;fIOat
!
YES
■I
5NULL
■I
I
iIeft_ear
I
;enum「正常J
,偏弱T;YES
■I
!
NULL
1I
I
;riyht-ear
I
»eιιuι∣ι<,正常
偏弱T;YES
II
!
NULL
1I
I
iIeyS
I
I匕num—正常,,
不相等,〉IVES
I
JNULL
I
I
'PrCSStICr
■
ICnUm<,正常*■
偏咼偏低,〉IVES
I
!
NULL
I
I
•bi3t0ry
1
IVarCbαr<50>
IVES
J
INULL
I
1
!
b_toxt
I
'text
!
VES
aB
!
NULL
IS
I
+
13rowsinSet
my
(Q.04eec>
—■————
酷狗2012,
4・COUrSeinfO表
COUrSeinfO表用于存储考试科U的信息,每个科U都必须有科U号/科U名称.这个表只需要3个字段就可以了,cn。
字段表示科IJ号,Cname字段表示科口名称,beforeβcour字段表示先行考试的科Ll号•每条记录中,只有before-cour字段中存储的科U考试通过后,学员才可以报考Cno表示的科U.COUrSeinfO表的每个字段的信息如下
名字
段述字描
型类据数
≡
空
K
TrT
一唯
认
默值
增自
Cno
科目号
⑷nt
是
否
是
是
无
否
H称科名
否
否
是
是
无
否
C一
lr-≡
⑷ntI
π
π
π
π
口
创建COUrSeinfO表的SqI代码如下:
CreatetableCOUrSeinfo(
CnOint(4)Prinlarykeynotnullunique,
CnameVarChar(20)notnullunique,
BefOre_COUrint(4)notnulldefaultO
);
COUrSeinfO表创建完成后用desc语句查询,如下图:
msjsql>descCoUPSeinfO;
FieId
-+-
II
TyPe
-+-
II
+
MlIlI!
KesF
■
I
I
Default
-÷
!
Eκtι*a
■-T-T-I-T--T
CrK)
II
int<4〉
T-
I
I
Ho
P-一
I
I
PRl
Te-
I
I
HULL
丁―——————
I
I
Cnalne
II
VarChar<20>
II
No
II
UNl
II
NULL
II
heforeβcour
II
int(4)
II
MO
II
II
0
II
-+-
-+-
-÷
3rowsin:
SEt(0.05SeC)
5・gradeinfo表
GradeinfO表用于存储学员的成绩信息.这个表必须和StUdent和COUrSe表建立联糸.因此设计Sno字段和Cno字段.SnO字段和CnO字段作为外键.Sno字段依赖于StUdentinfO表的SnO字段,CnO字段依赖于COUrSeinfO表的CnO字段.这里用time字段表示某一个科U的考试次数•默认的情况下是第一次参加考试,因此times字段的默认值为1.分数用grade字段表示,默认分数为O分•它的每
个字段的信息如下图所示:
宇段名
字段描述
数据类型
主键
外键
非空
唯一
默认值
自噌
Id
编号
INT⑻
是
否
是
是
无
是
SnO
学号
INT(8)
是
是
尢
CnO
科Ht>
INT(4)
否
否
无
否
IaStjime
占试时间
DATE
否
否
否
否
无
否
times
考试次数
INT(4)
否
否
1
否
grade
FLOAT
否
否
否
否
O
否
创建gradeinfo表的SqI代码如下:
Createtablegradeinfo(
Idint(8)PrimarykeyUniqUenotnullauto-increment,
SnOint(8)notnull,
CnOint(4)notnull,
Last-timedate,
TimeSint(4)default1,
GradefloatdefaultO,
COnStraintgrade-sno-fkforeignkey(SnO)
ReferenCeSStUdentinfO(SnO),
COnStraintgrade-cno-fkforeignkey(CnO)
);
代码执行后,在SnO字段被设置成外键,该外键的别名为grade_sno_fk.同时,CnO字段也被设置成外键,改外键的别名为grade_CnO_fk.用desc语句查询gradeinfo表的结构如下图:
mysql>descgradeinfo;
Field
I
I
_1_
TyPe
-+
!
NHll
■-T-I-I-I
II
≡≡≡≡≡≡≡∙≡Key
→
IDefAUIt
」■-I-I-T-T--Γ-IJ
-+
!
FXtFa
id
F—
I
I
int<8>
!
NO
-F—
I
I
PRI
〒—————————
!
NULL
!
aiitOeinCrenent
SnO
II
int<8>
!
NO
II
MUL
!
NULL
II
CnQ
II
int<4>
!
NO
II
MUL
!
NULL
II
IaSt_time
II
date
∖VES
II
!
NULL
II
times
II
int<4>
;VES
II
I1
II
grade
II
float
;VES
II
I0
II
—
--t-
-+
--t-
—
-+
-+
6rowsinSet<0.06SeC)
6.IiCenSeinfO表
LiCenSeinfO表用于存储学员领取驾驶证的信息•这个表中需要记录学员的学号//驾驶证/领取的时间/领取人等信息.
驾驶证用Ino字段表示,每个人的驾驶証号都是唯一的.IiCenSeinfO表的每个字段的信息如下图所示:
字段名
字段扌苗述
数据娄型
主键
外键
非空
唯一
默认值
自增
id
编号
!
NT(8)
足
否
足
无
SnO
INT(S)
否
是
足
是
无
否
^name
姓名
VARCHAR(20>
否
否
是
否
无
否
InO
镯缎址兮
VARCHAR(⑻
是
足
无
receivetime
领证时间
DATE
否
否
否
Al
rccciVCnamC
领证人
VARCHAR(20)
杏
否
否
杏
无
否
LteXt
篇注
TEXT
否
否
否
否
无
否
创建IiCenSeinfO表的SqI代码如下:
CreatetableIiCenSeinfo(
Idint(8)PrimarykeyUniqUenotnullauto_increment,
SnOint(8)UniqUenotnull,
SnameVarChar(20)notnull,
LnOVarChar(18)UniqUenotnull,
ReCeiVe_timedate,
ReCeiVe_nameVarChar(20)J
L_texttext,
COnStraintIiCenSe_fkforeignkey(SnO)
ReferenCeSStUdentinfO(SnO)
);
SnO'F段设置成外键,该外键的别名为IiCenSe_fk・Iiceseinfo表创建完成后,使用desc语句查询IiCenSeinfO表的如构如下图:
mysql>descIiCenSeinFO;
A亠亠▲<Λ.-Λ.
T
T
-Γ-
T
T
T—
T
!
FieId
I
I
TyPe
II
■
NUlI
I
I
Ke5F
II
DefaUIt
I
I
∙_
E×tι*a
I
I
•T-
fl
T-
一
T
Iid
I
I
int(8>
II
NO
aI
PRI
II
NULL
II
autoβin∣crement
II
!
Sno
I
I
int<8)
II
NO
I
I
UNI
II
NULL
II
I■
!
SnafTIe
II
uaι*chav<20>
II
NO
II
II
NULL
II
II
Iino
II
Uar-Chare18>
II
NO
II
UNI
II
NULL
II
II
!
rece:
ive_time
II
date
I
I
VES
I
I
I
I
NULL
II
I
I
!
receive_name
II
uaι*char<20>
II
VES
II
II
NULL
II
II
Ii_text
I
I
text
II
YES
aI
II
NULL
II
II
7rowsinSet<0.02SeC>
1.在StUdentinfO表上建立索引
下面使用Createindex语句在Sname初段上创建名为index-stUename的索引.sql代码如下:
Createindexindex_stu_nameOnStUdentinfO(Sname);
Createindexindex-carOnStUdentinfO(Car-type