科研管理信息系统数据库设计.docx
- 文档编号:4736252
- 上传时间:2022-12-08
- 格式:DOCX
- 页数:21
- 大小:89.50KB
科研管理信息系统数据库设计.docx
《科研管理信息系统数据库设计.docx》由会员分享,可在线阅读,更多相关《科研管理信息系统数据库设计.docx(21页珍藏版)》请在冰豆网上搜索。
科研管理信息系统数据库设计
1.问题描述
1.1背景
理论背景:
某高等学校拟建立一套科研管理信息系统,实现对科研工作的信息化管理,要求系统对数据的存储完整,查询迅速,操作方便。
实际背景:
建立一套完整的数据库系统,使管理员和用户能够对不同权限的数据进行查询,修改等操作,加强学校对科研工作的研究,通过这一数据库管理系统促进教师的工作水平。
1。
2数据需求
通过分析,本系统需要输入的数据如下:
(1)学院:
包括学院编号,学院名称
(2)行政机关:
单位名称,单位地址
(3)系:
系名称,学院编号,联系电话
(4)教职员工:
职工编号,姓名,系名称,单位名称,性别,出生年月,政治面貌,籍贯,毕业院校,联系电话
(5)科研活动的信息:
承担课题,发明专利,撰写论文,创作著作
(6)科研项目的信息:
课题(立项,鉴定,获奖),专利,论文,著作
(7)课题:
课题编号,课题名称,承担单位,合作单位
(8)专利:
专利号,专利名称,授予时间,主持人,人员,专利类型,总分
(9)论文:
论文名称,主编,副主编,出版刊物名称,刊号,刊物级别,总分
(10)著作:
书名,出版社,出版时间,职工编号,姓名,著作类别,总分
(11)课题立项:
立项编号,课题编号,课题来源,得分,参与人员,职工编号
(12)课题鉴定:
鉴定编号,课题编号,成果等级,参与人员,得分,职工编号
(13)课题获奖:
获奖编号,课题编号,获奖级别,姓名,职工编号,获奖总得分
1.3事务需求
1、要求能录入、修改和删除个人科研信息详情.
2、要求能按系,学院、部门或科研种类统计所有人员各项科研项目情况。
3、要求可以按时间(某年或某时间段)查询及统计个人、各单位的科研项目详细情况.
4、计算科研得分情况。
按评分规则将计算的得分存储,以便将来统计查询。
5、要求能够修改或设定评分规则.
6、要求可能以从各个口径统计得分,如个人各项得分,各单位各项得分,加上年份控制.
7、要求能使用饼图、柱状图、折线图、趋势图等显示相关信息.
8、输出要求能打印正规报表,能导出到excel或word.
9、要求有权限管理、分级审核功能。
除各单位管理员外,个人只可以维护自己的科研信息。
个人科研信息提交后,由所在单位管理员审核,审核后,个人不能修改和删除已审核的科研信息.所在单位管理员审核无误后提交学校科研管理员审核,提交后所在单位管理员不能对该记录进行修改和删除。
2.解决方案(或数据库系统设计)
2.1E-R模型设计
1)选择file→newmodel→ConceptualDataModel,建立CDM模型(即概念数据模型).
2)创建实体
3)双击创建的实体符号,在此窗口“General”标签中可以输入实体的名称、代码、描述等信息。
4)添加实体属性:
上述窗口的“Attribute”选项标签上可以添加属性。
5)建立联系:
在图形窗口中创建两个实体后,单击Relationship工具,单击一个实体,在按下鼠标左键的同时把光标拖至别一个实体上并释放鼠标左键,这样就在两个实体之间创建了联系,右键单击图形窗口,释放工具。
2.2逻辑模型
tools→GeneratePhysicalDataModel。
。
从DBMS下拉列表框选择MicrosoftSQLServer2005选择Share单选按钮,单击OK即可.
2.3数据库实现
1)选择Database-〉GenerateDatabase。
设置directory和filename,单击确定。
2)首先启动SQLServer2005建立数据库,执行脚本,生成数据库对象。
执行脚本的代码如下:
(3)分析脚本,运行脚本,在SQLserver2005中生成数据库,表的结构如下:
2.4处理流程图
(1)触发器:
lunwenzongfen
功能:
在向论文表填写刊物级别时,自动填写总分列,判断论文总分。
(2)触发器:
zhuzuozongdefen
功能:
在向著作表填写著作类别时,自动填写总分列,判断著作总分.
(3)触发器:
defen
功能:
在向专利表填写专利类型时,自动填写总分列,判断专利总分。
(4)存储过程:
1.存储过程:
lunwen_scoreconvert2
2.功能:
通过职工编号查询个人单项得分,如论文。
(5)存储过程:
zhuzuo_scoreconvert1
功能:
通过职工编号获得个人著作得分.
(6)存储过程:
zhuanli_scoreconvert3
功能:
通过职工编号获得个人得分。
3.系统实现
3。
1开发环境
本系统适用于微型机,内存容量为512M,外部设备有主机,显示器,键盘,鼠标。
采用的结构化查询语言(SQL),运用到的软件有:
powerdesigner(运行环境Win2003,WinXP,Win2000,Win9X)sqlserver2005.
3。
2处理模块编码
1)论文存储过程:
ALTERprocedure[dbo]。
[lunwen_scoreconvert2]@F_职工编号int//定义存储过程名称
as
begin
declare@score2int
declare@num2int
declare@S_刊物级别char(50)
declare@S_分工char(50)
declare@F_姓名char(50)
declare@S_论文名称int//定义变量名称
set@S_刊物级别=(selecttop1刊物级别from论文a,撰写bwhereb.职工编号=@F_职工编号anda.论文名称=b.论文名称)
set@S_分工=(selecttop1分工from撰写awherea。
职工编号=@F_职工编号)
set@num2=(selecttop1count(论文名称)from撰写where论文名称in(select论文名称from撰写where职工编号=@F_职工编号))
set@F_姓名=(selecttop1a.姓名from教职员工a,撰写bwherea。
职工编号=@F_职工编号anda。
职工编号=(b。
职工编号))//获取表中的码
begin
if@S_刊物级别='核心期刊’set@score2=100
elseif@S_刊物级别='一般期刊'set@score2=90
elseif@S_刊物级别=’报纸杂志’set@score2=80
elseif@S_刊物级别='会议论文’set@score2=70
begin
if@S_分工=’主编'set@score2=@score2+@score2*0。
6
elseif@s_分工='副主编’set@score2=@score2+(@score2*0.4)/(@num2-1)//编写评分规则
end
end
end
begin
selectresult='职工号:
'+str(@F_职工编号)+’职工名:
’+@F_姓名+’论文得分为:
'+str(@score2,5,1)//设置显示方法
end
2)著作存储过程:
setANSI_NULLSON
setQUOTED_IDENTIFIERON
GO
ALTERprocedure[dbo].[zhuzuo_scoreconvert1]@F_职工编号int//定义存储过程名
as
begin
declare@score1int
declare@W_著作类别varchar(10)
declare@F_姓名varchar(50)//定义变量名称
set@W_著作类别=(select著作类别from著作a,创作bwherea。
职工编号=b.职工编号andb.职工编号=@F_职工编号)
set@F_姓名=(select姓名from教职员工awherea。
职工编号=@F_职工编号)
begin
if@W_著作类别='专著’
set@score1=100
elseif@W_著作类别=’编著'
set@score1=90
elseif@W_著作类别='教材'
set@score1=80
else
set@score1=70//编写评分规则
end
end
begin
selectresult=’职工号:
’+str(@F_职工编号)+’职工名:
’+@F_姓名+'著作得分为:
’+str(@score1,5,1)//设置显示方法
end
3)专利存储过程:
ALTERprocedure[dbo].[zhuanli_scoreconvert3]@F_职工编号int//定义存储过程名
as
begin
declare@score3int
declare@O_专利类型char(50)
declare@O_分工char(50)
declare@num3int
declare@F_姓名char(50)
set@O_专利类型=(select专利类型from专利a,发明bwhereb。
职工编号=@F_职工编号anda.专利号=b.专利号)
set@O_分工=(select分工from专利a,发明bwhereb.职工编号=@F_职工编号anda.专利号=b.专利号)
set@num3=(selectcount(专利号)from发明awhere专利号=(select专利号from发明bwhere职工编号=@F_职工编号))
set@F_姓名=(selecta.姓名from教职员工a,专利b,发明cwherea。
职工编号=c.职工编号andb。
专利号=c。
专利号andc.职工编号=@F_职工编号)
begin
if@O_专利类型='发明'
set@score3=100
elseif@O_专利类型='实用新型’
set@score3=90
else
set@score3=80
begin
if@O_分工='主持人'
set@score3=@score3+@score3*0.6
elseset@score3=@score3+@score3*0.4/(@num3-1)//编写评分规则
end
end
selectresult='职工号:
'+str(@F_职工编号)+'职工名:
'+@F_姓名+'专利得分为:
'+str(@score3)//设置显示方法
end
1)论文触发器:
//根据刊物级别来判定得分
ALTERTRIGGER[dbo]。
[lunwenzongfen]//定义触发器名称
ON[dbo].[论文]FORINSERT
AS
DECLARE@论文编号char(10)
DECLARE@刊物级别char(10)
SET@刊物级别=(SELECT刊物级别FROMINSERTED)
IF@刊物级别='核心期刊’
BEGIN
UPDATE论文
SET总分=’10'//所要操作的列
END
ELSE
IF@刊物级别=’一般期刊’
BEGIN
UPDATE论文
SET总分=’8'
END
ELSE
IF@刊物级别='报纸杂志'
BEGIN
UPDATE论文
SET总分='6’
END
ELSE
IF@刊物级别=’会议论文'
BEGIN
UPDATE论文
SET总分=’4’
END//定义给分规则
2)著作触发器:
//著作数据发生变更时相关表内容相应发生变化
ALTERTRIGGER[dbo].[zhuzuozongdefen]
ON[dbo]。
[著作]FORINSERT
AS
DECLARE@著作编号char(10)
DECLARE@著作类别char(10)
SET@著作类别=(SELECT著作类别FROMINSERTED)
IF@著作类别='专著'
BEGIN
UPDATE著作
SET总分=’10'
END
ELSE
IF@著作类别='编著’
BEGIN
UPDATE著作
SET总分='9'
END
ELSE
IF@著作类别=’教材'
BEGIN
UPDATE著作
SET总分=’8'
END
ELSE
IF@著作类别='译著’
BEGIN
UPDATE著作
SET总分='7'
END
3)专利触发器:
ALTERTRIGGER[dbo].[defen]
ON[dbo].[专利]FORINSERT
AS
DECLARE@专利号char(10)
DECLARE@专利类型char(10)
SET@专利类型=(SELECT专利类型FROMINSERTED)
IF@专利类型=’发明'
BEGIN
UPDATE专利
SET总分=’10’
END
ELSE
IF@专利类型=’实用新型'
BEGIN
UPDATE专利
SET总分='8'
END
ELSE
IF@专利类型=’外观设计'
BEGIN
UPDATE专利
SET总分='6’
END
3.3数据库系统调试情况
遇到的问题:
(1)生成数据库以后,填写数据时很多表都发生冲突,不能正常填入数据,原因是用powerdesigner设计概念结构模型是一些数据类型和长度没有按实际情况来设置。
(2)给表创建约束时发生冲突。
(3)创建触发器时,由于一些数据是事先填入的,导致触发器不能正常触发,总是出现错误的结果.
(4)创建存储过程计算个人总得分的时候,总是出现语法错误,有一些细节没有注意到。
(5)按照老师所给的实验要求中的评分规则编写代码时,计算多人的分数分配时不能正常运行,出现的分数结果都是一样的.
(6)在把存储过程的计算结果导入指定的表,指定的列时,运用执行存储过程的语句,未能成功,总是提示返回的是空值。
(7)为了实现从各口径获得得分,方便查询的功能时创建了视图,其中几个视图出现了冗余,信息重复次数很多,占用大量空间。
3。
4问题的解决
(1)在填写数据库信息的过程中,不断修改表中的数据类型和数据长度。
(2)创建了检查性约束,如要求中提到的专利类型(发明、实用新型、外观设计)
(3)为了解决触发器不能触发的难题,我向表中重新填入了数据,将以前的数据删除。
(4)存储过程按照老师给的实例来编写,虽然避免的出错,但是却将过程简化,实现的功能也就不完整了。
(5)导出存储过程的执行结果和表的冗余等问题还没有更好的解决方案。
3.5结论
(1)系统能够实现一些基本的功能,结构比较简单.
(2)能够统计个人单项得分,各项总得分。
(3)能够实现数据的查询,增删改等一些操作。
(4)很多功能未能实现,比如各单位各项的得分,年份控制等。
(5)数据库中有一些表中存在冗余。
(6)改进意见:
明确各模块的功能,避免重复。
避免冗余。
4.结束语
通过本次课程设计,我收获良多。
首先,我认识到了老师在课堂上所讲的基础知识的重要性,此次课程设计的很多内容看似复杂,其实运用到的确实最简单的知识。
这对我来说既是教训又是鼓励,以后一定要加强对知识的积累,熟练掌握,灵活运用。
其次,我对自己所学的专业有了更深层次的了解,也改正了我对本专业一直以来存有的错误认识。
比如这次课程设计所涉及的高等院校科研管理信息系统,就与现实有很密切的联系,在将来的工作当中,我们很有可能遇到类似的问题,这对我们将来的就业、择业也产生了很深远、很有意义的影响。
第三,此次课程设计锻炼了我的实际操作能力,很多理论上的东西看起来简单,但是真的要实践起来还是需要付出很多努力的,比如编写存储过程,看老师给的实例代码感觉很容易,也明白代码的含义,但是与实际问题联系起来需要自己编写时,总会出现这样那样的错误,只有通过不断地检查和修改才能解决这些问题。
第四,本次实验让我对开发数据库管理系统所运用到的软件如(powerdesigner和sqlserver2005)更加熟悉,也掌握了很多操作的要领,比如利用powerdesigner创建E-R图直到最终生成物理结构模型,在sqlserver2005生成数据库,开始的时候我发现数据库中的表有错误时,还要去更改概念结构模型然后再重新生成,这样做费时费力,后来通过老师的讲解才知道powerdesigner只是辅助工具,数据库的修改完全可以在sqlserver2005中实现。
最后,通过本次课程设计我深刻体会到了团队合作和创新能力的重要性.遇到困难的时候要多尝试、多思考,有可能会发现解决困难的新途径新方法。
总之,这次课程设计让我认识到了自身的不足,明确了奋斗的目标。
课程设计虽然是告一段落,但是我们探索的脚步却不能停歇。
附录:
源代码清单
1)论文存储过程:
ALTERprocedure[dbo].[lunwen_scoreconvert2]@F_职工编号int
as
begin
declare@score2int
declare@num2int
declare@S_刊物级别char(50)
declare@S_分工char(50)
declare@F_姓名char(50)
declare@S_论文名称int
set@S_刊物级别=(selecttop1刊物级别from论文a,撰写bwhereb。
职工编号=@F_职工编号anda。
论文名称=b。
论文名称)
set@S_分工=(selecttop1分工from撰写awherea。
职工编号=@F_职工编号)
set@num2=(selecttop1count(论文名称)from撰写where论文名称in(select论文名称from撰写where职工编号=@F_职工编号))
set@F_姓名=(selecttop1a。
姓名from教职员工a,撰写bwherea.职工编号=@F_职工编号anda.职工编号=(b.职工编号))
begin
if@S_刊物级别=’核心期刊’set@score2=100
elseif@S_刊物级别=’一般期刊'set@score2=90
elseif@S_刊物级别='报纸杂志’set@score2=80
elseif@S_刊物级别=’会议论文’set@score2=70
begin
if@S_分工='主编'set@score2=@score2+@score2*0.6
elseif@s_分工=’副主编’set@score2=@score2+(@score2*0。
4)/(@num2-1)
end
end
end
begin
selectresult=’职工号:
'+str(@F_职工编号)+'职工名:
'+@F_姓名+’论文得分为:
’+str(@score2,5,1)
end
2)著作存储过程:
setANSI_NULLSON
setQUOTED_IDENTIFIERON
GO
ALTERprocedure[dbo].[zhuzuo_scoreconvert1]@F_职工编号int
as
begin
declare@score1int
declare@W_著作类别varchar(10)
declare@F_姓名varchar(50)
set@W_著作类别=(select著作类别from著作a,创作bwherea.职工编号=b。
职工编号andb。
职工编号=@F_职工编号)
set@F_姓名=(select姓名from教职员工awherea。
职工编号=@F_职工编号)
begin
if@W_著作类别='专著'
set@score1=100
elseif@W_著作类别=’编著’
set@score1=90
elseif@W_著作类别='教材'
set@score1=80
else
set@score1=70
end
end
begin
selectresult='职工号:
’+str(@F_职工编号)+'职工名:
'+@F_姓名+’著作得分为:
’+str(@score1,5,1)
end
3)专利存储过程:
ALTERprocedure[dbo].[zhuanli_scoreconvert3]@F_职工编号int
as
begin
declare@score3int
declare@O_专利类型char(50)
declare@O_分工char(50)
declare@num3int
declare@F_姓名char(50)
set@O_专利类型=(select专利类型from专利a,发明bwhereb。
职工编号=@F_职工编号anda。
专利号=b.专利号)
set@O_分工=(select分工from专利a,发明bwhereb。
职工编号=@F_职工编号anda。
专利号=b。
专利号)
set@num3=(selectcount(专利号)from发明awhere专利号=(select专利号from发明bwhere职工编号=@F_职工编号))
set@F_姓名=(selecta.姓名from教职员工a,专利b,发明cwherea.职工编号=c。
职工编号andb.专利号=c.专利号andc。
职工编号=@F_职工编号)
begin
if@O_专利类型='发明'
set@score3=100
elseif@O_专利类型=’实用新型’
set@score3=90
else
set@score3=80
begin
if@O_分工=’主持人'
set@score3=@score3+@score3*0.6
elseset@score3=@score3+@score3*0.4/(@num3—1)
end
end
selectresult='职工号:
'+str(@F_职工编号)+’职工名:
'+@F_姓名+’专利得分为:
’+str(@score3)
end
4)论文触发器:
ALTERTRIGGER[dbo]。
[lunwenzongfen]
ON[dbo].[论文]FORINSERT
AS
DECLARE@论文编号char(10)
DECLARE@刊物级别char(10)
SET@刊物级别=(SELECT刊物级别FROMINSERTED)
IF@刊物级别='核心期刊'
BEGIN
UPDATE论文
SET总分=’10’
END
ELSE
IF@刊物级别='一般期刊'
BEGIN
UPDATE论文
SET总分='8’
END
ELSE
IF@刊物级别=’报纸杂志'
BEGIN
UPDATE论文
SET总分=’6'
END
ELSE
IF@刊物级别='会议论文'
BEGIN
UPDATE论文
SET总分='4'
END
5)著作触发器:
ALTERTRIGGER[dbo]。
[zhuzuozongdefen]
ON[d
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 科研 管理信息系统 数据库 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)