说明:这是一个数据库课程设计实战项目(附带代码+文档+视频讲解),如需代码+文档+视频讲解可以直接到文章最后获取。
项目背景
网站上的新闻随处可见,新闻网站系统也越来越多,例如:新浪新闻、腾讯新闻、网易新闻等等。很多网站和管理系统使用MySQL数据库存储数据。本项目主要讲述新闻发布系统的数据库设计过程。
系统功能概述
本项目介绍的是一个新闻发布系统,管理员可以通过该系统发布新闻信息、管理新闻信息。一个典型的新闻发布系统网站至少应该包含新闻信息管理、新闻信息显示和新闻信息查询3种功能。
新闻发布系统所要实现的功能具体包括新闻信息添加、新闻信息修改、新闻信息删除、显示全部新闻信息、按类别显示新闻信息、按关键字查询新闻信息、按关键字进行站内查询。
本网站为一个简单的新闻信息发布系统,该系统具有以下特点。
● 实用:系统实现了一个完整的信息查询过程。
● 简单易用:为使用户尽快掌握和使用整个系统,系统结构简单但功能齐全,简洁的页面设计使操作起来非常简便。
● 代码规范:作为一个实例,文中的代码规范简洁、清晰易懂。
本系统主要用于发布新闻信息、管理用户、管理权限、管理评论等功能。这些信息的录入、查询、修改和删除等操作都是该系统重点解决的问题。
本系统的主要功能包括以下几点:
(1)具有用户注册及个人信息管理功能。
(2)管理员可以发布新闻、删除新闻。
(3)用户注册后可以对新闻进行评论、发表留言。
(4)管理员可以管理留言和对用户进行管理。
系统功能分析
新闻发布系统分为5个管理部分,即用户管理、管理员管理、权限管理、新闻管理和评论管理。本系统的功能模块如图所示:
图中模块的详细介绍如下:
- 用户管理模块:实现新增用户、查看和修改用户信息功能。
(2)管理员管理模块:实现新增管理员,查看、修改和删除管理员信息功能。
(3)权限管理模块:实现对管理员、对管理的模块和管理的评论赋权功能。
(4)新闻管理模块:实现有相关权限的管理员对新闻的增加、查看、修改和删除功能。
(5)评论管理模块:实现有相关权限的管理员对评论的审核和删除功能。
数据库结构设计
概念设计:E-R模型
根据系统功能和数据库设计原则,共设计9张表,分别是:用户表、管理员表、权限表、新闻表、栏目表、评论表、管理员_权限表、新闻_评论表、用户_评论表。
用户表(橙色属性为主码,蓝色属性为外码)
管理员表(橙色属性为主码,蓝色属性为外码)
权限表(橙色属性为主码,蓝色属性为外码)
新闻表(橙色属性为主码,蓝色属性为外码)
栏目表(橙色属性为主码,蓝色属性为外码)
评论表(橙色属性为主码,蓝色属性为外码)
管理员_权限表(橙色属性为主码,蓝色属性为外码)
新闻_评论表(橙色属性为主码,蓝色属性为外码)
用户_评论表(橙色属性为主码,蓝色属性为外码)
数据库表设计
用户表user:
管理员表admin:
权限表roles:
新闻表news:
栏目表categroy:
评论表comment:
管理员_权限表admin_Roles:
新闻_评论表news_Comment:
用户_评论表users_Comment:
数据库程序设计与编码实现
数据库创建
数据表创建
创建用户表user:
创建管理员表admin:
创建权限表roles:
创建新闻表news:
创建栏目表categroy:
创建评论表comment:
创建管理员_权限表admin_Roles:
创建新闻_评论表news_Comment:
创建用户_评论表users_Comment:
索引创建
索引是创建在表上的,是对数据库中一列或者多列的值进行排序的一种结构。索引可以提高查询的速度。论坛系统需要查询论坛的信息,这就需要在某些特定字段上建立索引,以便提高查询速度。
在news表上建立索引
新闻发布系统中需要按照newsTitle字段、newsDate字段和newsRate字段查询新闻信息。
在categroy表上建立索引
在新闻发布系统中,需要通过栏目名称查询该栏目下的新闻,因此需要在这个字段上创建索引。
在comment表上建立索引
新闻发布系统需要通过commentTitle字段和commentDate字段查询评论内容,因此可以在这两个字段上创建索引。
视图创建
视图是由数据库中一个表或者多个表导出的虚拟表,作用是方便用户对数据的操作。在这个新闻发布系统中,也设计了一个视图改善查询操作。
在新闻发布系统中,如果直接查询news_Comment表,显示信息时会显示新闻编号和评论编号。这种显示不直观,为了以后查询方便,可以建立一个视图news_view。这个视图显示评论编号、新闻编号、新闻级别、新闻标题、新闻内容和新闻发布时间。创建视图news_view的SQL代码如下:
![]()
触发器创建
触发器由INSERT、UPDATE和DELETE等事件来触发某种特定的操作。满足触发器的触发条件时,数据库系统就会执行触发器中定义的程序语句。这样做可以保证某些操作之间的一致性。为了使论坛系统的数据更新更加快速和合理,可以在数据库中设计几个触发器。
创建UPDATE触发器
在设计表时,news表和news_Comment表的newsID字段的值是一样的。如果news表中的newsID字段的值更新了,那么news_Comment表中的newsID字段的值也必须同时更新。这可以通过一个UPDATE触发器来实现。创建UPDATE触发器update_newsID的SQL代码如下:
其中,NEW.newsID表示news表中更新的记录的newsID值。
创建DELETE触发器
如果从user表中删除一个用户的信息,那么这个用户在users_comment表中的信息也必须同时删除。这也可以通过触发器来实现。在user表上创建delete_user触发器,只要执行DELETE操作,就删除users_comment表中相应的记录。创建delete_user触发器的SQL语句如下:
其中,OLD.userID表示新删除的记录的userID值。
# 本次机器学习项目实战所需的资料,项目资源如下: 链接:https://pan.baidu.com/s/1zlxUra9Lp_mJZE7DJSVeqA 提取码:v48z create table `user` ( `userID` int (11), `userName` varchar (60), `userPassword` varchar (60), `sex` varchar (30), `userEmail` varchar (60) ); insert into `user` (`userID`, `userName`, `userPassword`, `sex`, `userEmail`) values('101','张艺兴','123456','男','234567@qq.com'); insert into `user` (`userID`, `userName`, `userPassword`, `sex`, `userEmail`) values('102','佟丽娅','234567','女','234567@qq.com'); insert into `user` (`userID`, `userName`, `userPassword`, `sex`, `userEmail`) values('103','杨幂','345678','女','345678@qq.com');