1.建立使用者資訊表
create table userinfo(id int(4) not null primary key, name varchar(20) not null unique key)engine=innodb default charset=utf8;
2.建立好友關係表
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.追加測試資料(滿足uidinsert 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,且不可重複:table設計可以做到
5.2.friend中的uid和fid均不為null,且都來自於userinfo的id:table設計可以實現
5.3.(uid,fid)組合不可重複:table設計可以完成
5.4.好友關係的表達時,(1111,5555)和(5555,1111)有冗餘,也會出現(1111,1111)這樣的資料:這個在table設計實現比較麻煩,需要在程式層面實現,也即增加限制條件uid6.結果:
table設計達不到要求,或者較難達到要求時,可以在程式層面予以彌補。
即時聊天系統中群組和好友關係Mysql資料表設計
使用者資料表 create table wx contacts id bigint 20 unsigned not null auto increment,data type varchar 16 not null default comment 介面狀態碼 addfrom varchar 64 n...
樹形結構在關聯式資料庫中的設計
在程式設計中,經常以樹形結構表示資料的層次關係,如選單的結構 商品的分類等。這樣的層次結構在關聯式資料庫中難以直觀地表示。常見的一種做法是用乙個字段指向上級節點來表示記錄的上下級關係。fidpid fname 1 food 21 fruit32 red4 3cherry52 yellow65 ban...
MySQL關係型資料庫設計思路
正規化化和反正規化化對比 其中,二維表很容易理解,二維即指行和列,不做細述,以下將詳細討論四個正規化和工作中的業務問題。當表中字段存在可再分情況時,對其進行拆分,不滿足第一正規化。首先是 1nf,另外包含兩部分內容,一是表必須有乙個主鍵 二是沒有包含在主鍵中的列必須完全依賴於主鍵,而不能只依賴於主鍵...