如何做一个类似QQ说说体系的表结构
分析
- 首先用户是一个单独表,包括用户基本信息。
- 对于说说表,可以包括一些基本的信息,包括说说文字、发表日期、发表地点、浏览次数、点赞数等。但是,说说中的图片不能放在该表中,因为可能有多张图片,无法确定图片张数
- 应该另外建一张图片表,该表就是说说里面的图片。以说说主键为外键。
- 对于评论表,首先有一个id,还要有一个判断是评论说说还是评论评论(=_=)的字段。还有,一个判断该评论所属的 id(我评论了哪条评论),该id(外键)以自己的id(主键)作为外键(重点),由此找到评论了哪条评论。
建表
- user(用户表,例如QQ账号):uid,uname,uimg(头像)。
- tops(说说表):tid、tcontent(文字内容)、tdatetime(发表日期)、tplace(发表地点)、tvie ws(浏览次数)、tzan(点赞数)、uid
- imgs(说说里面的图片,可能有多张图片,另外构建表):iid、iurl(图片链接)、tid
- comments(评论表):cid、ccontent(评论内容)、cstate(评论低级:是不是评论发说说人,还是评论评论的人)、cid、tid、uid
建表语句
建表语句最后附源码中

插入语句
-
插入user表
INSERT INTO USER
VALUES
(1, ‘张三’, ‘我是张三的头像地址’),
(2, ‘李四’, ‘我是李四的头像地址’),
(3, ‘王五’, ‘我是王五的头像地址’),
(4, ‘赵六’, ‘我是赵六的头像地址’);
-
插入tops表
INSERT INTO tops
VALUES
(
1,
‘今天苏州的天气真差’,
‘2016-06-15’,
‘苏州’,
3,
5,
1
),
(
2,
‘尼玛,又输了。’,
‘2016-07-13’,
‘郑州’,
3,
5,
2
),
(
3,
‘烟花三月下扬州’,
‘2016-03-03’,
‘扬州’,
3,
5,
3
),
(
4,
‘我们一起去周庄吧’,
‘2016-04-06’,
‘上海’,
3,
5,
3
);
-
插入图片表
INSERT INTO imgs
VALUES
(
1,
‘我是说说1的图片资源-1’,
1
),
(
2,
‘我是说说1的图片资源-2’,
1
),
(
3,
‘我是内容1的图片资源-3’,
1
),
(
4,
‘我是内容1的图片资源-4’,
1
);
INSERT INTO imgs
VALUES
(
4,
‘我是内容2的图片资源-1’,
2
),
(
5,
‘我是内容2的图片资源-2’,
2
);
- 插入评论表
#默认值设置: #cstate:0 评论说说;1:评论评论 #cid_id:0 评论说说 其它值:是什么id就评论那个id的评论 #用户id为3的人评论说说编号为1的内容 INSERT comments VALUES(1,'瞎扯,有郑州的天气差吗?我还没见过!',0,null,1,3); #插入一条评论说说1 的评论 INSERT comments VALUES(2,'我也感觉苏州的天气可差劲',0,null,1,4); #用户id为2的人评论说说标号为1的评论的编号为1的评论。日了,醉了、 INSERT comments VALUES(3,'郑州的天气差?有北京的差吗?瞎扯!',1,1,1,2); #插入一条评论说说1 的评论 INSERT comments VALUES(4,'苏州的天气差吗?!',0,null,1,3); #用户id为4的人评论说说标号为1的评论的编号为2的评论。 INSERT comments VALUES(5,'呵呵。北京天气那么差,都特么一个一个的跑去魔都?!',1,3,1,4); #用户id为2的人评论说说编号为3的内容 INSERT comments VALUES(6,'下扬州干嘛?',0,null,3,2);
-
任务
请查出说说编号1的 拥有者id、拥有者名字、说说内容、【评论人id、评论人姓名、评论内容】—-所有子评论。
-
尝试用查询语句得到5的答案
第一步:查出说说编号1的 拥有者id、拥有者名字、说说内容
第二步:查询出直接评论说说的所有评论,包括:评论人名字,评论内容,评论的说说的内容,说说的拥有者id(不是评论评论的内容)select user.uid, user.uname,tops.tcontent from user,tops where tops.uid=user.uid and cid=1;
第三步:查询出评论评论的内容,包括:评论人名字,评论内容,评论的评论的内容,评论的评论的评论人名字,评论的说说的内容,说说的拥有者select user.uname,comments.ccontent,tops.tcontent,tops.uid from user,comments,tops where comments.uid=user.uid and comments.tid=tops.tid and comments.cstate=0 and tops.tid=1;
【select (select user.uname,comments.ccontent from comments where )user.uname,comments.ccontent, tops.tcontent,tops.uid from user,comments,tops where comments.uid=user.uid and comments.tid=tops.tid and comments.cstate=1 and tops.tid=1; cid ccontent cid_id tid uid】X 该步难以实现。考虑用java代码实现。该部分通过jdbc实现
- java的代码实现的主要步骤:获取根据说说id每个表在java 中对应的对象,然后遍历,当然,遍历过程中有很多处理。
- 没有解决的问题:如果有人插入到评论中两个人的对话,不会按照实际中说说评论的顺序,而是按照原来两人对话的顺序排序。多余的字段:评论表中cstste,因为在java中可以根据cid_id判断是不是评论说说还是评论评论,所以该字段显得多余。
-
数据库源码
/*
Navicat MySQL Data Transfer
Source Server : 123 Source Server Version : 50027 Source Host : localhost:3306 Source Database : shuo Target Server Type : MYSQL Target Server Version : 50027 File Encoding : 65001 Date: 2016-03-19 12:10:47 */ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for `comments` -- ---------------------------- DROP TABLE IF EXISTS `comments`; CREATE TABLE `comments` ( `cid` int(11) NOT NULL auto_increment, `ccontent` text, `cstate` int(11) default NULL, `cid_id` int(11) default NULL, `tid` int(11) NOT NULL, `uid` int(11) NOT NULL, PRIMARY KEY (`cid`), KEY `tid` (`tid`), KEY `uid` (`uid`), KEY `fk_1` (`cid_id`), CONSTRAINT `comments_ibfk_1` FOREIGN KEY (`tid`) REFERENCES `tops` (`tid`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `comments_ibfk_2` FOREIGN KEY (`uid`) REFERENCES `user` (`uid`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `fk_1` FOREIGN KEY (`cid_id`) REFERENCES `comments` (`cid`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of comments -- ---------------------------- INSERT INTO `comments` VALUES ('1', '瞎扯,有郑州的天气差吗?我还没见过!', '0', null, '1', '3'); INSERT INTO `comments` VALUES ('2', '我也感觉苏州的天气可差劲', '0', null, '1', '4'); INSERT INTO `comments` VALUES ('3', '郑州的天气差?有北京的差吗?瞎扯!', '1', '1', '1', '2'); INSERT INTO `comments` VALUES ('4', '苏州的天气差吗?!', '0', null, '1', '3'); INSERT INTO `comments` VALUES ('5', '呵呵。北京天气那么差,都特么一个一个的跑去魔都?!', '1', '3', '1', '4'); INSERT INTO `comments` VALUES ('6', '下扬州干嘛?', '0', null, '3', '2'); -- ---------------------------- -- Table structure for `imgs` -- ---------------------------- DROP TABLE IF EXISTS `imgs`; CREATE TABLE `imgs` ( `iid` int(11) NOT NULL auto_increment, `iurl` varchar(200) default NULL, `tid` int(11) NOT NULL, PRIMARY KEY (`iid`), KEY `tid` (`tid`), CONSTRAINT `imgs_ibfk_1` FOREIGN KEY (`tid`) REFERENCES `tops` (`tid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of imgs -- ---------------------------- INSERT INTO `imgs` VALUES ('1', '我是说说1的图片资源-1', '1'); INSERT INTO `imgs` VALUES ('2', '我是说说1的图片资源-2', '1'); INSERT INTO `imgs` VALUES ('3', '我是内容1的图片资源-3', '1'); INSERT INTO `imgs` VALUES ('4', '我是内容1的图片资源-4', '1'); INSERT INTO `imgs` VALUES ('5', '我是内容2的图片资源-1', '2'); INSERT INTO `imgs` VALUES ('6', '我是内容2的图片资源-2', '2'); -- ---------------------------- -- Table structure for `tops` -- ---------------------------- DROP TABLE IF EXISTS `tops`; CREATE TABLE `tops` ( `tid` int(11) NOT NULL auto_increment, `tcontent` text, `tdatetime` varchar(20) default NULL, `tplace` varchar(20) default NULL, `tviews` int(11) default NULL, `tzan` int(11) default NULL, `uid` int(11) NOT NULL, PRIMARY KEY (`tid`), KEY `uid` (`uid`), CONSTRAINT `tops_ibfk_1` FOREIGN KEY (`uid`) REFERENCES `user` (`uid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of tops -- ---------------------------- INSERT INTO `tops` VALUES ('1', '今天苏州的天气真差', '2016-06-15', '苏州', '3', '5', '1'); INSERT INTO `tops` VALUES ('2', '尼玛,又输了。', '2016-07-13', '郑州', '3', '5', '2'); INSERT INTO `tops` VALUES ('3', '烟花三月下扬州', '2016-03-03', '扬州', '3', '5', '3'); INSERT INTO `tops` VALUES ('4', '我们一起去周庄吧', '2016-04-06', '上海', '3', '5', '3'); -- ---------------------------- -- Table structure for `user` -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `uid` int(11) NOT NULL auto_increment, `uname` varchar(20) default NULL, `uimg` varchar(100) default NULL, PRIMARY KEY (`uid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of user -- ---------------------------- INSERT INTO `user` VALUES ('1', '张三', '我是张三的头像地址'); INSERT INTO `user` VALUES ('2', '李四', '我是李四的头像地址'); INSERT INTO `user` VALUES ('3', '王五', '我是王五的头像地址'); INSERT INTO `user` VALUES ('4', '赵六', '我是赵六的头像地址');
-
java操作带数据库源码
http://download.csdn.net/detail/wgyscsf/9466400