科研管理信息系统数据库设计.docx

上传人:b****4 文档编号:4736252 上传时间:2022-12-08 格式:DOCX 页数:21 大小:89.50KB
下载 相关 举报
科研管理信息系统数据库设计.docx_第1页
第1页 / 共21页
科研管理信息系统数据库设计.docx_第2页
第2页 / 共21页
科研管理信息系统数据库设计.docx_第3页
第3页 / 共21页
科研管理信息系统数据库设计.docx_第4页
第4页 / 共21页
科研管理信息系统数据库设计.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

科研管理信息系统数据库设计.docx

《科研管理信息系统数据库设计.docx》由会员分享,可在线阅读,更多相关《科研管理信息系统数据库设计.docx(21页珍藏版)》请在冰豆网上搜索。

科研管理信息系统数据库设计.docx

科研管理信息系统数据库设计

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模板 > 动态背景

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1