2016.8.10
外鍵(Foreign Key)
外鍵又稱作外關(guān)鍵字添寺。
如果公共關(guān)鍵字在一個(gè)關(guān)系中是主關(guān)鍵字沸移,那么這個(gè)公共關(guān)鍵字被稱為另一個(gè)關(guān)系的外鍵。
以另一個(gè)關(guān)系的外鍵作主關(guān)鍵字的表被稱為主表艰垂,具有此外鍵的表被稱為主表的從表涩哟。
如果關(guān)系模式R中的某屬性集不是R的主鍵,而是另一個(gè)關(guān)系R1的主鍵侵贵,則該屬性集是關(guān)系模式R的外鍵。
保持?jǐn)?shù)據(jù)一致性缘薛,完整性窍育,主要目的是控制存儲(chǔ)在外鍵表中的數(shù)據(jù)。
使兩張表形成關(guān)聯(lián)宴胧,外鍵只能引用外表中的列的值或使用空值漱抓。
外鍵就是指這個(gè)鍵在外表中是主鍵 。
總結(jié):
- 主鍵就是在本表是主鍵恕齐,外鍵就是在外表是主鍵乞娄。
- 主鍵表是被引用的表,外鍵表是引用其他表的表显歧。
- 主鍵的取值規(guī)則:非空唯一
- 外鍵的取之規(guī)則:可為空也可不為空仪或,可以重復(fù),必須來(lái)源于參照主鍵士骤。
- 一個(gè)字段只能被定義一個(gè)表級(jí)約束范删,要么實(shí)體完整性約束(主鍵),要么參照完整性約束(外鍵)拷肌。
- 一般情況下不存在兩個(gè)表用同一個(gè)字段當(dāng)主鍵到旦。
- 一般來(lái)說(shuō),標(biāo)準(zhǔn)的關(guān)系模式定義下巨缘、兩個(gè)表有兩個(gè)相同字段添忘、那么一個(gè)在這表當(dāng)主鍵、必定在另一表當(dāng)外鍵若锁。
外鍵約束
如果表A的主關(guān)鍵字是表B中的字段搁骑,則該字段稱為表B的外鍵,表A稱為主表拴清,表B稱為從表靶病。外鍵是用來(lái)實(shí)現(xiàn)參照完整性的。
比如說(shuō):
create table a(
id int not null,
name varchar(30),
primary key (id)
);
insert into a values (1, 'Group1');
insert into a values (2, 'Group2');
create table b(
id int not null,
name varchar(30),
a_id int,
primary key (id),
foreign key (a_id) references a(id)
);
insert into b values (1, 'qianxin', 1); --可以插入
insert into b values (2, 'yiyu', 2); --可以插入
insert into b values (3, 'dai', 3); --錯(cuò)誤口予,無(wú)法插入娄周,用戶組3不存在,與參照完整性約束不符
使用原則
- 為關(guān)聯(lián)字段創(chuàng)建外鍵沪停。
- 所有的鍵都必須唯一煤辨。
- 避免使用復(fù)合鍵裳涛。
- 外鍵總是關(guān)聯(lián)唯一的鍵字段。