IT技术交流论坛数据库设计文档2.docx
《IT技术交流论坛数据库设计文档2.docx》由会员分享,可在线阅读,更多相关《IT技术交流论坛数据库设计文档2.docx(15页珍藏版)》请在冰豆网上搜索。
IT技术交流论坛数据库设计文档2
黄淮学院IT技术交流论坛
的设计与实现
数据库设计说明书
版本:
1.0
文档信息及版本历史
文档信息
项目名称
黄淮学院IT技术论坛
文档名称
黄淮学院IT技术论坛数据库设计说明书
存储位置
版本
作者/修改者
日期
描述
1.0
第七小组组员
2014/3/26
开始撰写文档
目录
1引言2
1.1编写目的2
1.2术语表3
1.3数据库命名约定3
1.4参考资料3
2数据库环境说明3
3数据库的命名规则4
4概要设计4
5逻辑设计4
6物理设计4
6.1确定关系模型的存取方法4
6.2确定数据库的存储结构4
7存储过程、函数及触发器的设计5
8安全性设计5
8.1用户帐号密码的加密方法5
8.2角色与权限5
9数据库实施5
1引言
1.1编写目的
本文档是黄淮学院IT技术论坛概要设计文档的组成部分,编写数据库设计文档的目的是:
明确数据库的表名、字段名等数据信息,用来指导后期的数据库脚本的开发,本文档遵循《黄淮学院IT技术交流论坛数据库设计和开发规范》。
本文档的读者对象是需求人员、系统设计人员、开发人员、测试人员。
1.2术语表
定义系统或产品中涉及的重要术语,为读者在阅读文档时提供必要的参考信息。
序号
术语或缩略语
说明性定义
1
PM
ProjectManager,项目经理
1.3数据库命名约定
前缀
说明
PK
表示主键
UK
表示唯一键
FK
表示外键
UI
表示唯一索引
NUI
表示非唯一索引
1.4参考资料
列出有关资料的名称、作者、文件编号或版本等。
参考资料包括:
1.需求说明书;
2.本项目的其它已发表的文件;
3.引用文件、资料、软件开发标准等。
资料名称
作者
文件编号、版本
资料存放地点
《数据库系统概念》
(美国等)希尔伯沙茨
ISBN:
9787111234227
驻马店市图书馆
《数据库系统概论》
王珊,萨师煊 著
ISBN:
9787040195835
驻马店市图书馆
2数据库环境说明
1.说明所采用的数据库系统,设计工具,编程工具等
2.详细配置
数据库实例
数据库管理系统
数据库部署环境
数据库设计工具
数据库存放位置
说明
BBS
SQLServer2005
Window7系统
rose
F:
\我的文档\大三下\软件综合实践\bbs.mdf
存储项目中所涉及的数据
3数据库的命名规则
本数据库设计完全按照《黄淮学院IT技术论坛数据库设计规范》命名。
1.实体(表)的命名
1)表以名词或名词短语命名,定义规则:
<分类>_<表达业务的名词或名词短语>
表名以<分类_>开头后面是业务名词或短语表达,不要缩写,多个单词间不加“_”,每个单词的首字母大写其他字母小写。
2)关联类通过用下划线连接两个基本类之后,再加后缀_lk的方式命名。
关联表用于保存多对多关系。
2.属性(列)的命名
1)列名的命名规则同表名的命名规则,大小写规则也是单词的首字母大写其他的小写。
2)尽量避免使用关键字作为列名,以免一些不必要的错误发生。
3)每张表必须至少有一个主键列。
4
概要设计
4.1主题帖子实体-属性图
4.2回帖实体-属性图
4.3板块实体-属性图
4.4用户实体-属性图
n1
11
nn
m1n1
n
m
5逻辑设计
1.按照转换原则把概要设计中的E_R图转换成对应的关系表,并进行规范化,要求达到第三范式。
2.设计必要的视图
表5-1BBSUser(论坛用户表)
字段名
中文名
类型
是否为空
备注
UID
用户ID
int
否
主键,自定增长
ULevel
用户等级
int
否
判断用户等级,如会员、版主、管理员,设定默认值为会员
UPassword
密码
varchar
否
UName
昵称
varchar
否
唯一值
UEmail
电子邮箱
varchar
否
唯一值
UBirthday
用户生日
datetime
USex
用户性别
int
否
表5-2BBSTopic(帖子表)
字段名
中文名
类型
是否为空
备注
TID
发帖ID
int
否
PK自定增长
TSID
所在版块
int
否
FK(引用版块表的SID)
TUID
发帖人
int
否
FK(引用版块表的UID)
RTID
回复帖子ID
int
否
TTitle
标题
varchar
否
TContent
内容
varchar
否
TPicture
发贴照片
varchar
TTime
发帖时间
datetime
否
表5-3BBSSetion(版块表)
字段名
中文名
类型
是否为空
备注
SID
版块ID
int
否
主键自定增长
SName
版块名称
varchar
否
SDescription
版块简介
varchar
SUID
版主
int
否
FK(引用用户表UID)
6物理设计
6.1确定关系模型的存取方法
在实际设计中最常用的存取方法是索引,使用索引可以大大减少数据的查询时间,在建立索引时应遵循:
在经常需要搜索的列上建立索引; 在主关键字上建立索引;在经常用于连接的列上建立索引,即在外键上建立索引;在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的等规则。
才能充分利用索引的作用避免因索引引起的负面作用。
数据库物理设计阶段的任务是根据具体计算机系统(DBMS和硬件等)的特点,为给定的数据库模型确定合理的存储结构和存取方法。
所谓的“合理”主要有两个含义:
一个是要使设计出的物理数据库占用较少的存储空间,另一个对数据库的操作具有尽可能高的速度。
主要体现在后者。
(1)建立索引:
对帖子表在TID属性列上建立索引。
6.2确定数据库的存储结构
确定数据库的存储结构主要指确定数据的存放位置和存储结构,包括确定关系、索引、日志、备份等的存储安排及存储结构,以及确定系统存储参数的配置。
7存储过程、函数及触发器的设计
存储过程:
在删除发帖中,通过存储过程的方式进行,删除该发帖的回帖和删除该发帖的操作。
ifexists(select*fromsysObjectswherename='proc_Topic_Delete')
dropprocproc_Topic_Delete
go
createprocproc_Topic_Delete
@errorSumintoutput,
@topicIDint
as
set@errorSum=0
begintransaction
DELETEFROMBBSTopicWHERETID=@topicID
set@errorSum=@errorSum+@@error
DELETEFROMBBSTopicWHERETID=@topicID
set@errorSum=@errorSum+@@error
if@errorSum<>0
begin
rollbacktransaction
end
else
begin
committransaction
end
触发器:
对于复杂业务规则使用触发器,简单的完整性规则通过约束实现。
8安全性设计
根据系统需要设计相关用户和角色,并赋予相关操作权限。
8.1用户帐号密码的加密方法
用户帐号采用MD5进行数据加密后再录入数据库,以防止任何地方密码的安全性要求。
8.2角色与权限
角色
可以访问的表与列
操作权限
管理员
可访问所有表
完全控制权限
版主
可以访问主题表
发表,删除,浏览,增加主题帖子
可以访问回帖表
发表,删除,浏览,添加回帖、
会员
可以访问主题表
发表,浏览,添加主题贴
可以访问回帖表
发表,浏览,添加回帖
游客
可以访问主题表
浏览主题帖子
可以访问回帖表
浏览回帖
9数据库实施
此阶段主要任务包括创建数据库,加载初始数据.
1.创建数据库脚本
CREATEDATABASE[bbs]ONPRIMARY
(NAME=N'bbs',FILENAME=N'F:
\我的文档\大三下\软件综合实践\bbs.mdf',SIZE=3072KB,MAXSIZE=UNLIMITED,FILEGROWTH=1024KB)
LOGON
(NAME=N'bbs_log',FILENAME=N'F:
\我的文档\大三下\软件综合实践\bbs_log.ldf',SIZE=1024KB,MAXSIZE=2048GB,FILEGROWTH=10%)
2.创建表脚本
2.1BBSUser(论坛用户表)
CREATETABLE[dbo].[BBSUser](
[UID][int]IDENTITY(1,1)NOTNULL,
[ULevel][int]NOTNULLCONSTRAINT[DF_BBSUser_ULevel]DEFAULT(
(1)),
[UPassword][varchar](20)NOTNULL,
[UName][varchar](20)NOTNULL,
[UEmail][varchar](50)NOTNULL,
[UBirthday][datetime]NULL,
[USex][int]NOTNULLCONSTRAINT[DF_BBSUser_USex]DEFAULT(
(1)),
CONSTRAINT[PK_BBSUser]PRIMARYKEYCLUSTERED
(
[UID]ASC
)WITH(IGNORE_DUP_KEY=OFF)ON[PRIMARY]
)ON[PRIMARY]
2.2BBSTopic(帖子表)
CREATETABLE[dbo].[BBSTopic](
[TID][int]IDENTITY(1,1)NOTNULL,
[TSID][int]NOTNULL,
[TUID][int]NOTNULL,
[RTID][int]NOTNULL,
[TTitle][varchar](50)NOTNULL,
[TContent][varchar](500)NULL,
[TPicture][varchar](50)NULL,
[TTime][datetime]NOTNULL,
CONSTRAINT[PK_BBSTopic]PRIMARYKEYCLUSTERED
(
[TID]ASC
)WITH(IGNORE_DUP_KEY=OFF)ON[PRIMARY]
)ON[PRIMARY]
2.3BBSSetion(版块表)
CREATETABLE[dbo].[BBSSection](
[SID][int]IDENTITY(1,1)NOTNULL,
[SName][varchar](20)NOTNULL,
[SDescription][varchar](50)NULL,
[SUID][int]NOTNULL,
CONSTRAINT[PK_BBSSection]PRIMARYKEYCLUSTERED
(
[SID]ASC
)WITH(IGNORE_DUP_KEY=OFF)ON[PRIMARY]
)ON[PRIMARY]
3.创建视图脚本
4.创建存储过程脚本
ifexists(select*fromsysObjectswherename='proc_Topic_Delete')
dropprocproc_Topic_Delete
go
createprocproc_Topic_Delete
@errorSumintoutput,
@topicIDint
as
set@errorSum=0
begintransaction
DELETEFROMBBSTopicWHERETID=@topicID
set@errorSum=@errorSum+@@error
DELETEFROMBBSTopicWHERETID=@topicID
set@errorSum=@errorSum+@@error
if@errorSum<>0
begin
rollbacktransaction
end
else
begin
committransaction
end
5.创建函数脚本
CREATE FUNCTION F_EMAIL
(@EMAIL VARCHAR(50))
RETURNS INT --返回1是正确;返回0是错误
BEGIN
DECLARE @VALUE INT,@LEN INT
DECLARE @TMP VARCHAR(50)
DECLARE @CHECK1 VARCHAR(50)
DECLARE @CHECK2 VARCHAR(50)
DECLARE @CHECK3 VARCHAR(50)
SET @TMP=RTRIM(LTRIM(@EMAIL))
SET @LEN=LEN(@TMP)
IF @LEN-LEN(REPLACE(@TMP,'@',''))=1 AND @LEN-LEN(REPLACE(@TMP,'.',''))>=1 AND CHARINDEX('@',@TMP)<>1
BEGIN
SET @CHECK1=LEFT(@TMP,CHARINDEX('@',@TMP)-1)
SET @CHECK2=STUFF(@TMP,1,CHARINDEX('@',@TMP),'')
SET @CHECK3=STUFF(@CHECK2,1,CHARINDEX('.',@CHECK2),'')
SET @CHECK2=LEFT(@CHECK2,CHARINDEX('.',@CHECK2)-1)
IF LEN(@CHECK1)>0 and LEN(@CHECK2)>0 AND LEN(@CHECK3)>0
BEGIN
IF PATINDEX('%[^a-zA-Z0-9._-]%',@CHECK1)>0
SET @VALUE=0
ELSE
BEGIN
IF PATINDEX('%[^a-zA-Z0-9_-]%',@CHECK2)>0
SET @VALUE=0
ELSE
BEGIN
IF CHARINDEX(UPPER(@CHECK2),UPPER('gmail,QQ,163,sina,yahoo'))>0
BEGIN
IF PATINDEX('%[^a-zA-Z0-9._-]%',@CHECK3)>0
SET @VALUE=0
ELSE SET @VALUE=1
END
ELSE SET @VALUE=0
END
END
END
ELSE SET @VALUE=0
END
ELSE SET @VALUE=0
RETURN @VALUE
END
6.创建触发器脚本
7.创建索引脚本
8.数据录入脚本