数据库管理与编程课程设计说明书Word格式.docx
《数据库管理与编程课程设计说明书Word格式.docx》由会员分享,可在线阅读,更多相关《数据库管理与编程课程设计说明书Word格式.docx(18页珍藏版)》请在冰点文库上搜索。
4.用户登录进入校友录后,能够通过数据库的查询列举所加入的所有班级。
5.班级成员可在班级首页的留言板或班级留言板中进行留言,同时发送相关留言信息到后台数据库相关表进行存储。
6.班级成员可在上传照片页面中上传相片到所属的所有班级,同时发送相关留言信息到后台数据库相关表进行存储。
7.班级成员可在班级相册页面内对照片进行评论,同时发送相关评论信息到后台数据库相关表进行存储。
1)按照上述需求分析结果,作出E-R图(可利用MicrosoftOfficeVisio2003工具)。
图1
2)把完成E-R图转换为关系模式(每一实体和多对多联系转换为关系模式)。
用户(登录名,密码)
个人资料(登录名,用户名,性别,诞生日期,注册时刻,电话,住址,E-MAIL,头像)
班级(班级编号,班级名称,创建者,创建日期,所属学校)
学校(学校编号,学校名称)
留言(留言编号,留言内容,留言人,留言日期,修改日期,所属班级)
相片(相片编号,相片名称,上传人,上传日期,相片路径,相片大小)
评论(评论编号,评论人,评论日期,评论内容,评论相片,所属班级)
用户班级(登录名,班级编号)
相册表(班级编号,相片编号)
二、数据库部署
1)创建数据库SchoolMates,其数据文件名为,置于D:
目录下;
日记文件名为,置于根目录下;
设置恢复模式为“完整”。
启动“企业管理器”—‘“local”—“数据库”,右击“新建数据库”,进行设置,如下图:
图2
图3
图4
三、表和索引的创建及数据完整性
1)建表。
按照关系模式设计表,为表的各属性选择适合的数据类型和属性可否为空。
A:
利用企业管理器:
启动“企业管理器”—“local”—“数据库—”“SchoolMates”—“表”,右击“新建表”
启动“企业管理器”,右击表名选择“设计表”,选中即将设置为主键的列,点击
图标,设置成功,列明前就会出现
标志,保留即可。
表MessageBoard
图5
B:
SQL语句
表Comment:
CREATETABLEComment(CommentIDintNOTNULL
PRIMARYKEY,
ClassIDintNOTNULL,
CommentDatedatetimeNULLDEFAULT(getdate()),
CommentContentvarchar(200)NOTNULL,
CommentByvarchar(20)NOTNULL,
PhotoIDintNOTNULL
)
图6
表Photo:
CREATETABLEPhoto(PhotoIDintNOTNULL
PRIMARYKEY,
PhotoNamevarchar(200)NOTNULL,
UploadByvarchar(20)NOTNULL,
UploadDatedatetimeNULLDEFAULT(getdate()),
PhotoPathvarchar(50)NOTNULLUNIQUE,
PhotoSizeIntNOTNULL
)
表SchoolInfo:
CREATETABLESchoolInfo(SchoolIDintNOTNULL
SchoolNamevarchar(200)NOTNULLUNIQUE
)
表UserInfo:
CREATETABLEUserInfo(UserIDvarchar(20)NOTNULL
Passwordvarchar(20)NOTNULL,
Sexchar
(2)CHECK(Sexin('
男'
'
女'
))NOTNULL,
Namevarchar(20)NOTNULL,
BirthdatetimeNOTNULL,
RegDatedatetimeNULLDEFAULT(getdate()),
Mobilevarchar(20),
Addressvarchar(200),
Emailvarchar(50)NOTNULL,
Imagevarchar(100)
)
表ClassInfo:
CREATETABLEClassInfo(ClassIDintNOTNULL
ClassNamevarchar(50)NOTNULL,
CreateDatedatetimeNULLDEFAULT(getdate()),
SchoolIDintNOTNULL)
2)设置主键,为数据库SchoolMates的每一个表设置主键。
每一个表都应该具有主键,主键的存在就代表着表结构的完整性,表的记录必需得有唯一区分的字段,主键主如果用于与其他表的外键关联,本记录的修改与删除,若是没有主键,这些操作会变的超级麻烦。
(提示:
能够利用自动编号作为主键,就是新建一个ID字段,自动增加)
表Album的主键是(ClassID,PhotoID)
表ClassInfo的主键是ClassID
表Commnet的主键是CommentID
表MessageBoard的主键是MessageID
表Photo的主键是PhotoID
表SchoolInfo的主键是SchoolID
表UserAccount的主键是UserID
表UserClass的主键是UserID
表UserInfo的主键是UserID
3)设置外键。
例如,班级表中的属性所属学校,引用学校表的学校编号,所以应该将班级表的所属学校设置为外键。
例如,表Album的外键是ClassID,不能够为空;
表Album的外键是PhotoID,不能够为空。
启动“企业管理器”—“local”—“数据库—”“SchoolMates”—“表”,打开表,右击选择“关系”—“新建”,设置:
图7
4)设置其他约束。
按照系统的实际要求,设置约束。
例如,用户资料中的性别只能为男或女,则可对性别设置CHECK约束;
用户注册日期若是为空,就默以为当前时刻,则可设置DEFAULT约束;
图片表中的图片若是不允许重复,则可设置UNIQUE约束,等等。
表ClassInfo中的CreateDate默以为系统当前时刻
表Commnet中的CommentDate默以为系统当前时刻
表MessageBoard中的CreateDate和EditDate默以为系统当前时刻
表Photo中的UploadDate默以为系统当前时刻
表Photo中的PhotoPath唯一
表SchoolInfo中的SchoolName字段唯一
表UserInfo中的RegDate默以为系统当前时刻
5)成立索引。
考虑系统对表的查询频率,为查询次数较多的表的字段成立索引。
例如,进入班级相册时,系统会自动检索出相片的评论信息显示出来,系统一般是依照发表评论的时刻检索,则可为评论表的评论时刻成立聚集索引。
为表设置主键时,数据库会自动为主键成立聚集索引,若是要在其他属性上成立聚集索引,可先将主键去除,再利用ALTERTABLE[TABLENAME]ADDCONSTRAINT[PK_TABLEFIELD]PRIMARYKEYNONCLUSTERED)修改主键索引为非聚集索引,再在相关属性上成立聚集索引)
①表Commnet中的主键字段CommentID具有唯一、非聚集索引:
CREATEUNIQUENONCLUSTEREDINDEXcomment
ONComment(CommentID)
②表Commne中的字段CommentDate具有聚集索引:
再对字段CommentDate创建聚集索引前先解除主键再成立聚集索引
CREATECLUSTEREDINDEXcom1
ONComment(CommentDate)
③表Photo的字段PhotoPath具有唯一、非聚集索引:
CREATEUNIQUENONCLUSTEREDINDEXphoto1
ONPhoto(PhotoPath)
四、数据库试运行
1)为班级相册成立视图vClassPhoto,便于查询班级照片信息及照片评论数。
CREATEVIEWvClassPhoto
AS
SELECT,PhotoName,UploadBy,UploadDate,PhotoPath,PhotoSize,COUNT(CommentBy)AS人数
FROMPhoto,Comment
WHERE=
GROUPBY,PhotoName,UploadBy,UploadDate,PhotoPath,PhotoSize
2)为新注册用户成立存储进程CreateUser,用于向表UserAccount和表UserInfo插入一条新用户信息。
CREATEPROCEDURECreateUser(
@useridvarchar(20),
@passwordvarchar(20),
@sexchar
(2),
@namevarchar(20),
@birthdatetime,
@mobilevarchar(20),
@addressvarchar(200),
@emailvarchar(50),
@imagevarchar(100)
IFEXISTS(SELECT*
FROMUserInfo
WHEREUserID=@userid)
RETURN-1
IF@sexNOTIN('
RETURN-2
INSERTINTOUserInfo
VALUES(@userid,@password,@sex,@name,@birth,getdate(),@mobile,
@address,@email,@image)
RETURN0
调试:
declare@rtint
exec@rt=createuser'
1'
1981-10-14'
select@rt
3)为已注册用户成立存储进程UpdateUser,用于更新表UserAccount和表UserInfo中的一条用户信息。
CREATEPROCEDUREUpdateUser(@addressvarchar(200))
UPDATEUserInfo
SETAddress=@address
WHEREAddressIN('
昆山'
吴江'
观前街'
张家港'
常熟'
EXECUpdateUser'
苏州'
4)为上传照片者成立存储进程UploadPhoto,用于向Photo表和Album表插入一条记录。
createproceuploadphoto
(@PhotoID,@ClassID,@PhotoName,@UploadBy,
@UploadDate,@PhotoPath,PhotoSize)
AS
begintran
begintry
insertintoAlbumvalues(@PhotoID,@ClassID)
insertintophotovalues(@PhotoID,@PhotoName,@UploadBy,
endtry
begincatch
raiserror('
插入失败'
16,1)
rollbacktran
endcatch
五、数据库的安全性
1)在服务器端为应用程序成立登录名webapp,并设置为SQLServer身份验证,以使前台程序能够访问SQLServer;
启动“企业管理器”—“local”—“安全性”—“登录”,进行设置:
图8
2)在数据库SchoolMates中创建用户webapp,使程序能够访问并只能访问SchoolMates;
启动“企业管理器”—“local”—“数据库”—“SchoolMates”—“用户”右键“新建用户”进行新建:
图9
3)为用户webapp给予适当的权限(对象的查询、插入、删除和更新),避免用户错误或歹意的的访问和修改其他数据库中的数据。
启动“企业管理器”—“local”—“数据库”—“SchoolMates”—“用户”,双击“webapp”,点击“权限”,为用户webapp给予适当的权限:
图10
六、数据库保护
1)计划备份策略。
按照系统数据库的大小,天天获取的数据量进行估算,计划备份策略。
利用完全数据库备份方式:
一、打开企业管理器,右键选择“所有任务”—“备份数据库”,进行设置:
图11
2)成立保护计划,备份用户数据库。
按照计划的备份策略,成立保护计划,实现自动备份数据库。
一、打开企业管理器,右键选择“所有任务”—“保护计划”,进入设置向导:
二、下一步“选择数据库”,如图13:
3、下一步“更新数据优化信息”,下一步“检查数据完整性”。
4、下一步“指定数据库保护计划”,默许的是1周备份一次
五、下一步“指定备份的磁盘目录”,选择指定目录,在D盘新建一个目录,然后在这里选择利用此目录,然后选择删除早于多少天前的备份,一般设定4-7天,这要看个人具体备份要求,备份文件扩展名一般都是BAK。
六、下一步“指定事务日记备份计划”,看你的需要做选择下一步“要生成的报表”,下一步“保护计划历史记录”,用默许的选项,下一步完成,如图14:
。
7、完成后系统极可能会提示SQLServerAgent服务未启动,先点肯定完成计划设定,然后启动SQL服务。
八、数据库自动备份计划已经设置好,SQL将依照上面的设置进行自动备份。
图12
图13
七、心得体会
遇到的问题:
1建表的时候,对列设置自动增长。
如对表Commnet的CommentID设置自动增量。
2设置外键。
解决方案:
1在“企业管理器”中打开“设计表”,对“标识”选项设置为“是”即可。
2在“企业管理器”打开“设计表”,右击选择“关系”—“新建”,设置即可。
帮助别人解决的问题:
1建立新表的时候完成对主键的设置
2在服务器端为应用程序建立登录名webapp
3为用户webapp赋予适当的权限
4实现数据库的分离与附加
遗留问题:
①为表设置主键的时候只会用“企业管理器”设置,不知道用SQL语句怎么编写
②数据处理的速度缓慢
系统改进的设想:
将数据分开存放,以提高数据处理速度:
将当天的数据存在一个表中,历史数据存在另一个表中,在更新处理时,再将当天的数据移到历史数据表中
感想和建议
做了一周的课程设计,有很多的心得体会,有关于数据库建立方面的,更多的是关于人与人之间关系方面的。
还记得我和同学一起进行系统分析,对实体,属性,联系的分析,花了大半天的时间结果还是一团糟。
设计E-R图,我们花了很多的时间,当遇到问题时候,向同学和老师请教,经过多次的修改,才完成了E-R图的设计。
我在自己的努力下,在老师同学们的帮助下,终于把整个系统完成了,实现了预定的功能,也使得我对SQL有了更加深刻的了解。
这几天的努力,终于有了头绪,然后又在同学的帮助下,找到了一些参考书,又在这写书的帮助下了解了系统设计的各种方法,在编译过程中常常出现的问题,但也找到了解决的方法。
同学们在一起学习,一同讨论,想着办法解决遇到的各种各样的困难。
在这个时候也有很多人帮助我,让我能够顺利的完成数据库的建立。
一个星期后我们终于完成了对数据库的建立。
在机房调试虽然出现了一些问题,但最终也还是都解决了。
我发现自己对编程也有了一点兴趣,才发现26字母也开始散发着它们的魅力。
近几天的生活虽然有点小累,天天泡在机房里面,对着我们的电脑,一待就是一天,有的时候对着电脑脑袋都晕了,但当我们看到自己完成的数据库的时候,很兴奋,这几天的劳累感顿时消散了,这么几天的辛苦,终于看见成效了。
在开发的过程中按照软件工程的方法,贯彻结构化的设计思想,运用SQL
service2000数据库开发工具进行数据库设计。
同时也了解了校友录的基本运作过程,增加管理经验。
由于我们的水平有限,系统还存在很多需要改善的地方,在今后的学习中我会加强理论与实践的结合,通过不断的摸索来弥补自己的缺陷。
通过了这次课程设计,我不仅大大提高了模型规划、系统设计和软件编程的能力,自身的各方面的素质也得到了提高。
同时也培养了我的合作精神。
这次课程设计不仅充实了我的计算机专业知识,扩大了知识面,增强分析问题和解决问题的能力,也提高自学的能力,为今后的学习打下了坚实的基础。