1. 資料庫表設計,一張表和多張表有關系,並且是多對多關系
班級表(class): id,class_name
學生表(student):版id,權student_name,class_id
老師表(teacher):id,name
成績表(score):id,kecheng_id,stu_id,score
課程表(kecheng):id,kecheng_name
老師班級表(teacher_class):id,class_id,teacher_id
表關聯設計思想:
1-1,外鍵放在那個表都可以,一般放在改動小的
1-n,n-1,吧1的id放在n的裡面
n-n,需要第三張表來存放兩者id
班級-學生:1-n
班級-老師:n-n
另外現在幾乎不使用實體外鍵,而採用邏輯外鍵,方便修改
2. 資料庫怎麼設計多對多的數據表
1.資料庫中的多對多關聯關系一般需採用中間表的方式處理,將多對多轉化為兩個一對多。
2.通過表的關系,來幫助我們怎樣建表,建幾張表。
一對一
一張表的一條記錄一定只能與另外一張表的一條記錄進行對應,反之亦然。
學生表:姓名,性別,年齡,身高,體重,籍貫,家庭住址,緊急聯系人
其中姓名、性別、年齡、身高,體重屬於常用數據,但是籍貫、住址和聯系人為不常用數據
如果每次查詢都是查詢所有數據,不常用的數據就會影響效率,實際又不用
常用信息表:ID(P),姓名,性別,年齡,身高,體重
不常用信息表:ID(P),籍貫,家庭住址,緊急聯系人
解決方案:將常用的和不常用的信息分享存儲,分成兩張表
不常用信息表和常用信息表,保證不常用信息表與常用信息表能夠對應上:找一個具有唯一性的
欄位來共同連接兩張表。
一個常用表中的一條記錄永遠只能在一張不常用表中匹配一條記錄,反之亦然。
一對多
一張表中有一條記錄可以對應另外一張表中的多條記錄;但是反過來,另外一張表的一條記錄
只能對應第一張表的一條記錄,這種關系就是一對多或多對一
母親與孩子的關系:母親,孩子兩個實體
母親表:ID(P),名字,年齡,性別
孩子表:ID(P),名字,年齡,性別
以上關系:一個媽媽可以在孩子表中找到多條記錄(也可能是一條),但是一個孩子只能找到一個媽媽
是一種典型的一對多的關系。
但是以上設計:解決了實體的設計表問題,但是沒有解決關系問題,孩子找不到母親,母親也找不到孩子
解決方案:在某一張表中增加一個欄位,能夠找到另外一張表中的記錄:在孩子表中增加一個欄位
指向母親表,因為孩子表的記錄只能匹配到一條母親表的記錄。
母親表:ID(P),名字,年齡,性別
孩子表:ID(P),名字,年齡,性別,母親表ID(母親表主鍵)
多對多
一對表中(A)的一條記錄能夠對應另外一張表(B)中的多條記錄;同時B表中的一條記錄
也能對應A表中的多條記錄
老師和學生
老師表T_ID(P),姓名,性別
學生表S_ID(P),姓名,性別
以上設計方案:實現了實體的設計,但是沒有維護實體的關系
一個老師教過多個學生,一個學生也被多個老師教過
解決方案:增加一張中間關系表
老師與學生的關系表:ID(P),T_ID,S_ID
老師表與中間表形成一對多的關系,而中間表是多表;維護了能夠唯一找到一表的關系;
同樣的學生表與中間表也是一個一對多的關系;
學生找老師:找出學生ID--->中間表尋找匹配記錄(多條)--->老師表匹配(一條)
老師找學生:找出老師ID--->中間表尋找匹配記錄(多條)--->學生表匹配(一條)
3. 資料庫建表問題:兩張多對多的表該怎麼建!
多對多 的情況下, 需要一個中間關聯表
例如下圖:
一個用戶,可以有多個角色,
一個角色下面,有多個用戶。
4. 資料庫表 多對多的關系怎麼建啊
A表,a_id,a_name,a_tel三個欄位。
B表,b_id,b_address,b_sol三個欄位。
關聯表,ref_id,a_id,b_id,存儲著AB兩表的id,
比如:A有
a0001,zhang3,139555533
a0002,li4,1397788888
a0003,wang5,13655566
B有
b0001,shanghai,234
b0002,shenyang,332
b0003,chongqing,123
如果想要AB表多對多的話,只需要將關聯表進行增加即可,而AB兩表基本數據不變,
比如:
關聯表ref_table:
r0001,a0001,b0002
r0002,a0001,b0001
r0003,a0001,b0003
r0004,a0002,b0003
通過聯合查詢,就可以得到多對多的數據了,而且不破壞基本數據表。
5. 資料庫多對多關系.入門舉例
給你舉個例子
用戶表:
ID Name
1 ABC
2 BCE
3 DEP
用戶許可權表
ID HERF
1 a.asp
2 b.asp
3 c.asp
映射表
用戶ID 許可權ID 映射表ID
1 1 1
1 2 2
1 3 3
2 2 4
2 3 5
3 1 6
這樣用inner join把用戶的ID = 映射表的用戶ID , 許可權表的ID = 映射表的許可權ID,查詢後你就有這樣的結果:
用戶Name 許可權 用戶ID 許可權ID 映射表ID
ABC a.asp 1 1 1
ABC b.asp 1 2 2
ABC c.asp 1 3 3
BCE b.asp 2 2 4
BCE c.asp 2 3 5
DEP a.asp 3 1 6
這樣用戶就和許可權形成了多對多的關系!
同理你還可以加上用戶組表
用戶組表
ID Name
1 組1
2 組2
用戶組映射表
用戶ID 組ID 組映射表ID
1 1 1
2 1 2
3 1 3
2 2 4
3 2 5
這樣用戶隸屬組就是
用戶Name 組Name 用戶ID 組ID 組映射表ID
ABC 組1 1 1 1
BCE 組1 2 1 2
DEP 組1 3 1 3
BCE 組2 2 2 4
DEP 組2 3 2 5
最後,隸屬組也可以和許可權有映射
用戶組許可權映射表
組ID 許可權ID 組許可權映射表ID
1 1 1
2 3 2
這樣,最終這三個用戶會具有訪問那些頁面的許可權呢?自己動動腦筋吧。。。如果還不理解可以給我發消息。。。