t_s
創(chuàng)新互聯(lián)基于成都重慶香港及美國等地區(qū)分布式IDC機(jī)房數(shù)據(jù)中心構(gòu)建的電信大帶寬,聯(lián)通大帶寬,移動大帶寬,多線BGP大帶寬租用,是為眾多客戶提供專業(yè)鄭州服務(wù)器托管報(bào)價,主機(jī)托管價格性價比高,為金融證券行業(yè)服務(wù)器托管,ai人工智能服務(wù)器托管提供bgp線路100M獨(dú)享,G口帶寬及機(jī)柜租用的專業(yè)成都idc公司。
t_d
t_e
再創(chuàng)建一張關(guān)系表:
t_s_d_e里面只有三個字段,t_s
的id、t_d
的id、t_e
的id
每增加一中關(guān)系都在表里添加一條記錄,就可以滿足條件了。
1.數(shù)據(jù)庫中的多對多關(guān)聯(lián)關(guān)系一般需采用中間表的方式處理,將多對多轉(zhuǎn)化為兩個一對多。
2.通過表的關(guān)系,來幫助我們怎樣建表,建幾張表。
一對一
一張表的一條記錄一定只能與另外一張表的一條記錄進(jìn)行對應(yīng),反之亦然。
學(xué)生表:姓名,性別,年齡,身高,體重,籍貫,家庭住址,緊急聯(lián)系人
其中姓名、性別、年齡、身高,體重屬于常用數(shù)據(jù),但是籍貫、住址和聯(lián)系人為不常用數(shù)據(jù)
如果每次查詢都是查詢所有數(shù)據(jù),不常用的數(shù)據(jù)就會影響效率,實(shí)際又不用
常用信息表:ID(P),姓名,性別,年齡,身高,體重
不常用信息表:ID(P),籍貫,家庭住址,緊急聯(lián)系人
解決方案:將常用的和不常用的信息分享存儲,分成兩張表
不常用信息表和常用信息表,保證不常用信息表與常用信息表能夠?qū)?yīng)上:找一個具有唯一性的
字段來共同連接兩張表。
一個常用表中的一條記錄永遠(yuǎn)只能在一張不常用表中匹配一條記錄,反之亦然。
一對多
一張表中有一條記錄可以對應(yīng)另外一張表中的多條記錄;但是反過來,另外一張表的一條記錄
只能對應(yīng)第一張表的一條記錄,這種關(guān)系就是一對多或多對一
母親與孩子的關(guān)系:母親,孩子兩個實(shí)體
母親表:ID(P),名字,年齡,性別
孩子表:ID(P),名字,年齡,性別
以上關(guān)系:一個媽媽可以在孩子表中找到多條記錄(也可能是一條),但是一個孩子只能找到一個媽媽
是一種典型的一對多的關(guān)系。
但是以上設(shè)計(jì):解決了實(shí)體的設(shè)計(jì)表問題,但是沒有解決關(guān)系問題,孩子找不到母親,母親也找不到孩子
解決方案:在某一張表中增加一個字段,能夠找到另外一張表中的記錄:在孩子表中增加一個字段
指向母親表,因?yàn)楹⒆颖淼挠涗浿荒芷ヅ涞揭粭l母親表的記錄。
母親表:ID(P),名字,年齡,性別
孩子表:ID(P),名字,年齡,性別,母親表ID(母親表主鍵)
多對多
一對表中(A)的一條記錄能夠?qū)?yīng)另外一張表(B)中的多條記錄;同時B表中的一條記錄
也能對應(yīng)A表中的多條記錄
老師和學(xué)生
老師表 T_ID(P),姓名,性別
學(xué)生表 S_ID(P),姓名,性別
以上設(shè)計(jì)方案:實(shí)現(xiàn)了實(shí)體的設(shè)計(jì),但是沒有維護(hù)實(shí)體的關(guān)系
一個老師教過多個學(xué)生,一個學(xué)生也被多個老師教過
解決方案:增加一張中間關(guān)系表
老師與學(xué)生的關(guān)系表:ID(P),T_ID,S_ID
老師表與中間表形成一對多的關(guān)系,而中間表是多表;維護(hù)了能夠唯一找到一表的關(guān)系;
同樣的學(xué)生表與中間表也是一個一對多的關(guān)系;
學(xué)生找老師:找出學(xué)生ID---中間表尋找匹配記錄(多條)---老師表匹配(一條)
老師找學(xué)生:找出老師ID---中間表尋找匹配記錄(多條)---學(xué)生表匹配(一條)
一張表中的主鍵只能有一個,外鍵可以有多個,如果一張表中多個列都需要被別的表的外鍵參考,需要使用候選碼(非空并且唯一),具體到你的這個問題的需求可以考慮用如下方法解決:
把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è)置外鍵的界面,一共有七列。簡單介紹一下這幾列的意思。‘name’:可以不填,你一會保存成功系統(tǒng)會自動生成。FieldName’:就是你要把哪個鍵設(shè)置為外鍵。這里選擇‘dept’,‘Reference DadaBase’:外鍵關(guān)聯(lián)的數(shù)據(jù)庫。‘Reference 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è)置外鍵的界面,一共有七列。簡單介紹一下這幾列的意思?!畁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’再添加一個外鍵。k如圖:
兩張表,第一張表是教室表,里面存放所有的教室ID(也可以把所在教學(xué)樓也放進(jìn)來);
第二張表是教室預(yù)定記錄表,存放已經(jīng)被預(yù)定的教室,里面字段有教室ID,所在教學(xué)樓,周次,星期,節(jié)次;
當(dāng)輸入教學(xué)樓,周次,星期,節(jié)次后,使用SQL語句:
select * from 教室表 where 教室ID not in (select 教室ID from 教室預(yù)定記錄表 where 教學(xué)樓= '' and 周次 = '' and 星期 = '' and 節(jié)次 = '');
即可查出所有空閑的教室列表,僅供參考。
網(wǎng)頁標(biāo)題:mysql多對多怎么設(shè)計(jì) MySQL 一對多
文章網(wǎng)址:http://aaarwkj.com/article14/dochoge.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、面包屑導(dǎo)航、網(wǎng)站排名、企業(yè)網(wǎng)站制作、用戶體驗(yàn)、網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)