mysql一对一级联_MySQL 表的一对一、一对多、多对多问题
將實體與實體的關(guān)系,反應(yīng)到最終數(shù)據(jù)庫表的設(shè)計上,將關(guān)系分為三種:一對一,一對多(多對一)和多對多,所有的關(guān)系都是表與表之間的關(guān)系;
一對一
一對一:一張表的一條記錄只能與另外一條記錄進行對應(yīng),反之亦然
學(xué)生表:姓名,性別,年齡,體重,身高,婚姻狀況,籍貫,家庭地址,緊急聯(lián)系人
Id(P) 姓名 性別 年齡 身高 婚姻狀況 籍貫 家庭地址 緊急聯(lián)系人 體重
表設(shè)計成以上這種形式:符合要求,其中姓名,性別,年齡,身高體重屬于常用數(shù)據(jù),
但是婚姻籍貫住址聯(lián)系人屬于不常用的數(shù)據(jù),如果每次查詢所有數(shù)據(jù),不常用的數(shù)據(jù)就會影響效率,實際又不用
解決方案:將常用和不常用的信息分離存儲,分成兩張表
常用信息表:
Id(P) 姓名 性別 年齡 身高 體重
不常用信息表:
保證不常用信息與常用信息一定能夠?qū)?yīng)上:找一個具有唯一性(確定記錄)的字段來共同連接兩張表
婚姻 籍貫 住址 聯(lián)系人 Id(p)
一個常用表中的一條記錄,永遠只能在一張不常用表匹配一條記錄,反過來一個不常用表中的一條記錄在常用表中也只能匹配一條記錄,一對一的關(guān)系。
一對多
一對多:一張表中的一條記錄可以對應(yīng)另外一張表中的多條記錄,
但是返過來,另外一張表中的一條記錄只能對應(yīng)第一張表的一條記錄,這種關(guān)系就是一對多或者多對一的關(guān)系
母親與孩子的關(guān)系:母親與孩子兩個實體
母親表
Id(P) 名字 年齡 性別
孩子表
Id(P) 名字 年齡 性別 媽媽Id(P)
媽媽表主鍵
以上關(guān)系,一個媽媽可以在孩子表中找到多條記錄,或者一條,但是一個孩子只能一個媽媽,是一種典型的一對多的關(guān)系
但是以上設(shè)計解決了實體設(shè)計表問題,但是沒有解決關(guān)系問題,孩子找不出媽媽,媽媽也找不到孩子。
解決方案:在某一張表中增加一個字段,能夠找到另一張表中的記錄;應(yīng)該在孩子表中增加一個字段指向媽媽表;因為孩子表的記錄只能匹配到一條媽媽表的記錄
多對多
一對表中(A)的一條記錄能夠?qū)?yīng)另外一張表(B)中的多條記錄;同時B表中的一條記錄
也能對應(yīng)A表中的多條記錄
老師和學(xué)生
老師表 T_ID(P),姓名,性別
學(xué)生表 S_ID(P),姓名,性別
以上設(shè)計方案:實現(xiàn)了實體的設(shè)計,但是沒有維護實體的關(guān)系
一個老師教過多個學(xué)生,一個學(xué)生也被多個老師教過
解決方案:增加一張中間關(guān)系表
老師與學(xué)生的關(guān)系表:ID(P),T_ID,S_ID
老師表與中間表形成一對多的關(guān)系,而中間表是多表;維護了能夠唯一找到一表的關(guān)系;
同樣的學(xué)生表與中間表也是一個一對多的關(guān)系;
學(xué)生找老師:找出學(xué)生ID--->中間表尋找匹配記錄(多條)--->老師表匹配(一條)
老師找學(xué)生:找出老師ID--->中間表尋找匹配記錄(多條)--->學(xué)生表匹配(一條)
MySQL 表的一對一、一對多、多對多問題
標簽:聯(lián)系人???mysq???實體???一對一???之間???數(shù)據(jù)庫表???分離???數(shù)據(jù)庫???字段
本條技術(shù)文章來源于互聯(lián)網(wǎng),如果無意侵犯您的權(quán)益請點擊此處反饋版權(quán)投訴
本文系統(tǒng)來源:https://www.cnblogs.com/Camiluo/p/10615065.html
總結(jié)
以上是生活随笔為你收集整理的mysql一对一级联_MySQL 表的一对一、一对多、多对多问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 广发信用卡优惠活动 广发扫码付1元=50
- 下一篇: T+0交易或重回A股,蓝筹股有望最先尝鲜