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,'一班')
后才能執行插入前面一條往學生表插入信息的語句..