如何做一個類似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