博客信息管理系统设计说明.docx
《博客信息管理系统设计说明.docx》由会员分享,可在线阅读,更多相关《博客信息管理系统设计说明.docx(16页珍藏版)》请在冰点文库上搜索。
博客信息管理系统设计说明
数据库课程设计
题目
博客信息管理系统
班级:
学号:
:
提交日期:
2010年3月13日
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博客系统数据库逻辑模型
图表2表格1博客系统数据库物理模型
3.2转换为关系模式
用户信息
(账户编号、账户名、密码、用户昵称、用户、用户、用户注册时间、用户激活、用户状态、博客展示名字)
用户拓展信息
(账号编号、属性编号、属性关键词、属性值)
日志分类
(分类编号、分类名称)
日志
(文章编号、账户编号、分类编号、文章作者、文章标题、文章容、文章编写时间、文章最后编写时间、评论总数)
日志拓展信息
(文章拓展属性编号、账户编号、文章编号、分类编号、文章拓展属性名称、文章拓展属性值)
评论
(评论编号、账户编号、文章编号、分类编号、评论作者、评论时间、评论修改时间、评论回复源)
(编号、账户编号、地址、名称、图片、目标、描述、可访性)
菜单
(菜单编号、菜单名称、菜单值)
4、表结构
字段名
数据类型
是否主键
是否为空
备注
字段含义
user_ID
bigint(20)
PRI
NOTNULL
auto_increment
账户编号
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)unsigned
PRI
NULL
auto_increment
属性编号
user_id
bigint(20)unsigned
FK->(tb_users)ID
账户编号
meta_key
varchar(255)
IND
NULL
属性关键词
meta_value
longtext
IND
NULL
属性值
表格2用户拓展信息tb_usermeta
字段名
数据类型
是否主键
是否为空
备注
字段含义
term_id
bigint(20)unsigned
PRI
auto_increment
分类编号
name
varchar(200)
分类名称
表格3日志分类tb_term
字段名
数据类型
是否主键
是否为空
备注
字段含义
post_id
bigint(20)unsigned
PRI&INDPt4
NOTNULL
auto_increment
文章编号
user_id
bigint(20)unsigned
NOTNULL
FK->wp_users.ID
账户编号
term_id
NOTNULL
分类编号
post_date
datetime
INDPt3
NULL
文章编写时间
post_date_gmt
datetime
NULL
文章最后编辑时间
post_content
longtext
NULL
文章容
post_title
text
NULL
文章标题
comment_count
bigint(20)
NULL
评论总数
表格4日志tb_post
字段名
数据类型
是否主键
是否为空
备注
字段含义
meta_id
bigint(20)unsigned
PRI
NULL
auto_increment
文章拓展属性编号
post_id
bigint(20)unsigned
IND
0
FK->wp_posts.ID
文章编号
term_id
bigint(20)unsigned
IND
auto_increment
分类编号
meta_key
varchar(255)
IND
NULL
文章拓展属性名称
meta_value
longtext
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_id
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&INDPt2
NOTNULL
评论修改时间
comment_parent
bigint(20)unsigned
NOTNULL
FK->wp_comments.ID
评论回复源
表格6评论表tb_comments
字段名
数据类型
是否主键
是否为空
备注
字段含义
option_id
bigint(20)unsigned
PRIPt1
NULL
auto_increment
菜单编号
option_name
varchar(64)
PRIPt3&IND
菜单名称
option_value
longtext
菜单值
表格7菜单tb_options
5、完整性设计
5.1、主键约束
主键约束就是通过建立唯一的索引保证指定列的实体的完整性,即每一个表中一列或多列的数值都是唯一的。
而在本博客数据库里面,所有的表格都是设有主键,即他们都用主键约束功能。
同时每个表格的主键列也把标识属性设为是,所以在插入新数据库是,SQLServer会主动对主键列惊醒唯一的赋值,不需要人为控制。
5.2、外键约束
外键约束主要是为了表中的一列或多列数据提供参展完整性,外键约束闲着插入到表中的被约束列的值必须就有被参展表中已存在。
在本数据库中,具有外键约束的表有:
tb_blogownersmeta
ID(FKtb_blogowners.user_ID)
tb_posts
ID(FKtb_blogowners.user_ID)
term_id(FKtb_term.term_id)
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)
term_id(FKtb_post.term_id)
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_postment_count
FROMtb_comments
END
6.2视图
视图名:
BlogView
用途:
查看博主的所有日志标题和编写时间以与评论总数
CREATEVIEWBlogViewAS
SELECTpost_title,post_date,comment_count
FROMtb_posts
7数据库实现
7.1建立数据库
通过用erwin把本系统建立在SQLServer2000数据库上。
如下图
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.','.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