1、 课程设计实验报告题目 公司论坛管理系统数据库设计系 别: 计算机科学与技术系 专业年级: 08计算机软件方向姓 名:洪维坤、洪鹭铭、李 琪、纪白冰 学 号:、指导教师: 柳 玲成 绩: 2023 年 12 月 20 日-2023 年 12 月 24 日评语摘要通过一学期的数据库原理学习,我们初略掌握了数据库设计的方法。理论需要与实践联系在一起,为了进一步巩固数据库的理论知识、增强实际操作能力与设计能力,我们进行了本次课程设计。本课程设计规定设计一个小型公司论坛数据库系统,为公司内部员工提供一个在线交流的网络平台。在设计中,我们把用户、版块、主帖、回帖等实体按照一定的关系关联起来形成一个完整的
2、数据库系统。同时,根据需求我们设计不同的管理模块,对于不同的用户授予不同的权限。在数据库设计中,我们使用PowerDesignersql设计出概念模型设计与物理模型设计,然后与数据库SQLserver2023相连接,并生成初步的表格,最后在数据库中根据规定设计出各个表的触发器,以及系统的一些存储过程。最后,我们完毕了整个数据库的实行。通过本次课程设计,我们的本学期学到的有关知识得到有效的复习,同时为我们积累了实战的经验,为此后的学习打下更坚实的基础。关键字:数据库 课程设计 小型公司论坛数据库系统目录 摘要.2目录.31 设计内容与规定511 设计题目512 设计目的与规定513 设计环境52
3、 需求分析621 系统功能规定设计62.1.1系统功能规定设计622 系统模块设计72.2.1前台业务基本模块72.2.2后台业务基本模块823数据流图设计924数据字典102.4.1名词定义102.4.2 数据项102.4.3 数据结构112.4.4数据流122.4.5 数据存储132.4.6 解决过程143 概念结构设计1531 数据抽象与局部视图设计153.1.1 用户实体局部e-r图153.1.2 版块实体局部e-r图153.1.3 主帖实体局部e-r图163.1.4 跟贴实体局部e-r图1632合并局部E-R图生成BBS论坛系统总体E-R 图1733 概念模型设计174 逻辑结构设计
4、1841 将实体转化为关系模型1842 设计用户子模式1943 将概念模型转换为物理模型195 物理结构设计与功能实现2151 系统的物理结构设计215.1.1 拟定关系模型的存取方法215.1.2 拟定数据库的存储结构2152 数据库的实行与数据载入215.2.1 数据库的实行215.2.2 数据的载入2653 触发器与存储过程设计275.3.1 触发器设计275.3.2 存储过程设计3054 数据库的试运营325.4.1 触发器功能的试运营325.4.2 存储过程的试运营3655 数据库的运营和维护386 设计体会与建议397 参考文献40致谢411 设计内容与规定11 设计题目 小型公司
5、论坛数据库系统(简称bbs)12 设计目的与规定 网络缩小我们的世界,其发展的迅速带动了人与人的交流。于是像公司论坛这种交流平台便应运而生。然而,网络的应用是离不开底层数据库的支持,一个良好的数据库系统是网络高效率运营的坚石。本次课程设计旨在在设计一个优秀的数据库系统来支持公司论坛系统的数据存储、数据管理等功能。同时,希望本次课程设计会让我们对数据库理论知识进一理解以加强我们动手能力与实践能力。 13 设计环境 在Windows 环境下运用Sybase PowerDesigner作为概念模型设计与物理模型设计的工具,使用SqlServer2023作为数据库管理系统对数据进行管理与维护。2 需求
6、分析21 系统功能规定设计2.1.1论坛系统的需求分析一个基本的bbs论坛,可以大体分为以下流程:用户登录进入论坛(一般为游客,有时还要注册为会员),就某个话题(帖子的主题)展开讨论。通过发帖功能发布新的话题;通过回帖功能回复已有的话题;通过搜索功能查找已有的话题。管理员通过管理功能创建 编辑 删除论坛的版块;管理注册的用户;管理帖子。这样的流程决定了bbs论坛系统的需求。(1)会员注册:提供新会员注册的功能,涉及提供录入信息的界面,检查注册信息的有效性,并将注册会员信息保存在相应数据库的数据表中。(2)发表文章:提供会员发表文章的功能,未注册的用户不允许使用该功能。(3)文章查询:对注册会员
7、和未注册会员提供文章查询以及阅读的功能,即提供相应文章标题信息,以及查看具体内容及回复文章的超链接(4)会员管理:当网上论坛的会员完毕注册后,系统会在数据库中加入会员的资料。涉及会员名称 会员密码 会员E-mail等相关信息资料。同时,按照会员的不同身份,将特殊会员设立为版主,使他具有删除本讨论区中相应文章等特殊操作的权利。管理者可以依据数据库中注册的特殊身份登录到论坛后台对会员信息进行管理。(5)论坛分类管理:根据不同的讨论内容,管理员将整个讨论区划提成不同的区域,会员可以选择进入不同的讨论区,允许管理者对分类的版块进行调整,同时提供不同的讨论区中涉及文章数量等的记录功能。(6)帖子管理:管
8、理员和版主都可以对会员发表的帖子进行转移、置顶和删除等操作。 22 系统模块设计 bbs论坛系统可以提成前台和后台两大业务模块。系统总体功能需求框架图2.2.1前台基本业务模块(1)注册会员提供新会员注册的功能,涉及提供录入信息的界面,检查注册信息的有效性,并将注册会员信息保存在相应数据库的数据表中。(2)登录系统 提供会员登录论坛功能,要想针对某篇帖子发言,或发表帖子,必须是登录用户才可以操作。由于论坛中某些操作只有会员才可以执行,所以必须先登录系统.(3)浏览帖子 对注册会员和未注册会员提供文章查询以及阅读的功能,即提供相应文章标题信息,以及查看具体内容及回复文章的超链接(4)会员发表帖子
9、 会员可以针对某个感爱好的话题发表自己的独到的见解。未注册的用户此此项功能。(5)回复帖子注册会员和未注册会员都可以针对某一个话题展开讨论,发表意见,并给出回复。前台基本业务模块图2.2.2后台管理模块(1)版块管理 根据不同的话题,管理员可以将每个话题提成不同的种类版块,然后对其进行管理。管理员还可以删除认为不必要的版块话题;管理员可以修改版块的主题名 类型和数量;管理员还可以添加新的版块。(2)帖子管理 管理员可以对会员发表的帖子进行管理。管理员可以删除内容反动或者不健康的帖子,可以置顶帖子。还可以设立精华帖,控制帖子的点击率等操。(3)会员管理 管理员可以对会员进行管理。可以删除会员,收
10、回他的会员号,;修改会员的基本信息,修改会员的积分,排行等。后台基本业务模块图23 数据流图设计 根据系统的需求分析与模块设计,我们细化出bbs论坛系统的数据流图。其图如下:数据流图 说明:(1)-访问信息 (2)(3)(10)(11)-用户信息(4)-帖子信息(5)-更新帖子信息(6)-搜索信息(7)-获取帖子信息(8)-回复信息(9)-搜索用户(12)-更新用户信息(13)-获取用户信息24 数据字典2.4.1 名词定义数据表描述缩写定义bbs小型公司论坛DB数据库数据字段类型缩写定义PPrimary,主键UUnique,唯一性约束或唯一性索引FForeign key,外键IIndex,索
11、引CCluster,聚簇索引NNull,空值2.4.2 数据项 数据项是数据库的关系中不可再分的数据单位,下表分别列出了数据的名称(即码)、注释、数据类型、长度、取值范围和是否是主码。1.bbsUsers(bbs用户表)字段名称数据类型说明约束备注UIDInt identity(1,1)用户编号P自动增长列UnameVarchar(50)用户名U唯一值UpasswordVarchar(50)密码默认为000000,密码要大于6位UemailVarchar(50)邮箱形如%.%UsexChar(2)性别男,女UclassInt用户等级默认为1 UremarkVachar(50)备注信息UregD
12、atedatetime注册时间当前值UstateInt状态默认为0(未登入UpointInt用户积分默认为202.bbsSection(bbs版块表)字段名称数据类型说明约束备注SIDInt identity(1,1)版块编号P自动增长列SnameVarchar(50)版块名称USmasterInt版主FbbsUsers表UID字段外码SprofileVarchar(50)版面简介SclickCountInt点击数字段默认值为0StopicCountInt发帖数字段默认值为03.bbsTopic(bbs主帖表)字段名称数据类型说明约束备注TIDInt identity(1,1)帖子编号P自动增
13、长列TsIDInt版块编号FbbsSection表SID字段外码TuIDInt发帖人IDFbbsUsers表UID字段外码treplyCountInt回复数量TfaceInt发帖表情TtopicVarchar(50)标题TcontentsVarchar(50)正文TtimeDatetime发帖时间为当前日期TclickCountInt点击数字段默认值为0TstateInt状态Tstate字段默认值为1TlastReplydatetime最后回复时间字段的默认值为04.bbsReply(bbs跟帖表)字段名称数据类型说明约束备注RIDInt identity(1,1)帖子编号P自动增长列RtID
14、Int主帖IDFbbsTopic表TID字段外码RuIDInt回帖人IDFbbsUsers表UID字段外码RfaceInt回帖表情RcontentsVarchar(50)正文RtimeDatetime回帖时间字段默认值为当前日期RclickCountint点击率2.4.3 数据结构数据结构是为反映数据之间的组合关系,即 一个数据结构可以由若干个数据项组成,也可以由若干个数据结构组成,或由若干个数据项和数据结构组成。本bbs论坛系统的数据结构组成可根据系统模块图和数据流图及数据库表设计。具体如下表所示:数据结构表数据结构名含义说明组成用户信息用户基本信息的描述用户编号、用户名、密码、邮箱、性别、
15、用户等级、备注信息、注册时间、状态、用户积分版块信息版块基本信息的描述版块编号、版块名称、版主、版面简介、点击数、发帖数主帖信息主帖基本信息的描述帖子编号、版块编号、发帖人ID、回复数量、发帖表情、标题、正文、发帖时间、点击数、状态、最后回复时间跟帖信息跟帖基本信息的描述帖子编号、主帖ID、版块ID、回帖人ID、回帖表情、正文、回帖时间、点击率2.4.4数据流数据流是数据结构在系统内传输的途径。根据数据流图,bbs论坛系统重要涉及数据流表数据流名说明来源去向组成流量备注用户信息用户部分信息用户发表帖子(搜索帖子、搜索用户、资料修改)用户编号、用户名、密码、用户等级、状态访问信息用户查看帖子用户
16、编号、用户名、密码、用户等级、状态发表帖子信息主帖基本信息发表帖子帖子资料帖子编号、版块编号、发帖人ID、回复数量、发帖表情、标题、正文、发帖时间 更新帖子信息主帖基本信息帖子资料搜索帖子(回复帖子)帖子编号、版块编号、发帖人ID、回复数量、发帖表情、标题、正文、发帖时间搜索帖子信息主帖部分信息搜索帖子查看帖子帖子编号、版块编号、发帖人ID、回复数量、发帖表情、标题、正文、发帖时间、点击数、状态、最后回获取帖子信息主帖基本信息帖子资料查看帖子帖子编号、版块编号、发帖人ID、回复数量、发帖表情、标题、正文、发帖时间、点击数、状态、最后回回复信息跟帖基本资料查看帖子回复帖子帖子编号、主帖ID、版块
17、ID、回帖人ID、回帖表情、正文、回帖时间、点击率更新用户信息用户基本资料用户资料(资料修改)资料修改(用户资料)用户编号、用户名、密码、邮箱、性别、用户等级、备注信息、注册时间、状态、用户积分获取用户信息用户基本资料用户资料搜索用户用户编号、用户名、密码、邮箱、性别、用户等级、备注信息、注册时间、状态、用户积分2.4.5 数据存储数据存储是数据结构停留或保存的地方,也是数据流的来源和去向之一。其重要涉及数据存储名、说明、编号、输入的数据流与输出的数据流、组成、数据量,存取频度、存取方式。下表表达了该bbs论坛系统中的数据存储描述。数据存储描述数据存储名组成输入数据流输出数据流存取频度存取方式
18、用户资料用户基本信息结构更新的用户信息获取数据流大顺序检索、更新帖子资料主帖相关信息数据结构发表帖子信息、更新帖子信息获取帖子信息大顺序检索、更新2.4.6 解决过程 该bbs论坛系统的解决过程比较少,重要包含了发表帖子、查看帖子、回复帖子、搜索帖子、搜索用户、资料修改。下图显示了这些最基本的解决以及其相应的数据流与说明。解决过程表解决名简要说明输入数据输出数据备注发表帖子用户信息发表帖子信息查看帖子访问信息搜索用户信息、回复信息回复帖子回复信息更新帖子信息搜索帖子用户信息、搜索信息搜索信息搜索用户用户信息、搜索用户、获取用户资料无资料修改用户资料修改用户信息、获取用户资料获取用户资料3 概念
19、结构设计31 数据抽象与局部视图设计3.1.1 用户实体局部e-r图 3.1.2版块实体局部e-r图3.1.3主帖实体局部e-r图3.1.4跟帖实体局部e-r图32 合并局部e-r图生成bbs论坛系统总体E-R 图 33 概念模型设计在生成了系统E-R图后,可根据E-R图中实体的各个属性组成以及实体与实体之间的关系用PowerDesigner设计概念模型。最后生成概念模型如下图所示:4 逻辑结构与物理结构设计41 将实体转化为关系模型根据以上概念结构设计的bbs论坛系统总E-R图,将其中的实体转化为如下关系,关系的码用下划线标出。*将用户实体转换为用户关系:(用户编号、用户名、密码、邮箱、性别
20、、用户级别、备注信息、注册时间、状态、用户积分)。*将版块实体转换为板块关系:(板块编号、板块名称、版主、版面简介、点击数、发帖数)。*将帖子实体转换为帖子关系:(帖子编号、板块编号、发帖人ID、回复数量、发帖表情、标题、正文、发帖时间、点击数、状态、最后回复时间)。*将帖子回复实体转换为帖子回复关系:(帖子编号、主帖ID、板块ID、回复人ID、回帖表情、正文、回帖时间、点击率)。42 设计用户子模式为了方便不同用户使用,需要使用更符合用户习惯的别名,并且针对不同的用户定义不同的视图,以满足系统对安全性的规定。*为普通用户设计的子模式:发表跟帖信息(帖子编号、主帖ID、板块ID、回复人ID、回
21、帖表情、正文、回帖时间、点击率,排名)*为版主用户设计的子模式:发表主帖帖信息(帖子编号、板块编号、发帖人ID、回复数量、发帖表情、标题、正文、发帖时间、点击数、状态、最后回复时间,排名)*为管理用户设计的子模式:用户基本信息(用户编号、用户名、密码、邮箱、性别、用户级别、备注信息、注册时间、状态、用户积分,排名)版块信息(板块编号、板块名称、版主、版面简介、点击数、发帖数,排名)43 将概念模型转换为物理模型 在概念模型设计好了之后,可直接在powerdesigner 中将设计好了的概念模型转换成物理模型。其具体操作过程为 点击主菜单的 ToolsGenerate Physical Data
22、 Model 便可以将当前的概念模型转换为物理模型,转换后的物理模型如下图所示:5 物理结构设计与功能实现51 系统的物理结构设计5.1.1 拟定关系模型的存取方法在实际设计中最常用的存取方法是索引发,使用索引可以大大减少数据的查询时间,在建立索引时应遵循:在经常需要搜索的列上建立索引;在主关键字上建立索引;在经常用于连接的列上建立索引,即在外键上建立索引;在经常需要根据范围进行搜索的列上创建索引,由于索引已经排序,其指定的范围是连续的等规则。才干充足运用索引的作用避免因索引引起的负面作用。5.1.2 拟定数据库的存储结构拟定数据库的存储结构重要指拟定数据的存放位置和存储结构,涉及拟定关系、索
23、引、日记、备份等的存储安排及存储结构,以及拟定系统存储参数的配置。由于本次bbs论坛系统的数据量小,并且只作实验之用,所以我们只用把数据存储在使用的电脑硬盘上,不用作更多的安排。52 数据库的实行与数据载入5.2.1 数据库的实行一方面运用Powerdesign软件自动生成源代码,然后参照代码,完善。实行的环节如下:1.使用SQL server 2023查询分析器创建数据库bbsDB,代码如下:use master-新建数据bbsDB的库- go -判断数据库是否存在使用exists关键字,在用sysdatabases关键字查询-if exists(select * from sysdatab
24、ases where name = bbsDB) -假如数据库存在就删除此数据库 drop(删除)database(数据库对象)bbsDB(数据库名)- drop database bbsDB -删除后在添加一个数据create(添加)database(数据库对象)bbsDB(数据库名)on-create database bbsDB on ( name = bbsDB_MDF, -数据库主文献名-filename = C:kcsjbbsDB_MDF.mdf, -数据库存储的途径-size = 10mb, -数据库初使大小-filegrowth = 10% -增长变化-) -设立日记文献-lo
25、g on ( name = bbsDB_LDF, -日记文献名-filename = F:kcsjbbsDB_LDF.ldf, -日记文献存储途径-size = 1mb, -日记文献初使大小-maxsize = 20mb, -日记文献最大的可储存-filegrowth = 10% -增长变化- ) go -以上信息为新建的数据库-2.创建各个表及其约束,代码如下:use bbsDB go -新建bbsUsers表(用户表)- -判断bbsDB库是否有表bbsUser的存在exists关键字+sysobjects判断当前数据库表-if exists(select * from sysobject
26、s where name=bbsUsers) -假如表存在就删除此表-drop table bbsUse-新建bbsUser表-create table bbsUsers ( UID int identity(1,1) not null, -用户编号,自动增长列,不允许空-Uname varchar(50) not null, -用户名,不允许空-Upassword varchar(50) not null, -密码,不允许空-Uemail varchar(50), -邮箱-Usex char(2) not null, -性别,不允许空-Uclass int, -用户等级-Uremark va
27、rchar(50), -备注信息-UregDate datetime not null, -注册日期,不允许空-Ustate int, -状态,是否在线等-Upoint int, -用户的积分-) go -为bbsUsers表添加各种约束-为bbsUser表添加约束,add constraint关键字PK_UID约束名,primary key(主键)设立UID字段为主键-alter table bbsUsers add constraint PK_UID primary key(UID) -为Upassword添加约束,check(Upassword length=6)字段长度大于等于6位,d
28、efault设立默认值为000000-alter table bbsUsers add constraint CK_Upassword check(len(Upassword) = 6) alter table bbsUsers add constraint DF_Upassword default(000000) for Upassword -为Uemail字段添加约束,必须包含号- alter table bbsUsers add constraint CK_Uemail check(Uemail like %) -为User字段添加约束,设立默认值为男,并且值只能是男或女-alter t
29、able bbsUsers add constraint DF_Usex default(男) for Usex alter table bbsUsers add constraint CK_Usex check(Usex=男 or Usex=女) -为Uclass字段添加约束,默认值为1-alter table bbsUsers add constraint DF_Uclass default(1) for Uclass -为UregDate字段添加约束,默认值为当前日期-alter table bbsUsers add constraint DF_UregDate default(getD
30、ate() for UregDate -为Ustate添加约束,默认值为0-alter table bbsUsers add constraint DF_Ustate default(0) for Ustate -为Upoint字段添加约束,默认值为20-alter table bbsUsers add constraint DF_Upoint default(20) for Upoint -以上信息为以建立的bbsUser(用户表)及各种约束- go -新建bbsSection表(版块表)- -判断数据库内是否有表bbsSection的存在-if exists(select * from s
31、ysobjects where name = bbsSection) -假如有此表执行删除-drop table bbsSection -新建bbsSection表,及个字段-create table bbsSection ( SID int identity(1,1) not null, -版块编号,自动增长列-Sname varchar(50) not null, -版块名称,不允许空-SmasterID int not null, -版主ID-Sprofile varchar(50), -版面简介-SclickCount int, -点击数-StopicCount int -发贴数-)
32、go -为表bbsSection(版块表)添加约束- -将SID字段设立为主键-alter table bbsSection add constraint PK_SID primary key(SID) -为SmasterID设立外键,他的主键是bbsUsers表的UID字段foreign key(外键) references 主键表(主键表字段)-alter table bbsSection add constraint FK_SmasterID foreign key(SmasterID) references bbsUsers (UID) -为SclickCount字段添加默认值为0-a
33、lter table bbsSection add constraint DF_SclickCount default(0) for SclickCount -为字段StopicCount设立默认值为0-alter table bbsSection add constraint DF_StopicCount default(0) for StopicCount -以上为表bbsSection(版块表)建立及添加相应约束- go-新建bbsTopic表(主贴表)- -判断数据库中是否有bbsTopic表的存在-if exists(select * from sysobjects where na
34、me = bbsTopic) -删除此表-drop table bbsTopic -新建bbaTopic表及个字段-create table bbsTopic ( TID int identity(1,1) not null, -帖子编号-TsID int not null, -版块编号-TuID int not null, -发贴人ID-TreplyCount int, -回复数量-Tface int, -发贴表情-Ttopic varchar(50) not null, -标题-Tcontents varchar(50) not null, -正文-Ttime datetime, -发贴时
35、间-TclickCount int, -点击数-Tstate int not null, -状态-TlastReply datetime -最后回复时间-) go-为bbsTopic(主贴表)表个字段添加约束- -将TID字段设立为主键-alter table bbsTopic add constraint PK_TID primary key(TID) -将TsID设立为外键,引用bbsSection表的主键SID字段-alter table bbsTopic add constraint FK_TsID foreign key(TsID) references bbsSection (SI
36、D) -将TuID字段设立为外键盘,引用bbsUsers表的主键UID字段-alter table bbsTopic add constraint FK_TuID foreign key(TuID) references bbsUsers (UID) -设立TreplyCount字段的默认值为0-alter table bbsTopic add constraint DF_TreplyCount default(0) for TreplyCount -为Tcontents字段添加约束,他的值必须大于等于6位-alter table bbsTopic add constraint CK_Tcon
37、tents check(len(Tcontents) = 6) -为Ttime字段添加默认值,为当前日期-alter table bbsTopic add constraint DF_Ttime default(getDate() for Ttime -设立TclickCount字段默认值为0-alter table bbsTopic add constraint DF_TclickCount default(0) for TclickCount -设立Tstate字段默认值为1-alter table bbsTopic add constraint DF_Tstate default(1)
38、for Tstate -为TlastReply字段添加约束,最后回复时间必须要晚于发贴时间-alter table bbsTopic add constraint CK_TlastReply check(TlastReply Ttime) -以上为bbsTopic(主贴表)表建立及各字段的约束- go -新建表bbsReply(回帖表)- -判断数据库中是否有bbsReply(回帖表)的存在-if exists(select * from sysobjects where name = bbsReply) -删除bbsReply表-drop table bbsReply -创建bbsReply
39、(回帖)表及个字段-create table bbsReply ( RID int identity(1,1) not null, -帖子编号-RtID int not null, -主贴ID-RuID int not null, -回帖人ID-Rface int, -回帖表情-Rcontents varchar(50) not null, -正文-Rtime datetime, -回帖时间-RclickCount int -点击数-) go-为bbsReply(回帖)表个字段添加约束- -设立RID字段为主键-alter table bbsReply add constraint PK_RID primary key(RID) -设立RtID字段为外键引用bbsTopic表的主键TID字段-alter table bbsReply add constraint FK_RtID foreign key(RtID) re