如何做一个类似QQ说说体系的表结构(一)

如何做一个类似QQ说说体系的表结构

分析

  1. 首先用户是一个单独表,包括用户基本信息。
  2. 对于说说表,可以包括一些基本的信息,包括说说文字、发表日期、发表地点、浏览次数、点赞数等。但是,说说中的图片不能放在该表中,因为可能有多张图片,无法确定图片张数
  3. 应该另外建一张图片表,该表就是说说里面的图片。以说说主键为外键。
  4. 对于评论表,首先有一个id,还要有一个判断是评论说说还是评论评论(=_=)的字段。还有,一个判断该评论所属的 id(我评论了哪条评论),该id(外键)以自己的id(主键)作为外键(重点),由此找到评论了哪条评论。

建表

  1. user(用户表,例如QQ账号):uid,uname,uimg(头像)。
  2. tops(说说表):tid、tcontent(文字内容)、tdatetime(发表日期)、tplace(发表地点)、tvie ws(浏览次数)、tzan(点赞数)、uid
  3. imgs(说说里面的图片,可能有多张图片,另外构建表):iid、iurl(图片链接)、tid
  4. comments(评论表):cid、ccontent(评论内容)、cstate(评论低级:是不是评论发说说人,还是评论评论的人)、cid、tid、uid

建表语句

建表语句最后附源码中

这里写图片描述

插入语句

  1. 插入user表

    INSERT INTO USER
    VALUES
    (1, ‘张三’, ‘我是张三的头像地址’),
    (2, ‘李四’, ‘我是李四的头像地址’),
    (3, ‘王五’, ‘我是王五的头像地址’),
    (4, ‘赵六’, ‘我是赵六的头像地址’);

  2. 插入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
    );

  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
    );

  4. 插入评论表

    #默认值设置:
    #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);
    
  5. 任务

    请查出说说编号1的 拥有者id、拥有者名字、说说内容、【评论人id、评论人姓名、评论内容】—-所有子评论。

  6. 尝试用查询语句得到5的答案

    第一步:查出说说编号1的 拥有者id、拥有者名字、说说内容

    select user.uid, user.uname,tops.tcontent from user,tops where tops.uid=user.uid and cid=1;
    

    第二步:查询出直接评论说说的所有评论,包括:评论人名字,评论内容,评论的说说的内容,说说的拥有者id(不是评论评论的内容)

    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实现 
    
  7. java的代码实现的主要步骤:获取根据说说id每个表在java 中对应的对象,然后遍历,当然,遍历过程中有很多处理。

  8. 没有解决的问题:如果有人插入到评论中两个人的对话,不会按照实际中说说评论的顺序,而是按照原来两人对话的顺序排序。多余的字段:评论表中cstste,因为在java中可以根据cid_id判断是不是评论说说还是评论评论,所以该字段显得多余。

  9. 数据库源码

    /*
    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', '赵六', '我是赵六的头像地址');
    
  10. java操作带数据库源码

    http://download.csdn.net/detail/wgyscsf/9466400

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值