數據庫在一對一、一對多、多對多怎么設計表關系


1、一對一可以兩個實體設計在一個數據庫中l例如設計一個夫妻表,里面放丈夫和妻子
2、一對多可以建兩張表,將一這一方的主鍵作為多那一方的外鍵,例如一個學生表可以加一個字段指向班級(班級與學生一對多的關系)

3、多對多可以多加一張中間表,將另外兩個表的主鍵放到這個表中(如教師和學生就是多對多的關系)


關於外鍵的設置:
首先,外鍵引用的那個列在主表中必須是主鍵列或者唯一列。
所以1:n的肯定把外鍵建立在n的那張表上。
1:1,一般要看誰是主表,誰是附屬表,外鍵當然建立在附屬表中。
n:m的情況,需要建立一個關系表,兩個原表和其關系分別是1:n,1:m

 

關於主外鍵及多表聯系的進一步理解:

主外鍵的存在是依托兩個實體之間的關系而存在的; 

比如班級與學生的關系: 

一個班級可以有多個學生,並且一個學生只能屬於一個班級,這就是一對多的關系; 

那么設計數據庫的時候就應該在學生表內存放班級的ID作為外鍵,為什么不在班級表內放學生呢? 

因為,你想一想班級表內如果放學生那么記錄可能就是這樣: 

1班ID 1班 xx同學id 

1班ID  1班 xx同學id 

.. 

這是不允許的,班級表內班級為主鍵,是唯一的不允許相同記錄的; 

下面簡單講下大概建成的表結構 

--建班級表 

create table class( 

classid int primary key,--定義班級ID為主鍵 

classname varchar(15) 

--建學生表 

create table students( 

studentid int primary key,--定義學生ID為主鍵 

classid int ,--外鍵值,跟班級表classid 屬性類型相同 

stuname varchar(20),--學生姓名 

---定義外鍵  

foreign key(classid) references class(classid) --本表classid是基於class表classid的外鍵 

--------- 

如上定義了主外鍵后,兩個表間的關系就是一對多的關系了,並且學生表內的classid必須依托班級表的classid存在,也就是說外鍵必須要主鍵存在的時候才能創建,例如: 

--在班級表為空的情況往學生表插入一條記錄是不允許的: 

insert into students(studentid,classid,stuname)values(1,1,'小明') 

系統會拋出異常提示主鍵表班級表內班級ID不存在這樣是不允許插入的; 

必須要先往班級表內插入一條記錄: 

insert into class(classid,classname)values(1,'一班') 

后才能執行插入前面一條往學生表插入信息的語句.. 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM