如何做一个类似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       : shuoTarget Server Type    : MYSQL
    Target Server Version : 50027
    File Encoding         : 65001Date: 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

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

  1. Excel做一个类似QQ登录窗口

    效果图,该工具测试版在我的资源页点击进入下载,顺便赚点积分,积分不够的加我QQ说明来意直接发给你,登陆账号:846058904,密码:123456789.运行时需要打开宏 功能:通过校验账号密码打开E ...

  2. android仿qq强制下线服务器,qq强制下线(实现一个类似QQ的强制下线功能)

    qq强制下线(实现一个类似QQ的强制下线功能),哪吒游戏网给大家带来详细的qq强制下线(实现一个类似QQ的强制下线功能)介绍,大家可以阅读一下,希望这篇qq强制下线(实现一个类似QQ的强制下线功能)可 ...

  3. mysql生成类似qq号_【mysql】类似QQ的好友关系表是怎么设计的?

    请问一下类似QQ的好友关系表是怎么设计的? 难道只是简单的id,userId,friendId吗? 回答 其实没有必要把事情想得太复杂了,按照需求慢慢递进就可以了. 这是我做关注功能的表结构,可以参考 ...

  4. qt5 做的一个类似qq的界面

    代码已上传到github,地址:https://github.com/841330740/ui-of-qq/. 1.实现日志: 两种按钮,自定义关闭窗口按钮,屏蔽标题栏导致无法拖拽窗体,eventFi ...

  5. php仿qq群聊,用Python写一个类似qq群聊的聊天室

    用Python写一个聊天室 功能 : 类似qq群聊 1. 进入聊天室需要输入姓名,姓名不能重复 2. 有人进入聊天室会向其他人发送通知 xxx 进入了聊天室 3. 一个人发消息,其他人会收到消息 xx ...

  6. iOS 一个类似QQ的图片添加、图片浏览Demo

    自己没事修改的一个小功能, 类似QQ的 添加图片和浏览图片( 基于ImagePicker.MJPhotoBrowser.SDWebImage) 功能: 1.添加图片.删除图片 2.浏览图片 3.自动换 ...

  7. 利用java知识做一个模拟qq登入模拟界面

    qq模拟登入界面 一.设计概述 1.使用java所学知识,做一个qq登入模拟界面,如图所示. QQ登录界面整体可以看做一个容器窗口,使用JFrame容器来实现,从登录界面的布局效果和显示内容可以看出, ...

  8. 一个漂亮的输出MySql数据库表结构的PHP页面

    经常为了方便和直观,我们会首先直接在数据库中设计出表,但是接下来又要将表的结构和设计编写在设计文档中,以便编码的时候可以直观的查询,一旦数据库表非常多,字段非常多的时候,这无疑是件非常郁闷的工作. 这 ...

  9. 14亿条记录,12c 做不到2小时内变更表结构字段类型?

    导读:本文详细讲述Oracle 12c 在2小时内完成一张14亿条记录的表结构字段类型变更的过程,希望可以帮到工作中的大家,如有任何疑问,欢迎在本文的评论区交流讨论. 概述 Oracle大表在线修改的 ...

最新文章

  1. 新款iPad真香,谁用谁知道!
  2. 漫谈时序设计(3)走进时序约束的大门!
  3. linux ubuntu基础,linux基础入门详细分析(基于ubuntu)
  4. Ramdisk文件系统的制作与调试运行
  5. linux系统查看CPU使用含义、IO、内存、硬盘使用、负载
  6. Spring Boot 内置Tomcat——IntelliJ IDEA中配置模块目录设为文档根目录(DocumentRoot)解决方案
  7. Wireshark 抓包分析 RTSP/RTP/RTCP 基本工作过程
  8. HttpResponse对象
  9. python装饰器传递参数_Python装饰器高级版—Python类内定义装饰器并传递self参数...
  10. python层次聚类_用Python做层次聚类分析
  11. Apache的详细配置
  12. mysql 集中join的区别
  13. python刷题_小李飞刀:用python刷题ing....
  14. fastjson反序列化漏洞_【漏洞复现】fastjson反序列化漏洞
  15. consul 数据持久化_一起学习Nacos的数据持久化
  16. Sentry的安装搭建与使用
  17. (Java蓝桥杯算法)递归方法求Ckn
  18. thinkadmin
  19. c++ value categories
  20. matlab矩阵生成与编辑方法

热门文章

  1. 自协商SGMII_SerDers与SGMII篇
  2. FLASH模拟EEPROM的方法
  3. 聊城涉密信息系统集成资质申请条件
  4. mod_jk 内部结构
  5. 解决! 华为鸿蒙安装Google Play,GMS三件套,设备未获得Play保护机制认证。(越过谷歌play保护机制认证,解除Google play保护机制弹窗)
  6. 选择正确的CE版本然后下载
  7. iview样式修改Pooptip气泡框
  8. 数据库成绩管理系统Mysql_学生成绩管理系统数据库模板1.doc
  9. 基于C++类模板的链表
  10. 机器人离线编程画圆误差解决方案_机器人离线编程技术浅析及未来展望