一張表中的主鍵只能有一個,外鍵可以有多個,如果一張表中多個列都需要被別的表的外鍵參考,需要使用候選碼(非空并且唯一),具體到你的這個問題的需求可以考慮用如下方法解決:
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊、網(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表,選中它,然后點(diǎn)擊菜單欄上的‘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è)置完成后點(diǎn)擊‘save’保存退出,也可以點(diǎn)擊‘a(chǎn)dd Foreign Key’再添加一個外鍵。
打開我的navicat,然后找到我的teacher表,選中它,然后點(diǎn)擊菜單欄上的‘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è)置完成后點(diǎn)擊‘save’保存退出,也可以點(diǎn)擊‘a(chǎn)dd Foreign Key’再添加一個外鍵。k如圖:
中間表應(yīng)該存著文章表的ID和該文章對應(yīng)的分類的ID。文章表作為主表,左連接上中間表,再左連接上分類表。文章表作為主表,即使一本書它沒有分類,也能查詢出這本書。因?yàn)橐槐緯鴷卸鄠€分類,可以使用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,角色任命型
特點(diǎn):關(guān)系表兩外鍵組合無重復(fù)紀(jì)錄,關(guān)系表一般不需要時間字段和主鍵,有一個表是字典類型的表。
界面特點(diǎ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,集合分組型
特點(diǎn):同角色任命型類似,關(guān)系表兩外鍵組合無重復(fù)紀(jì)錄,關(guān)系表一般不需要時間字段和主鍵。區(qū)別是主副表都不是字典表,可能都很大不固定。
界面特點(diǎn):顯示主表,用搜索代替簡單的checkbox或多選select,或者一條一條的添加。
例如:歌曲專集(專集表-關(guān)系表-歌曲表)。手機(jī)分組(分組表-關(guān)系表-手機(jī)表)。用戶圈子(圈子表-關(guān)系表-用戶表)。文章標(biāo)簽(文章表-關(guān)系表-標(biāo)簽表)
增加關(guān)系:同版主任命型。
刪除關(guān)系:同版主任命型。
3,明細(xì)帳型
特點(diǎn):關(guān)系表可以有重復(fù)紀(jì)錄,關(guān)系表一般有時間字段,有主鍵,可能還有文字型的字段用來說明每次發(fā)生關(guān)系的原因(消費(fèi))。
界面特點(diǎn):顯示關(guān)系表,用radio或下拉設(shè)置單選關(guān)系。
例如:現(xiàn)金消費(fèi)明細(xì)帳或訂單(用戶表-訂單表-消費(fèi)原因表),用戶可能多次在同一事情上重復(fù)消費(fèi)。積分變化紀(jì)錄也屬于這類。
增加關(guān)系:不管有沒有組合紀(jì)錄,insert之,紀(jì)錄時間。
刪除關(guān)系:根據(jù)關(guān)系表PK刪除。
4,評論回復(fù)型
特點(diǎn):同明細(xì)帳型關(guān)系表一般有時間字段,有主鍵,區(qū)別是重點(diǎn)在文字型的字段用來說明每次發(fā)生關(guān)系的內(nèi)容(評論回復(fù))。
界面特點(diǎn):回復(fù)文本框。
例如:論壇回復(fù)(用戶表-回復(fù)表-帖子表),用戶可能多次在不同帖子上評論回復(fù)費(fèi)。
增加關(guān)系:不管有沒有組合紀(jì)錄,insert之,紀(jì)錄時間和文字。
刪除關(guān)系:根據(jù)關(guān)系表(回復(fù)表)PK刪除。
5,站內(nèi)短信型
特點(diǎn):主副表是同一個,關(guān)系表一般有時間字段,有主鍵,重點(diǎn)在關(guān)系表文字型的字段用來說明每次發(fā)生關(guān)系的內(nèi)容(消息)或者其他標(biāo)記位來表示文字已讀狀態(tài)時間等。
界面特點(diǎn):回復(fù)文本框。
例如:站內(nèi)短信(用戶表-短信表-用戶表),用戶可能給用戶群發(fā)或者單發(fā),有標(biāo)記位來表示文字已讀狀態(tài)時間等。
增加關(guān)系:不管有沒有組合紀(jì)錄,insert之,紀(jì)錄時間和文字。
刪除關(guān)系:根據(jù)關(guān)系表(回復(fù)表)PK刪除。
6,用戶好友型
特點(diǎn):主副表是同一個,同集合分組型,關(guān)系表兩外鍵組合無重復(fù)紀(jì)錄,關(guān)系表一般不需要時間字段和主鍵。
界面特點(diǎn):同集合分組型,顯示主表,用搜索代替簡單的checkbox或多選select,或者一條一條的添加。
例如:下載站點(diǎn)的文件,(文件表-關(guān)系表-文件表)可以被軟件工具打開,軟件工具本身也是一種文件,可以被下載。用戶的好友,也是用戶(用戶表-好友關(guān)系表-用戶表)
增加關(guān)系:同版主任命型。
刪除關(guān)系:同版主任命型