現(xiàn)在的數(shù)據(jù)庫基本都是關(guān)系數(shù)據(jù)庫,表與表之間的關(guān)聯(lián)一般都是靠字段來維持的。
創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站建設(shè)、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的江岸網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
例如3個(gè)表,分別是用戶信息表,購物訂單表,帳戶金額明細(xì)表
表結(jié)構(gòu)如下(我寫簡單哈):
用戶信息表字段:userid,username,password
購物訂單表字段:orderid,userid,goods,price
帳戶金額明細(xì)表:aid,userid,orderid,price
從上面3個(gè)表就能看出,他們之間的管理是:
通過用戶信心表的userid可以獲得購物訂單表的訂單信息,如果想要獲得用戶或者購物訂單的賬戶金額明細(xì)數(shù)據(jù),可使用userid或者orderid去帳戶金額明細(xì)表查詢相關(guān)數(shù)據(jù),示例SQL如下:
SELECT * FROM 購物訂單表字段 where userid=12
SELECT * FROM 帳戶金額明細(xì)表 where userid=12
SELECT * FROM 帳戶金額明細(xì)表 where orderid=3356
如果你還不明白的話,可發(fā)消息給我。
1.數(shù)據(jù)庫中的多對(duì)多關(guān)聯(lián)關(guān)系一般需采用中間表的方式處理,將多對(duì)多轉(zhuǎn)化為兩個(gè)一對(duì)多。
2.通過表的關(guān)系,來幫助我們怎樣建表,建幾張表。
一對(duì)一
一張表的一條記錄一定只能與另外一張表的一條記錄進(jìn)行對(duì)應(yīng),反之亦然。
學(xué)生表:姓名,性別,年齡,身高,體重,籍貫,家庭住址,緊急聯(lián)系人
其中姓名、性別、年齡、身高,體重屬于常用數(shù)據(jù),但是籍貫、住址和聯(lián)系人為不常用數(shù)據(jù)
如果每次查詢都是查詢所有數(shù)據(jù),不常用的數(shù)據(jù)就會(huì)影響效率,實(shí)際又不用
常用信息表:ID(P),姓名,性別,年齡,身高,體重
不常用信息表:ID(P),籍貫,家庭住址,緊急聯(lián)系人
解決方案:將常用的和不常用的信息分享存儲(chǔ),分成兩張表
不常用信息表和常用信息表,保證不常用信息表與常用信息表能夠?qū)?yīng)上:找一個(gè)具有唯一性的
字段來共同連接兩張表。
一個(gè)常用表中的一條記錄永遠(yuǎn)只能在一張不常用表中匹配一條記錄,反之亦然。
一對(duì)多
一張表中有一條記錄可以對(duì)應(yīng)另外一張表中的多條記錄;但是反過來,另外一張表的一條記錄
只能對(duì)應(yīng)第一張表的一條記錄,這種關(guān)系就是一對(duì)多或多對(duì)一
母親與孩子的關(guān)系:母親,孩子兩個(gè)實(shí)體
母親表:ID(P),名字,年齡,性別
孩子表:ID(P),名字,年齡,性別
以上關(guān)系:一個(gè)媽媽可以在孩子表中找到多條記錄(也可能是一條),但是一個(gè)孩子只能找到一個(gè)媽媽
是一種典型的一對(duì)多的關(guān)系。
但是以上設(shè)計(jì):解決了實(shí)體的設(shè)計(jì)表問題,但是沒有解決關(guān)系問題,孩子找不到母親,母親也找不到孩子
解決方案:在某一張表中增加一個(gè)字段,能夠找到另外一張表中的記錄:在孩子表中增加一個(gè)字段
指向母親表,因?yàn)楹⒆颖淼挠涗浿荒芷ヅ涞揭粭l母親表的記錄。
母親表:ID(P),名字,年齡,性別
孩子表:ID(P),名字,年齡,性別,母親表ID(母親表主鍵)
多對(duì)多
一對(duì)表中(A)的一條記錄能夠?qū)?yīng)另外一張表(B)中的多條記錄;同時(shí)B表中的一條記錄
也能對(duì)應(yīng)A表中的多條記錄
老師和學(xué)生
老師表 T_ID(P),姓名,性別
學(xué)生表 S_ID(P),姓名,性別
以上設(shè)計(jì)方案:實(shí)現(xiàn)了實(shí)體的設(shè)計(jì),但是沒有維護(hù)實(shí)體的關(guān)系
一個(gè)老師教過多個(gè)學(xué)生,一個(gè)學(xué)生也被多個(gè)老師教過
解決方案:增加一張中間關(guān)系表
老師與學(xué)生的關(guān)系表:ID(P),T_ID,S_ID
老師表與中間表形成一對(duì)多的關(guān)系,而中間表是多表;維護(hù)了能夠唯一找到一表的關(guān)系;
同樣的學(xué)生表與中間表也是一個(gè)一對(duì)多的關(guān)系;
學(xué)生找老師:找出學(xué)生ID---中間表尋找匹配記錄(多條)---老師表匹配(一條)
老師找學(xué)生:找出老師ID---中間表尋找匹配記錄(多條)---學(xué)生表匹配(一條)
在開始編碼之前先分析一下hibernate中的單向多對(duì)一是種怎樣的關(guān)聯(lián)關(guān)系。
如圖,一個(gè)團(tuán)隊(duì)里面會(huì)有多個(gè)成員,這里多方就是成員,一方就是這些成員所在的團(tuán)隊(duì)。如果配置了hibernate中的單向多對(duì)一關(guān)聯(lián),則意味著可以通過成員找到團(tuán)隊(duì),但無法通過團(tuán)隊(duì)找到屬于團(tuán)隊(duì)的成員。從數(shù)據(jù)庫的角度看,假設(shè)有team表和member表,member表會(huì)有一個(gè)外鍵,參照的是team表的主鍵。
2
/12
接下來開始編碼。
打開eclipse,創(chuàng)建一個(gè)java工程文件。
要想使用hibernate,如果不使用注解和其他框架的話,正常會(huì)先做三件事,
導(dǎo)入hibernate所需的jar包,編寫hibernate.cfg.xml(配置文件),還有一個(gè)就是編寫一個(gè)Hibernate的工具類。
做完之后,工程目錄、配置文件和工具類如圖。
具體操作過程可參考:Hibernate5入門教程。
3
/12
接下來就是編寫數(shù)據(jù)庫表的實(shí)體類和對(duì)應(yīng)的映射文件。
根據(jù)一開始說的例子,簡單創(chuàng)建了類Team和類Member以及它們對(duì)應(yīng)的映射文件,而且還創(chuàng)建了類Test用于測試。創(chuàng)建完后,完整的工程目錄如圖。
4
/12
類Team和類Member以及它們對(duì)應(yīng)的映射文件如圖。映射文件中配置多對(duì)一關(guān)聯(lián)關(guān)系的代碼為:many-to-one name="team" class="hibernate.many2one.Team" column="teamid"/many-to-one
5
/12
在配置文件中配置映射文件。注意要修改配置文件中的數(shù)據(jù)庫名,用戶名和密碼。
6
/12
配置完后,在Test類中加入如圖代碼,測試是否配置正確。
7
/12
運(yùn)行Test.java后,結(jié)果如圖。Hibernate向數(shù)據(jù)庫發(fā)送了三條sql語句,具體內(nèi)容看圖。
8
/12
進(jìn)入mysql,查看配置的數(shù)據(jù)庫(我的是bd_show),查看bd_show中存在的表,如圖可以看到剛剛hibernate生成的兩個(gè)表。
9
/12
兩個(gè)表的結(jié)構(gòu)如圖。
10
/12
向兩個(gè)表中插入如圖數(shù)據(jù),用于等會(huì)的測試。
如果配置是正確的話,等會(huì)用hibernate去取成員的數(shù)據(jù)時(shí),是能通過取出的成員數(shù)據(jù)得到他們所在的團(tuán)隊(duì)的數(shù)據(jù)。
11
/12
將Test類中main函數(shù)改為如圖內(nèi)容。
12
/12
修改后再次運(yùn)行Test.java,控制臺(tái)輸出結(jié)果如圖??梢钥吹剑ㄟ^團(tuán)隊(duì)成員找到了成員所在的團(tuán)隊(duì)的名稱。
本文題目:mysql多對(duì)一怎么處理 安徽淮南職稱網(wǎng)
瀏覽路徑:http://sd-ha.com/article2/dojseic.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、微信小程序、用戶體驗(yàn)、小程序開發(fā)、網(wǎng)站營銷、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)