博客系统数据库设计.docx
《博客系统数据库设计.docx》由会员分享,可在线阅读,更多相关《博客系统数据库设计.docx(20页珍藏版)》请在冰点文库上搜索。
博客系统数据库设计
数据库课程设计
题目
博客信息管理系统
班级:
学号:
姓名:
提交日期:
2010年3月13日
1.项目背景3
2.需求分析3
2.2功能划分3
2.3功能模块3
3、ER模型4
3.1ER模型的逻辑模型与物理模型4
3.2转换为关系模式5
4、表结构6
5、完整性设计9
5.1、主键约束.9
5.2、外键约束.9
5.3、检查约束:
10
5.4、惟一约束:
10
6数据库对象设计(20分)11
6.1触发器:
11
6.2视图.11
7数据库实现11
7.1建立数据库11
7.2初始化所有表:
15
7.3实现查询功能15
1.项目背景
Blog即WeBlog,WeBlog就是在网络上发布和阅读的流水记录,通常称为“网络日志”,简称为“网志”。
它是继Email、BBS、IM之后出现的第四种全新的网络交流方式。
它绝不仅仅是一种单向的发布系统,而且有着极其出色的交流功能,与个人主页相比,博客是一种方便的、个人化的、即时性很强的网页。
与传统的电子邮件、BBS和ICQ这三种互联网沟通方式相比,博客是一种较严肃的沟通工具。
与传统门户网站相比较,博客则进一步深化了知识管理的专业化和个人化。
简言之,Blog就是以网络作为载体,简易迅速便捷地发布自己的心得,及时有效轻松地与他人进行交流,再集丰富多彩的个性化展示于一体的综合性平台。
目前的web开发竞争日趋激烈,广大用户对网络服务的要求越来越高,针对此情况参考WordPress为广网络用户研发出一套博客系统,该系统可以作为一个服务模块与其他服务模块共同作为门户网站的一部分,从而为广大网民提供更优质的服务。
2.需求分析
2.1功能目标
1、规范完善的基础信息设置
2、操作简单,快捷方便
3、数据存储安全可靠
4、信息分类清晰准确
5、强大的查询功能,保证数据查询的准确
6、对用户输入的数据,系统进行严格的审核的数据检验,尽可能排除人为的错误。
7、拓展性能强大,升级方便。
2.2功能划分
系统功能:
1、个人资料的录入:
提供博客主人的个人信息的录入、修改,日志的编写、修改、删除,网友对日志的评价的录入。
2、数据查询功能:
提供博主、网友对日志以及日志评价的查询。
3、数据统计功能:
对博客的日志与评价进行相关的统计。
2.3功能模块
3、ER模型
3.1ER模型的逻辑模型与物理模型
图表1博客系统数据库逻辑模型
孚户拓展信息
*账户編号属性编号
用户信息
账户编号
琏棲编■;■账户编号
琏棲地址链接名称链接图片
琏接目标
链按扌苗述
链接可访性」
间字州名称箱楼册活态示名呢邮链注激狀展户码户户户户户户客理密用用4用4用博
评论
选项
|选项镰弓
选项值
账户编号
日志
文童编号
■'账户編号
分类编号
文章阳号
文讥扌石展属件
>■
―
分类编号
立章拓展屈性名称
文章作者
文盘拓展属件值
立童标題
文童内容
-eH
文章綻号时间
文章最后編辑时间
分类
评论总数
分类編号1——
分类名称[
11志拓展信息
厂I―b
图表2表格1博客系统数据库物理模型
3.2转换为关系模式
用户信息
(账户编号、账户名、密码、用户昵称、用户邮箱、用户链接、用户注册时间、用户激活、用户状态、博客展示名字)
用户拓展信息
(账号编号、属性编号、属性关键词、属性值)
日志分类
(分类编号、分类名称)
日志
(文章编号、账户编号、分类编号、文章作者、文章标题、文章内谷、文章编与时间、文章最后编与时间、评论总数)
日志拓展信
(文章拓展属性编号、账户编号、文章编号、分类编号、文章拓展
息
属性名称、文章拓展属性值)
评论
(评论编号、账户编号、文章编号、分类编号、评论作者、评论时间、评论修改时间、评论回复源)
链接
(链接编号、账户编号、链接地址、链接名称、链接图片、链接目标、链接描述、链接可访性)
菜单
(菜单编号、菜单名称、菜单值)
4、表结构
字段名
数据类型
是否主键
是否为空
备注
字段含义
user_ID
bigint(20)
PRI
NOTNULL
auto_increm
ent
账户编号
user_login
varchar(60)
IND
NULL
账户名
user_pass
varchar(64)
NULL
密码
user_nicename
varchar(50)
IND
NULL
用户昵称
user_email
varchar(100)
NULL
用户邮箱
user_url
varchar(100)
NULL
用户链接
user_registered
datetime
NULL
用户注册时
间
user_activation_key
varchar(60)
NULL
用户激活
user_status
int(11)
NULL
用户状态
display_name
varchar(250)
NULL
博客展示名
字
表格1用户信息表tb_users
字段名
数据类型
是否主键
是否为空
备注
字段含义
umeta_id
bigint(20)
PRI
NULL
auto_increm
属性编号
unsigned
ent
user_id
bigint(20)unsigned
FK->(tb_use
rs)ID
账户编号
meta_key
varchar(255)
IND
NULL
属性关键
词
meta_value
Iongtext
IND
NULL
属性值
表格2用户拓展信息tb_usermeta
字段名
数据类型
是否主
键
是否为空
备注
字段含义
term」d
bigint(20)unsigned
PRI
auto_increm
ent
分类编号
name
varchar(200)
分类名称
表格3日志分类tb_term
字段名
数据类型
是否主键
是否为空
备注
字段含义
post_id
bigint(20)unsigned
PRI&
IND
Pt4
NOTNULL
auto_increm
ent
文章编号
user_id
bigint(20)unsigned
NOTNULL
FK->wp_use
rs.ID
账户编号
term」d
NOTNULL
分类编号
post_date
datetime
IND
Pt3
NULL
文章编写时间
post_date_gmt
datetime
NULL
文章最后编辑时间
post_content
Iongtext
NULL
文章内容
post_title
text
NULL
文章标题
comment_count
bigint(20)
NULL
评论总数
表格4日志tb_post
字段名
数据类型
是否主键
是否为空
备注
字段含义
meta_id
bigint(20)unsigned
PRI
NULL
auto_increm
ent
文章拓展属性编号
post_id
bigint(20)unsigned
IND
0
FK->wp_pos
ts.ID
文章编号
term」d
bigint(20)unsigned
IND
auto_increm
ent
分类编号
meta_key
varchar(255)
IND
NULL
文早拓展
属性名称
meta_value
Iongtext
NULL
文早拓展
属性值
表格5文章拓展属性tb_post_meta
字段名
数据类型
是否
主键
是否为空
备注
字段含义
comment_id
bigint(20)unsigned
PRI
NOTNULL
auto_increment
评论编号
user_id
bigint(20)unsigned
IND
NOTNULL
账户编号
post_id
varchar(20)
NOTNULL
FK->tb_posts.ID
文章编号、
term」d
bigint(20)unsigned
NOTNULL
FK->wp_term_id
分类编号、
comment_author
tinytext
NULL
FK->wp_users.ID
评论作者
comment_date
datetime
NOTNULL
文章编写时间
comment_date_gmt
datetime
IND&
IND
Pt2
NOTNULL
评论修改时间
comment_paren
bigint(20)
NOTNULL
FK->wp_co
评论回复源
t
unsigned
mments.lD
表格6评论表tb_comments
字段名
数据类型
是否主
键
是否为空
备注
字段含义
option_id
bigint(20)unsigned
PRI
Pt1
NULL
auto_incre
ment
菜单编号
option_name
varchar(64)
PRI
Pt3&
IND
菜单名称
option_value
Iongtext
菜单值
表格7菜单tb_options
5、完整性设计
5.1、主键约束
主键约束就是通过建立唯一的索引保证指定列的实体的完整性,即每一个表中一列或多列的数值都是唯一的。
而在本博客数据库里面,所有的表格都是设有主键,即他们都用主键约束功能。
同时每个表格的主键列也把标识属性设为是,所以在插入新数据库是,SQL
Server会主动对主键列惊醒唯一的赋值,不需要人为控制。
5.2、外键约束
外键约束主要是为了表中的一列或多列数据提供参展完整性,外键约束闲着插
入到表中的被约束列的值必须就有被参展表中已存在。
在本数据库中,具有外键约束的表有:
tbblogownersmeta
ID(FKtb_blogowners.user_ID)
tbposts
ID(FKtbblogowners.userID)
term_id(FKtb_term.term」d)
tb_posts_meta
ID(FKtb_post.user_ID)post_id(FKtb_post.post_id)term_id(FKtb_post.term_id)
tb_links
ID(FKtb_blogowners.user_ID)
tb_comments
ID(FKtb_blogowners.user_ID)post_id(FKtb_post.post_id)termid(FKtbpost.termid)
5.3、检查约束:
在本博客系统中,在tb_blogowners表中,用户名,与密码分别都设置了检查约束:
用户名不能以“[八_@#.]%'”字符为开头,密码不能少于三位。
验证如下图:
5.4、惟一约束:
在本博客系统中,在tb_blogowners表中,用户名设置为唯一性,每个用户只有唯一的一个用户名。
验证如下图:
6数据库对象设计(20分)
6.1触发器:
触发条件:
INSERT
触发器名:
tb_comment_postcount
触发器用途:
每当日志收到一条评论时,日志表中tb_post中的该日志的评论总数列:
comment_count中的数据都会更新到最新的评论数量总数。
CREATETRIGGERtb_comment_postcountONtb_comments
FORINSERTAS
BENGIN
SELECTCOUNT(comment_count)AStb_ment_count
FROMtb_comments
END
6.2视图
视图名:
BlogView用途:
查看博主的所有日志标题和编写时间以及评论总数CREATEVIEWBlogViewAS
SELECTpost_title,post_date,comment_count
FROMtb_posts
7数据库实现
7.1建立数据库
通过用erwin把本系统建立在SQLServer2000数据库上。
如下图
ers\bt^Lserver5S\tLO<-AL;(WindowsfMi)\jEXJK^
SOB埒17个项目
命SQLServerEnterpriseManager
文件if)an(w)ttsi(H)
盒SOLdrv色rEnt^rori^ManAa^r■■
XWF)SD(W)Wft)(H)
61凶xIfe④咖&曲金W孕回
~t—=■_™
出设计表-tb.optkxis-.位吉呈db.biog0.7-中.-(LOCAL)-上
列名
典搭类55
斥i?
1允许空1
optioa.id
bipat
8
optioh.nwt
varchtr
駅V/
—
optioscvtext
16✓
列1
驱值
fir?
19
"徹垃数
0
S
标识种子
1000
标识瀝號
I
是RwC^nd公式椿序規则
g
岭设计袤-tbjjosts•.G£Sdb>log0.7-中、・(LOCAL)・上
列名
教摘类55
r^t?
T
允许空1
S-
bi(iat
8
poit^axithor
vtrchtr
50
post.title
text
16
posteont«nt
text
16
postdate
diteUne
8
pozt.dHeqt
d«t«tin«
8
✓
pott.id
bipat
8
o
••J
A
列丨
驱值
HI?
19
小教也数
0
标识种子标
否
是RcnrG^id
公式持序規则
g
文件(F)■口(W)Mto(H)
Xife叵啦©刁今回
翁设i+表tb.post5.meta.位舌呈・db.blog0.7・中、(LOG
Jj
tb_coaBents
IzSflMRt.CCCtactI
*^|<••■•*«.»4
_J:
»«nt_sat«
I:
64MAt.dat«_IBtI:
©»»«nt-»*r«t・*?
|t«r»_id
tb.options
I©c?
iet-aa»e
Iopficc.T&l'M
pc«t-id*c?
a>ra:
u<
ud
tb_post»
DpcstjKJthcr
9t・t>cg,C
XH亠WQpc*t«idt«rB_idcmbcaJraM
:
:
pcst^utbcr
9t・i>cg,C
”“.4«2_C・Q
pc*t«id
cmbcaUcraM
tt
links
tbblorovners
kujdUiCuMr:
?
cacr.ZDbMr.g*s»«r^Ww
Uek.dcscxiptioamiz・»
»・wr^activtieouicrucr.atatus
tbblogovnera・c
7
1
wta.valu«
7.2初始化所有表:
输入以下语句:
INSERTINTOtb_blogowners
(user_login,user_pass,user_nicename,user_email,user_url,user_registered,user_ativtion_key,user_status,display_name)
values('tom','123','xiaoming','xiaoming@','',2010/3/4,'yes','good','tomhome')
INSERTINTOtb_blogownersmeta
(ID,meta_key,meta_valu)
values(1000,'性别','男')
INSERTINTOtb_posts
(ID,post_author,post_title,post_content,post_date,post_date_gmt,term_id,comment_count)
VALUES(1000,'tom','story','amansstory',2010/3/15,2010/3/16,1000,10)
INSERTINTOtb_term
(term_name)
VALUES('日记')
INSERTINTOtb_posts_meta
(ID,post_id,meta_key,meta_value,term_id)
VALUES(1000,1001,'写日志时的心情','开心',1000)
INSERTINTOtb_comments
(ID,post_id,comment_author,comment_date,comment_date_gmt,term_id)VALUES(1000,1001,'tom',2010/3/15,2010/3/16,1000)
INSERTINTOtb_links
(ID,link_url,link_name)
VALUES(1000,'','腾讯网')
7.3实现查询功能
1、查询指定日期的所有日志
如:
查询2010年3月15日的日志:
SELECT*FROMtb_postswherepost_date=2010/3/15
2、查询指定日志的所有评论
如:
查询tom的所有日志
SELECT*FROMtb_postswherepost_author=tom