一張表中的主鍵只能有一個,外鍵可以有多個,如果一張表中多個列都需要被別的表的外鍵參考,需要使用候選碼(非空并且唯一),具體到你的這個問題的需求可以考慮用如下方法解決:
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:域名注冊、網(wǎng)頁空間、營銷軟件、網(wǎng)站建設(shè)、西塞山網(wǎng)站維護(hù)、網(wǎng)站推廣。
把a(bǔ)表中的bookid和authorid都設(shè)置為非空并且唯一,即
create table a(bookid int not null unique, authorid int not null unique);
然后在book表和author表中就可以分別設(shè)置外鍵來參照a表中兩個不同的字段了。
打開我的navicat,然后找到我的teacher表,選中它,然后點擊菜單欄上的‘design table'
2. 在彈出的對話框中找到“Foreign Keys”,然后單機(jī)。
3. 然后會出現(xiàn)一個設(shè)置外鍵的界面,一共有七列。簡單介紹一下這幾列的意思?!畁ame’:可以不填,你一會保存成功系統(tǒng)會自動生成。FieldName’:就是你要把哪個鍵設(shè)置為外鍵。這里選擇‘dept’,‘Reference DadaBase’:外鍵關(guān)聯(lián)的數(shù)據(jù)庫?!甊eference Table‘ :關(guān)聯(lián)的表 這里是dept表‘Forgin filed Names’:關(guān)聯(lián)的的字段,這里是code‘ondelete’:就是刪除的時候選擇的動作。這里我的選擇是setNull,意思就是當(dāng)關(guān)聯(lián)的表刪除以后,teacher》dept字段會設(shè)置為null.
4. 設(shè)置完成后點擊‘save’保存退出,也可以點擊‘a(chǎn)dd Foreign Key’再添加一個外鍵。
打開我的navicat,然后找到我的teacher表,選中它,然后點擊菜單欄上的‘design table’。如下圖:
2. 在彈出的對話框中找到“Foreign Keys”,然后單機(jī)。如下圖:
3. 然后會出現(xiàn)一個設(shè)置外鍵的界面,一共有七列。簡單介紹一下這幾列的意思。‘name’:可以不填,你一會保存成功系統(tǒng)會自動生成。FieldName’:就是你要把哪個鍵設(shè)置為外鍵。這里選擇‘dept’,‘Reference DadaBase’:外鍵關(guān)聯(lián)的數(shù)據(jù)庫?!甊eference Table‘ :關(guān)聯(lián)的表 這里是dept表‘Forgin filed Names’:關(guān)聯(lián)的的字段,這里是code‘ondelete’:就是刪除的時候選擇的動作。這里我的選擇是setNull,意思就是當(dāng)關(guān)聯(lián)的表刪除以后,teacher》dept字段會設(shè)置為null。如圖
4. 設(shè)置完成后點擊‘save’保存退出,也可以點擊‘a(chǎn)dd Foreign Key’再添加一個外鍵。k如圖:
中間表應(yīng)該存著文章表的ID和該文章對應(yīng)的分類的ID。文章表作為主表,左連接上中間表,再左連接上分類表。文章表作為主表,即使一本書它沒有分類,也能查詢出這本書。因為一本書會有多個分類,可以使用group by或者去重函數(shù)來去掉重復(fù)的書。如果查詢時想要查出一本書有幾個分類,可以使用group_cat()函數(shù)把所有分類名稱拼接在一起。要查詢某一個分類的書時,where 后面分類ID等于要查詢的分類ID即可。
多對多關(guān)系至少需要3個表,我們把一個表叫做主表,一個叫做關(guān)系表,另外一個叫做字典表或者副表(字典表是紀(jì)錄比較少,而且基本穩(wěn)定的,例如:版塊名稱;副表是內(nèi)容比較多,內(nèi)容變化的,例如)。
按照數(shù)據(jù)庫的增刪查改操作,多對多關(guān)系的查找都可以用inner join或者
select * from 主表 where id in (select 主表id from 關(guān)系表)
1,角色任命型
特點:關(guān)系表兩外鍵組合無重復(fù)紀(jì)錄,關(guān)系表一般不需要時間字段和主鍵,有一個表是字典類型的表。
界面特點:顯示主表,用checkbox或多選select設(shè)置多選關(guān)系。
例如:任命版主(用戶表-關(guān)系表-版塊名稱表),角色權(quán)限控制等,用戶是5個版塊版主,只要關(guān)系表5行紀(jì)錄就可以確立,關(guān)系表的兩個外鍵具有聯(lián)合主鍵性質(zhì)。
增加關(guān)系:如果沒有組合紀(jì)錄,insert之。
刪除關(guān)系:如果有組合紀(jì)錄,刪除之。
2,集合分組型
特點:同角色任命型類似,關(guān)系表兩外鍵組合無重復(fù)紀(jì)錄,關(guān)系表一般不需要時間字段和主鍵。區(qū)別是主副表都不是字典表,可能都很大不固定。
界面特點:顯示主表,用搜索代替簡單的checkbox或多選select,或者一條一條的添加。
例如:歌曲專集(專集表-關(guān)系表-歌曲表)。手機(jī)分組(分組表-關(guān)系表-手機(jī)表)。用戶圈子(圈子表-關(guān)系表-用戶表)。文章標(biāo)簽(文章表-關(guān)系表-標(biāo)簽表)
增加關(guān)系:同版主任命型。
刪除關(guān)系:同版主任命型。
3,明細(xì)帳型
特點:關(guān)系表可以有重復(fù)紀(jì)錄,關(guān)系表一般有時間字段,有主鍵,可能還有文字型的字段用來說明每次發(fā)生關(guān)系的原因(消費)。
界面特點:顯示關(guān)系表,用radio或下拉設(shè)置單選關(guān)系。
例如:現(xiàn)金消費明細(xì)帳或訂單(用戶表-訂單表-消費原因表),用戶可能多次在同一事情上重復(fù)消費。積分變化紀(jì)錄也屬于這類。
增加關(guān)系:不管有沒有組合紀(jì)錄,insert之,紀(jì)錄時間。
刪除關(guān)系:根據(jù)關(guān)系表PK刪除。
4,評論回復(fù)型
特點:同明細(xì)帳型關(guān)系表一般有時間字段,有主鍵,區(qū)別是重點在文字型的字段用來說明每次發(fā)生關(guān)系的內(nèi)容(評論回復(fù))。
界面特點:回復(fù)文本框。
例如:論壇回復(fù)(用戶表-回復(fù)表-帖子表),用戶可能多次在不同帖子上評論回復(fù)費。
增加關(guān)系:不管有沒有組合紀(jì)錄,insert之,紀(jì)錄時間和文字。
刪除關(guān)系:根據(jù)關(guān)系表(回復(fù)表)PK刪除。
5,站內(nèi)短信型
特點:主副表是同一個,關(guān)系表一般有時間字段,有主鍵,重點在關(guān)系表文字型的字段用來說明每次發(fā)生關(guān)系的內(nèi)容(消息)或者其他標(biāo)記位來表示文字已讀狀態(tài)時間等。
界面特點:回復(fù)文本框。
例如:站內(nèi)短信(用戶表-短信表-用戶表),用戶可能給用戶群發(fā)或者單發(fā),有標(biāo)記位來表示文字已讀狀態(tài)時間等。
增加關(guān)系:不管有沒有組合紀(jì)錄,insert之,紀(jì)錄時間和文字。
刪除關(guān)系:根據(jù)關(guān)系表(回復(fù)表)PK刪除。
6,用戶好友型
特點:主副表是同一個,同集合分組型,關(guān)系表兩外鍵組合無重復(fù)紀(jì)錄,關(guān)系表一般不需要時間字段和主鍵。
界面特點:同集合分組型,顯示主表,用搜索代替簡單的checkbox或多選select,或者一條一條的添加。
例如:下載站點的文件,(文件表-關(guān)系表-文件表)可以被軟件工具打開,軟件工具本身也是一種文件,可以被下載。用戶的好友,也是用戶(用戶表-好友關(guān)系表-用戶表)
增加關(guān)系:同版主任命型。
刪除關(guān)系:同版主任命型
文章標(biāo)題:mysql怎么做多對多,MySQL多對多
文章網(wǎng)址:http://jinyejixie.com/article36/dsssdpg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號、Google、虛擬主機(jī)、服務(wù)器托管、用戶體驗、網(wǎng)站營銷
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)