MySQL創(chuàng)建關(guān)聯(lián)表可以理解為是兩個(gè)表之間有個(gè)外鍵關(guān)系,但這兩個(gè)表必須滿(mǎn)足三個(gè)條件
成都創(chuàng)新互聯(lián)專(zhuān)業(yè)為企業(yè)提供凱里網(wǎng)站建設(shè)、凱里做網(wǎng)站、凱里網(wǎng)站設(shè)計(jì)、凱里網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、凱里企業(yè)網(wǎng)站模板建站服務(wù),十余年凱里做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
1.兩個(gè)表必須是InnoDB數(shù)據(jù)引擎
2.使用在外鍵關(guān)系的域必須為索引型(Index)
3.使用在外鍵關(guān)系的域必須與數(shù)據(jù)類(lèi)型相似
下面分別建兩個(gè)表來(lái)說(shuō)明一下:
Create
TABLE
IF
NOT
EXISTS
`books`
(
`book_id`
smallint(6)
NOT
NULL
auto_increment
COMMENT
‘書(shū)籍編號(hào)',
`book_name`
char(20)
NOT
NULL
COMMENT
’書(shū)名‘,
硬關(guān)聯(lián)是建立 外鍵約束,把一個(gè)表的字段設(shè)置成外鍵,關(guān)聯(lián)到其它表
foreign key(xxid) references table (id);
軟關(guān)聯(lián)是在 xxid上建立索引,在實(shí)際業(yè)務(wù)中進(jìn)行數(shù)據(jù)綁定
主鍵:唯一標(biāo)識(shí)一條記錄,不能有重復(fù)。作用:用來(lái)保證數(shù)據(jù)的完整性。 外鍵:表的外鍵是另一表的主鍵??梢允侵貜?fù)的,可以是空值,用來(lái)和其他表建立聯(lián)系,一個(gè)表可以有多個(gè)外鍵。
你分別給“評(píng)論表”(表A)和“文章表”(表B)建立了一個(gè)主鍵,數(shù)據(jù)表是存儲(chǔ)多條記錄,而主鍵是區(qū)分記錄的唯一性的,你將 表A 的主鍵id放到 表B 中作為外鍵(aid),你就已經(jīng)將兩表通過(guò) B表(aid) 建立了一種關(guān)系,就好像母子兩人,因?yàn)橛醒夑P(guān)系,就可以知道一人是另一個(gè)人的母親,兩個(gè)表有關(guān)系了就可以互相知道了;
B表里有了aid必須是A表中存在的,就像兒子肯定有母親的,所有一文章記錄有評(píng)論(aid),那aid就能在A表中找到,找到的這條評(píng)論就是這篇文章的評(píng)論;
因?yàn)槲恼潞驮u(píng)論是一對(duì)多的關(guān)系,像LZ那樣文章表冗余就會(huì)比較多;個(gè)人覺(jué)得將文章的主鍵作為評(píng)論表的外鍵比較好;
2張表,一張用戶(hù)表,一張好友表。好友表里面放用戶(hù)表的ID就行了。
1.建立用戶(hù)信息表
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.追加測(cè)試數(shù)據(jù)(滿(mǎn)足uidfid條件)
insert userinfo values(1111---9999,'namea---namei’);
insert friend values(1111,4444---6666);
insert friend values(5555,6666---9999);
4.查詢(xún)好友(5555的好友)
select * from friend where uid=5555 or fid=5555;
+-------+------+
| uid | fid |
+-------+------+
| 1111 | 5555 |
| 5555 | 6666 |
| 5555 | 7777 |
| 5555 | 8888 |
| 5555 | 9999 |
+-------+--------+
5.問(wèn)題:
5.1.userinfo中的id和name不為null,且不可重復(fù):table設(shè)計(jì)可以做到
5.2.friend中的uid和fid均不為null,且都來(lái)自于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ǔ)。