你的設(shè)想是一個(gè)邏輯,但那種關(guān)系一般不是表能實(shí)習(xí)的,尤其是非事務(wù)支持的表,如果非要用表來表示:
成都創(chuàng)新互聯(lián)是專業(yè)的甘井子網(wǎng)站建設(shè)公司,甘井子接單;提供網(wǎng)站制作、做網(wǎng)站,網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行甘井子網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!
SELECT fid FROM TABLE WHERE uid=selfId (我關(guān)注的用戶)
SELECT COUNT(*) FROM TABLE WHERE fid=selfId (我的粉絲數(shù))
SELECT b.uid FROM TABLE a, TABLE b WHERE b.fid = a.uid AND a.fid = b.uid(互粉的ID)
你好。方法有二個(gè):
我覺得是這樣設(shè)計(jì)的
一個(gè)字段記錄他所關(guān)注的好友信息
應(yīng)該是json的
然后去數(shù)據(jù)庫查最新的就是更新就是
uchome就是這么干的
--?用戶表(如果這個(gè)表數(shù)據(jù)相當(dāng)多,可以用分區(qū)表)
create?table?userinfo
(?userid?number(38,0),?--?可以用序列遞增值也成,自己看著辦
username?varchar2(60),
phone?varchar2(20),
address?varchar2(20),
sex?char(1),
cdate?date?default?sysdate
--?其他字段,自己添加
);
alter?table?userinfo?add?constraints?pk_userinfo?primary?key(userid);
--?用戶關(guān)注信息表(如果這個(gè)表數(shù)據(jù)相當(dāng)多,可以用分區(qū)表):
create?table?userattention
(?userid?number(38,0),???????????--?用戶ID
attention_userid?number(38,0),?--?被關(guān)注的用戶ID
status?number(18,0),???????????--?關(guān)注狀態(tài)(或者說關(guān)注等級,自己定義:0代表什么,1代表什么)
cdate?date?default?sysdate,????--?創(chuàng)建時(shí)間
udate?date?default?sysdate?????--?修改時(shí)間
--?其他字段,自己添加
);
--?為保持?jǐn)?shù)據(jù)完整性:不管是“用戶ID”還是“被關(guān)注的用戶ID”其ID必須在userinfo表中存在!
alter?table?userattention?add?constraints?pk_userattention?primary?key(userid,attention_userid);
alter?table?userattention?add?constraints?fk_userattention_userid?foreign?key?(userid)?references?userinfo(userid);
alter?table?userattention?add?constraints?fk_userattention_att_userid?foreign?key?(attention_userid)?references?userinfo(userid);
userattention表中一個(gè)userid對應(yīng)該可能有N條記錄(而不像你說的:用一條記錄,其不同的attention_userid?用逗號隔開,這樣設(shè)置是不合理的)
--?好比QQ號,我的QQ可以添加N個(gè)QQ好友,但我想:騰迅應(yīng)該不會(huì)將我這N個(gè)QQ好友用字串連成一條記錄(這也太吝嗇啦)
1.建立用戶信息表
create table userinfo(id int(4) not null primary key, name varchar(20) not null unique key)engine=innodb default charset=utf8;
2.建立好友關(guān)系表
create table friend(uid int(4) not null, foreign key(uid) references
userinfo(id),fid int(4) not null, foreign key(fid) references
userinfo(id),unique key(uid,fid))engine=innodb default charset=utf8;
3.追加測試數(shù)據(jù)(滿足uidfid條件)
insert userinfo values(1111---9999,'namea---namei’);
insert friend values(1111,4444---6666);
insert friend values(5555,6666---9999);
4.查詢好友(5555的好友)
select * from friend where uid=5555 or fid=5555;
+-------+------+
| uid | fid |
+-------+------+
| 1111 | 5555 |
| 5555 | 6666 |
| 5555 | 7777 |
| 5555 | 8888 |
| 5555 | 9999 |
+-------+--------+
5.問題:
5.1.userinfo中的id和name不為null,且不可重復(fù):table設(shè)計(jì)可以做到
5.2.friend中的uid和fid均不為null,且都來自于userinfo的id:table設(shè)計(jì)可以實(shí)現(xiàn)
5.3.(uid,fid)組合不可重復(fù):table設(shè)計(jì)可以完成
5.4.好友關(guān)系的表達(dá)時(shí),(1111,5555)和(5555,1111)有冗余,也會(huì)出現(xiàn)(1111,1111)這樣的數(shù)據(jù):這個(gè)在table設(shè)計(jì)實(shí)現(xiàn)比較麻煩,需要在程序?qū)用鎸?shí)現(xiàn),也即增加限制條件uidfid即可
6.結(jié)果:
table設(shè)計(jì)達(dá)不到要求,或者較難達(dá)到要求時(shí),可以在程序?qū)用嬗枰詮浹a(bǔ)。
你這個(gè)應(yīng)該是多對多的關(guān)系,所以建議你這樣建表。
1、創(chuàng)建一個(gè)用戶信息表
2、創(chuàng)建一個(gè)商品信息表
3、創(chuàng)建一個(gè)用戶和商品關(guān)系表
通過以上三個(gè)表可以直觀的表示出用戶和商品的關(guān)系也就是哪些用戶關(guān)注了哪些商品!
1、打開Navicat for MySQL,找到要?jiǎng)?chuàng)建數(shù)據(jù)庫中數(shù)據(jù)表
2、接著我們在“表”上面單擊鼠標(biāo)右鍵,然后點(diǎn)擊“新建表”
3、然后,右邊就會(huì)出現(xiàn)設(shè)計(jì)表的界面,這里可以設(shè)置表的字段名,類型,長度以及是否為null等
4、設(shè)計(jì)完數(shù)據(jù)表之后,點(diǎn)擊“保存”按鈕就OK了。
5、我們在其中輸入表名就點(diǎn)擊確定就可以了,表名可以根據(jù)自己的需求來設(shè)置