课程设计数据库部分开发步骤参考示例.docx
- 文档编号:30472675
- 上传时间:2023-08-15
- 格式:DOCX
- 页数:20
- 大小:22.79KB
课程设计数据库部分开发步骤参考示例.docx
《课程设计数据库部分开发步骤参考示例.docx》由会员分享,可在线阅读,更多相关《课程设计数据库部分开发步骤参考示例.docx(20页珍藏版)》请在冰豆网上搜索。
课程设计数据库部分开发步骤参考示例
一个简化的“招生录取系统”的实现过程
以下是实现这个系统的开发参考步骤:
(在说明书中相关代码部分用截图形式表示)
第一步内容:
在Oracle平台下创建开发所用数据库
使用DBCA创建一个数据库,如Enrollment_DB
第二步内容:
创建系统所需表空间
(1)创建用户数据表空间(一个或多个)
(2)创建索引表空间(一个或多个)
(3)创建回滚表空间(根据需要决定是否创建)
(4)创建用户临时表空间(根据需要是否决定创建)
第三步内容:
创建用户并授权
在开发之前,要为新的应用创建模式账户,并授予必要的权限,以便创建表和其他数据库对象。
为了能够创建账户和授权,必须使用具有足够权限的管理账户,可使用系统管理员帐户来创建新的应用账户。
1、创建账户
Createuserstudent
Identifiedbystudent
Defaulttablespacetest
Defaulttemporarytablespacetemp_test;
2、授予用户权限
(1)连接数据库权限
Grantconnecttostudent;
(2)创建表权限
Grantcreatetabletostudent;
(3)创建视图权限
Grantcreateviewtostudent;
(4)创建序列权限
Grantcreatesequencetostudent;
(5)创建同义词权限
Grantcreatesynonymtostudent;
(6)创建存储过程、函数权限
Grantcreateproceduretostudent;
(7)创建触发器权限
Grantcreatetriggertostudent;
(8)表空间使用权限
Grantunlimitedtablespacetostudent;
(9)使用新账户登录
Connectstudent/student@mydb;
至此,已经做好了使用student账户进行开发的准备。
第四步内容:
创建数据表
有院校信息表college和学生信息表student。
院校信息表college的结构
字段名称
类型
宽度
约束条件
简要说明
院校编号
Number
4
主键
院校的编号
院校名称
Varchar2
30
不允许为空
院校的名称
录取分数线
Number
3
在300-700之间
院校最低录取控制分数线
招生人数
Number
3
<=10
计划招生总人数
录取人数
number
3
默认初值为0
已经录取的人数
学生信息表st
字段名称
类型
宽度
约束条件
简要说明
编号
Number
5
主键
考生的编号
姓名
Varchar2
15
不允许为空
考生的姓名
性别
Varchar2
1
1-男,2女
考生的性别编码
总分
Number
3
〈=700
考生高考总分
同意调剂
Varchar2
1
默认为0
是否同意调剂,0-不同意,1-同意
一志愿
Number
4
外键,参照college表的院校编号
一志愿的院校编号
二志愿
Number
4
外键,参照college表的院校编号
二志愿的院校编号
录取状态
Varchar2
1
默认为0
状态:
0-末录取,1-录取
录取院校
Number
4
外键,参照college表的院校编号
录取院校的编号
录取志愿
Varchar2
1
默认为空
表示考生被哪个志愿录取,1-代表一志愿,2-代表二志愿,3—代表调剂
录取日期
Date
默认为空
录取的日期
操作人
Varchar2
10
默认为空
对考生投档的账户
udent的结构
1、创建院校信息表college
createtablecollege
(college_idnumber(4)primarykey,
College_namevarchar2(30)notnull,
Enroll_marknumber(3)check(enroll_markbetween300and700),
Recruit_numbernumber(3)check(recruit_number<=10),
Enroll_numbernumber(3)default0
)TABLESPACEtest;
2、创建学生信息表st
Createtablestudent
(stu_idnumber(5)primarykey,
Stu_namevarchar2(15)notnull,
Stu_sexvarchar2
(1)check(stu_sexin(“1”,”2”));
Total_Scorenumber(3)check(score<=700),
Adjustvarchar2
(1)default“0”,
Volunteer_1number(4),
Volunteer_2number(4),
Enroll_statevarchar2
(1)default“0”,
Enroll_volunteervarchar2
(1)defaultnullcheck(enroll_volunteerin(“1”,”2”,”3”)),
Enroll_collegenumber(4)defaultnull,
Enroll_datedate,
Operatorvarchar2(10),
Constraintfk_1foreignkey(volunteer_1)referencecollege(college_id),
Constraintfk_2foreignkey(volunteer_2)referencecollege(college_id),
Constraintfk_3foreignkey(enroll_college)referencecollege(college_id
)TABLESPACEtest;
第五步内容:
插入测试数据(分别向所有表插入测试数据)
1、向college表中插入数据
(1)方法一:
通过insert…inot语句插入
insertintocollegevalues(1001,'清华大学',620,5,0);
insertintocollegevalues(1002,'北京大学',600,4,0);
insertintocollegevalues(1003,'武汉大学',550,6,0);
insertintocollegevalues(1004,'华南科技大学',530,3,0);
insertintocollegevalues(1005,'复旦大学',580,4,0);
insertintocollegevalues(1006,'中山大学',560,5,0);
insertintocollegevalues(1007,'华南理工大学',520,4,0);
insertintocollegevalues(1008,'暨南大学',510,3,0);
insertintocollegevalues(1009,'深圳大学',500,6,0);
insertintocollegevalues(1010,'深圳职业技术学院',450,8,0);
commit;
(2)方法二:
通过执行匿名PL/SQL块插入
begin
insertintocollegevalues(&no,'&school_name',&score,&st_count,&count);
end;
(3)方法三:
通过调用过程来插入
createorreplaceprocedureinsert_college(p_nonumber,p_namevarchar2,p_scorenumber,P_count1numberp_count2number)
is
begin
insertintocollegevalues(P_no,p_name,p_score,p_count1,p_count2);
end;
2、向student表中插入数据
方法同上。
在插入数据中可以考虑使用序列来自动生成考生的编号。
(1)创建序列stuno_squ
Createsequencestuno_squ
Startwith10001
Incrementby1
Nocache
Nocycle;
(2)插入数据
insertintostudent(编号,姓名,性别,总分,一志愿,二志愿,同意调剂)
values(stuno_squ.nextval,'陈文政','1',598,1010,1001,'0');
第六步内容:
检查插入的数据
1、检查college表中数据
Select*fromcollege;
2、检查student表中数据
Select*fromstudent;
3、通过联合查询检查考生的志愿(示考生姓名、总分和所报考的第一志愿的院校名称)
第七步内容:
根据需要,创建视图
为了数据的安全性和简单查询语句的复杂性,根据需要要创建一些视力产。
一旦建立视图,通过直接对视图进行查询而不是对基表进行查询,可以实现数据的保护,并简化操作。
同时可建立视图的同义词,用于为复杂对象名生成一个简化和便于记忆的别名。
根据系统查询需要的实际情况,本系统中考虑建立如下表所示的视图:
序号
视图名称
同义词
作用
1
考生成绩
Score
查看学生的成绩
2
录取考生
Result
查看已录取考生
3
录取情况
status
查看录取没有完成的院校
1、考生成绩视图
基表:
student
结构:
考生成绩(编号,姓名,总分),只读视图
功能:
为了方便查看学生的成绩,建立学生成绩视图,显示全部学生的考号、姓名和成绩。
(1)创建视图
Createorreplaceview考生成绩(编号,姓名,总分)
As
Selectstu_id,stu_name,total_scorefromstudent
Withreadonly;
(2)生成考生成绩视图的同义词score
Createsynonymscorefor考生成绩;
2、录取考生视图
基表:
student和college
结构:
录取考生(编号,姓名,院校名称),条件是只显示录取的考生信息,只读视图,需要通过建立相等连接来实现。
功能:
为了方便查看学生的录取结果,建立录取学生的视图,显示被录取学生的考号、姓名和录取院校名称。
(1)建立视图
Createorreplaceview录取考生(编号,姓名,录取院校名称)
As
Selectstu_id,stu_name,college_namefromstudent,college
Whereenroll_state=”1”andstudent.enroll_college=college.college_id
Withreadonly;
(2)生成录取考生视图的同义词result
Createsynonymresultfor录取考生;
3、录取情况视图
基表:
college
结构:
录取情况(院校编号,院校名称,状态,招生人数,缺额),只读视图
功能:
显示招生计划完成情况,计划招生人数和录取缺额。
(1)创建视图
Createorreplaceview录取情况(院校编号,院校名称,录取人数,招生人数,缺额)
As
Selectcollege_id,college_name,decode(sign(recrut_number-enroll_number),1,”未完成”,’完成’),recruit_number,recruit_number-enroll_number
Fromcollege
Withreadonly;
其中Sign函数返回算术运算结果的符号,结果大于0返回1,等于0返回0,小于0返回-1,如果招生人数大于录取人数,则表达式sign(招生人数-录取人数)的结果为1,此时,DECODE函数返回”未完成”;否则返回”完成”
(2)生成录取情况视图的同义词status
Createsynonymstatusfor录取情况;
第八步容:
根据需要,创建索引(考虑到通常会根据哪些字段来进行查找,创建合适索引以提高查询效率)
应用程序的设计和实现
系统的功能要通过编程来实现,根据不同的功能划分不同的模块,模块以存储过程、存储函数或触发器的形式,作为数据库的对象存储数据库当中,也可以将多个模块组合成为包。
一、函数的创建
首先要建立一些函数,以便其他模块或查询引用。
根据需要,设计如表1-1所示的函数。
表1-1:
函数
序号
函数名称
作用
1
Get_student_name
通过考号获得考生姓名
2
Get_score
通过考号获得考生成绩
3
Get_college_name
通过院校编号获得院校名称
1.返回考生姓名函数GET_STUDENT_NAME
函数名和参数:
GET_STUDENT_NAME(p_bh)
该函数的返回值类型为VARCHAR2。
其中:
p_bh代表考生编号。
功能:
通过考生的编号获得考生的姓名。
返回考生名称函数如下:
createorreplacefunctionget_student_name(p_nonumber)
returnvarchar2
as
v_namevarchar2(10);
begin
select姓名intov_namefromstudentwhere编号=p_no;
return(v_name);
exception
whenothersthen
return('无');
end;
下同。
二、存储过程的创建
系统的功能通过存储过程来完成。
根据分析,考虑需要,建立如表1-2所示的存储过程。
表1-2:
存储过程
序号
过程名称
作用
1
Input_college
输入院校记录到院校表
2
Input_student
输入考生记录到考生表
3
clearstatus
初始化、清除考生录取状态
4
Proc1
一志愿投档
5
Proc2
二志愿投档
6
autoproc
自动投档
7
Show_score
查询考生分数
8
Show_result
查询考生录取状态
9
Student_list
院校录取考生列表
10
College_total
统计院校录取信息
1、插入院校存储过程INPUT_COLLEGE
过程名和参数:
INPUT-COLLEGE(p_yxbh,p_yxmc,p_lqfsx,p_zsrs)
其中P_yxbh代表院校编号,p_yxmc代表院校名称,p_lqfsx表示录取分数,p_zsrs表示招生人数
功能:
用于建立院校信息。
每次执行时插入一个院校,部分字段内容通过参数传递,没有指定参数的字段取默认值
插入院校程序如下:
(1)输入和高度以下存储过程:
createorreplaceprocedureinput_college
(p_yxbhinnumber,p_yxmcinvarchar2,P_lqfsxinnumber,p_zsrsinnumber)
as
rnumber;
begin
null;
selectcount(*)intorfromcollegewhere院校编号=P_yxbh;
dbms_output.put_line(r);
ifr>0then
dbms_output.put_line('院校'||p_yxbh||'已存在');
else
insertintocollege
values(P_yxbh,P_yxmc,P_lqfsx,P_zsrs,0);
commit;
dbms_output.put_line('院校'||p_yxmc||'已插入成功');
endif;
exception
whenothersthen
dbms_output.put_line('院校'||p_yxmc||'插入失败');
end;
(2)执行该存储过程。
executeinput_college(1011,'吉林大学',570,5600);
(3)执行结果:
说明:
如果院校编号已经存在,则提示不能插入,通过存储过程插入考生,可以正确显示插入过程的错误信息。
下同。
三、包的创建(根据需要,考虑是否需要创建包)
四、触发器的设计
通过触发器可以为数据提供进一步的保护。
下面设计两种常见类型的触发器。
1、分数修改触发器
如果要自动记录对数据库的数据进行的某些操作,可以通过创建触发器来实现。
在考生数据库中,高考的分数字段的内容十分重要,是录取的最重要依据,应该正确设置对其进行操作的权限,并做好操作的记录。
权限可以通过高定特定的帐户进行控制,记录操作可以通过触发器来实现。
通过触发器来记录对考生表高考分数字段的插入、删除和修改操作,记录的内容可以包括:
操作时间、操作人帐户、执行的操作、考生编号、原分数和修改后的分类,以上内容记录到表Operation_log。
表1-3:
Operation_log表的结构
字段名称
类型
宽度
约束条件
简要说明
序号
Number
10
主键
记录编号,从1开始递增,取自序列
帐户
Varchar2
15
不允许为空
操作人帐户
时间
Date
操作时间,取自sysdate
操作
Varchar2
10
操作种类
考生编号
Number
5
考生编号
原分数
Number
3
修改前的分数
新分数
number
3
修改后的分数
(1)创建如下的记录表
createtableoperation_logsOperation_log
(序号number(10)primarykey,
账户varchar2(15)notnull,
时间date,
操作varchar2(10),
考生编号number(5),
原分数number(3),
新分数number(3)
);
(2)创建一个个主键序列operation_id
createsequenceoperation_id
incrementby1
startwith1
maxvalue9999
nocycle
nocache
(3)创建和编译触发器
createorreplacetriggeroperation
before
deleteorinsertorupdateof总分
onstudent
foreachrow
begin
ifinsertingthen
insertintooperation_logs
values(operation_id.nextval,USER,sysdate,'插入',:
NEW.编号,NULL,:
NEW.总分);
elsifdeletingthen
insertintooperation_logs
values(operation_id.nextval,USER,sysdate,'删除',:
OLD.编号,:
OLD.总分,NULL);
else
insertintooperation_logs
values(operation_id.nextval,USER,sysdate,'修改',:
OLD.编号,:
OLD.总分,:
NEW.总分);
endif;
end;
2、级联修改触发器
还可以创建级联修改触发器update_college,以实现如下功能:
当修改院校的编号时,自动修改学生表中与院校编号关联的字段内容。
学生表共有3个字段与院校编号关联,即一志愿、二志愿和录取院校
createorreplacetriggerupdate_college
after
updateof院校编号
oncollege
foreachrow
begin
updatestudentset一志愿=:
NEW.院校编号where一志愿=:
OLD.院校编号;
updatestudentset二志愿=:
NEW.院校编号where二志愿=:
OLD.院校编号;
updatestudentset录取院校=:
NEW.院校编号where录取院校=:
OLD.院校编号;
end;
系统的测试和运行(需要显示出结果)
通过系统的模拟运行,可以检验模块的正确性。
在系统运行过程中,也要通过查询的方法跟踪检查系统的状态和数据。
一、运行准备
通过在SQL*PLUS环境中使用SQL语句可以进行多种查询,来辅助录取过程获得信息。
如果有必要的话,查询也可以设计成为存储过程,存储在数据库中,并可以进行调用。
在这里,比较复杂不能通过SQL语句实现的查询或统计将通过存储过程或函数来实现,直接使用查询是进行测试的一种很好的方法,在这里也列出了一些可能用到的查询。
1、按姓名进行模糊查询
查找姓王的考生:
select编号,姓名,性别,总分fromstudentwhere姓名like'王%';
2、按分数或分数段进行查询
查询分数在600~650分之间的考生:
select编号,姓名,性别,总分fromstudentwhere总分>600and总分<650;
3、查询分数最高的考生
查询总分最高的考生:
select编号,姓名,性别,总分fromstudentwhere总分=(selectmax(总分)fromstudent);
4、查询分数最高的考生报考的院校
查询分数最高的考生一志愿报考的院校:
select编号,姓名,性别,总分,院校名称fromstudents,collegec
wheres.一志愿=c.院校编号ands.总分=(selectmax(总分)fromstudent);
5、查询考生分数
查询考生分数:
executeshow_score(10005);
6、查询招生人数最多的院校
查询招生人数最多的院校:
Select院校名称,招生人数FROMCOLLEGE
WHERE招生人数=(selectMax(招生人数)FromCOLLEGE);
7、检查operation触发器的记录
select*fromoperation
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 数据库 部分 开发 步骤 参考 示例