新聞中心
在數(shù)據(jù)庫(kù)設(shè)計(jì)和管理中,表與表之間的關(guān)系是十分重要的。為了能夠更好地管理和維護(hù)數(shù)據(jù),我們需要建立表與表之間的關(guān)系,其中外鍵關(guān)系是一種重要的關(guān)系類型。本文將詳細(xì)介紹什么是外鍵,如何建立外鍵關(guān)系,以及外鍵關(guān)系的優(yōu)缺點(diǎn)和應(yīng)用場(chǎng)景。

創(chuàng)新互聯(lián)公司成都企業(yè)網(wǎng)站建設(shè)服務(wù),提供成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)網(wǎng)站開發(fā),網(wǎng)站定制,建網(wǎng)站,網(wǎng)站搭建,網(wǎng)站設(shè)計(jì),自適應(yīng)網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì)師打造企業(yè)風(fēng)格網(wǎng)站,提供周到的售前咨詢和貼心的售后服務(wù)。歡迎咨詢做網(wǎng)站需要多少錢:028-86922220
1. 什么是外鍵?
外鍵是一種用于建立兩個(gè)表之間關(guān)聯(lián)的約束條件。通俗地說(shuō),外鍵是一張表中的字段,它與另一張表中的字段相關(guān)聯(lián)。這個(gè)相關(guān)聯(lián)的過(guò)程稱為“鏈接”或“關(guān)聯(lián)”。
舉個(gè)例子,我們可以在員工表中建立一個(gè)外鍵,將員工表中的某些字段與部門表中的相應(yīng)字段進(jìn)行關(guān)聯(lián)。這么做可以實(shí)現(xiàn)一個(gè)非常方便的功能:在查詢員工信息的時(shí)候,如果希望同時(shí)查詢員工所屬的部門名稱,只需要使用外鍵進(jìn)行鏈接即可。
2. 如何建立外鍵關(guān)系?
建立外鍵關(guān)系需要滿足以下幾個(gè)條件:
2.1 表結(jié)構(gòu)設(shè)計(jì)
我們需要在表結(jié)構(gòu)設(shè)計(jì)的時(shí)候?yàn)槊總€(gè)表都定義一個(gè)主鍵。主鍵是一種用于唯一標(biāo)識(shí)表中每個(gè)記錄的字段。主鍵字段不能重復(fù),且不能為空。
在建立外鍵關(guān)系的時(shí)候,我們需要把主鍵中的某些字段作為外鍵與其他表的某些字段相關(guān)聯(lián)。在建立外鍵關(guān)系之前,我們需要先確定主鍵和外鍵的關(guān)聯(lián)。
2.2 外鍵約束
建立外鍵關(guān)系需要在表結(jié)構(gòu)中添加外鍵約束。外鍵約束用于限制表間的數(shù)據(jù)一致性,確保每個(gè)外鍵都存在于相關(guān)聯(lián)的主鍵表中。
外鍵約束可以在表結(jié)構(gòu)設(shè)計(jì)時(shí)定義,也可以通過(guò)SQL語(yǔ)句在表中添加。
2.3 建立關(guān)聯(lián)
建立外鍵關(guān)系需要在相關(guān)聯(lián)的表中使用 JOIN 語(yǔ)句。在 EMPLOYEE 表和 DEPARTMENT 表之間建立外鍵關(guān)系的 SQL 語(yǔ)句可以寫成下面這樣:
CREATE TABLE EMPLOYEE (
emp_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
emp_name VARCHAR(50) NOT NULL,
dept_id INT UNSIGNED NOT NULL,
PRIMARY KEY (emp_id),
CONSTRNT FK_deptid FOREIGN KEY (dept_id) REFERENCES DEPARTMENT(dept_id)
);
CREATE TABLE DEPARTMENT (
dept_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
dept_name VARCHAR(50) NOT NULL,
PRIMARY KEY (dept_id)
);
其中,EMPLOYEE 表中的 dept_id 字段作為外鍵與 DEPARTMENT 表中的 dept_id 字段進(jìn)行關(guān)聯(lián)。
3. 外鍵關(guān)系的優(yōu)缺點(diǎn)和應(yīng)用場(chǎng)景
3.1 優(yōu)點(diǎn)
(1)確保數(shù)據(jù)一致性。外鍵關(guān)系可以有效避免數(shù)據(jù)刪除或修改造成的異常,保證相關(guān)表間數(shù)據(jù)的一致性。
(2)提高數(shù)據(jù)查詢效率。外鍵關(guān)系在查詢數(shù)據(jù)時(shí)非常方便,可以快速獲取相關(guān)聯(lián)表中的相關(guān)數(shù)據(jù)。
3.2 缺點(diǎn)
(1)外鍵關(guān)系需要在表設(shè)計(jì)時(shí)進(jìn)行規(guī)劃和設(shè)計(jì),增加了數(shù)據(jù)庫(kù)的復(fù)雜性和維護(hù)難度。
(2)對(duì)于大型數(shù)據(jù)庫(kù)系統(tǒng)來(lái)說(shuō),外鍵關(guān)系可能對(duì)系統(tǒng)性能產(chǎn)生一定的影響。
3.3 應(yīng)用場(chǎng)景
(1)多個(gè)表之間需要進(jìn)行關(guān)聯(lián)查詢的場(chǎng)景,如員工信息和部門信息的關(guān)聯(lián)查詢。
(2)需要控制數(shù)據(jù)的一致性和完整性的場(chǎng)景,比如刪除或修改操作。在刪除或修改操作時(shí),外鍵約束可以保證相關(guān)聯(lián)表的數(shù)據(jù)不會(huì)出現(xiàn)邏輯上的錯(cuò)誤或不一致。
結(jié)語(yǔ)
本文從外鍵的定義、建立外鍵關(guān)系的條件、優(yōu)缺點(diǎn)和應(yīng)用場(chǎng)景等方面進(jìn)行了詳解。外鍵作為關(guān)系型數(shù)據(jù)庫(kù)中一個(gè)重要的約束之一,能夠有效提高數(shù)據(jù)庫(kù)的數(shù)據(jù)一致性和查詢效率,在實(shí)際開發(fā)項(xiàng)目中是非常值得應(yīng)用的。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù)!
如何通過(guò)sqlyog對(duì)數(shù)據(jù)庫(kù)表設(shè)置外鍵
三種方法:如空
1.直接寫sql語(yǔ)句.
2.用SQLyog 選擇外鍵表 ,點(diǎn)擊右鍵 選擇關(guān)聯(lián)/外鍵,然后再選鎮(zhèn)饑擇主表,外鍵.
3.在表 vet_specialties 上點(diǎn)擊右鍵 ,然后渣旅瞎找到Relationships/ForeignKeys中,然后選擇相應(yīng)的列。
或者直接寫命令:
ALTER TABLE vet_specialties ADD FOREIGN KEY FK_SPECIALTY_ID(specialty_id) REFERENCES specialties (id)
ALTER TABLE vet_specialties ADD FOREIGN KEY FK_VET_ID(vet_id) REFERENCES vets (id)
要求:建立了兩個(gè)表一個(gè)attence(記作A表),一個(gè)leave(記作敏坦察L表)橋茄。
A表中有用戶的用戶名,密碼,id(自增作為主鍵)。
L表中是一個(gè)請(qǐng)假的表,L表中需要標(biāo)識(shí)哪一個(gè)用戶請(qǐng)的假。
這里需要設(shè)置外信芹鍵:
步驟:
1、
在此右鍵L表
2、尋找并點(diǎn)擊“關(guān)聯(lián)/外鍵”或者摁“F10”。
彈出此對(duì)話框。
3、新建
4、a.在主鍵表下拉菜單中找到A表
b.在Source Column中找到userid
c.在Target Column 中找到id
d.點(diǎn)擊創(chuàng)建
就完成了外鍵的設(shè)置。
數(shù)據(jù)庫(kù)表中的主鍵和外鍵如何關(guān)聯(lián)?
主鍵:
概念
主關(guān)鍵字(主鍵,primarykey)是被挑沒(méi)桐選出來(lái)猜態(tài),作表的行的惟一標(biāo)識(shí)的候選關(guān)鍵字。一個(gè)表只有一個(gè)主關(guān)鍵字。主關(guān)鍵字又可以稱為主鍵。主鍵可以由一個(gè)字段,也可以由多個(gè)字段組成,分別成為單字段主鍵或多字段主鍵。
作用
:1)保證實(shí)體的完整性;
2)加快數(shù)據(jù)庫(kù)的操作速度
3)在表中添加新記錄時(shí),access會(huì)自動(dòng)檢查新記錄的主鍵值,不允許該值與其他記錄的主鍵值重復(fù)。
4)access自動(dòng)按主鍵值的順序顯示表中的記錄。如果沒(méi)有定義主鍵,則按輸入記錄的順序顯示表中的記錄。
特點(diǎn)
1)一個(gè)表中只能有一個(gè)主鍵。如果在其他字段上建立主鍵,則原來(lái)的主鍵就會(huì)取消。在access中,雖然主鍵不是必需的,但更好為每個(gè)表都設(shè)置一個(gè)主鍵。
2)主鍵的值不可重復(fù),也不可為空(null)。
外鍵:
如果公共關(guān)鍵字在一個(gè)關(guān)系中是主關(guān)鍵字,那么這個(gè)公共關(guān)鍵字被稱為另一個(gè)關(guān)系的外鍵。由此可見,外鍵表示了兩個(gè)關(guān)系之間的聯(lián)系。以另一個(gè)關(guān)系的外鍵作主關(guān)鍵字的表被稱為主表,具有此外鍵的表被稱為主表的從表。外鍵又稱作外關(guān)鍵字。
以上是摘抄的,簡(jiǎn)單來(lái)說(shuō),主鍵就是一個(gè)枯兆坦關(guān)系中作為標(biāo)識(shí)用的,而外鍵是其他關(guān)系中的屬性,使用外鍵可避免冗余。
它們都是
關(guān)系數(shù)據(jù)庫(kù)
表設(shè)計(jì)的約束方式而已,為了保證數(shù)據(jù)庫(kù)中不會(huì)出現(xiàn)臟數(shù)據(jù)的限制方法。
主鍵游弊
是數(shù)據(jù)庫(kù)表的唯一索引序列,可以由多個(gè)字段組成,但每條數(shù)據(jù)的這幾個(gè)字段的組合必須唯一;主鍵約束僅涉及本表數(shù)據(jù);
外鍵
是本表中該外鍵字段的取值要求是已經(jīng)在目標(biāo)表中存在的數(shù)鏈磨空據(jù);假如說(shuō),表B有字段b_1是表A中字段a_1的外鍵,那么插入表B數(shù)據(jù)的時(shí)候,字段b_1的取值要求在表A的字段a_1的當(dāng)前所有數(shù)據(jù)的值的范圍棚瞎內(nèi)。外鍵是以外表數(shù)據(jù)約束本表數(shù)據(jù)的約束條件。
此外,外鍵還有個(gè)要求,就是a_1必須是表A的主鍵。并且必須說(shuō)得是,外鍵是一個(gè)很煩人的數(shù)據(jù)庫(kù)約束。
主外鍵的存在是依托兩個(gè)實(shí)體之間的關(guān)系而存在的;
比如班級(jí)與學(xué)生的關(guān)系:
一個(gè)班級(jí)可以有多個(gè)學(xué)生,并且一個(gè)學(xué)生只能屬于一個(gè)班級(jí),這就是一對(duì)多的關(guān)系;
那么設(shè)計(jì)數(shù)據(jù)庫(kù)的時(shí)候就應(yīng)該在學(xué)生表內(nèi)存放班級(jí)的ID作為外鍵,為什么不在班級(jí)表內(nèi)放學(xué)生呢?
因?yàn)?,你想一想班?jí)表內(nèi)如果放學(xué)生那么記錄可能就是這樣:
1班ID 1班 xx同學(xué)id
1班ID 1班 xx同學(xué)id
..
這是不允許的,班級(jí)表內(nèi)班級(jí)為主鍵,是唯一的不允許相同記錄的;
下面簡(jiǎn)單給你講下大概建成的表結(jié)構(gòu)
–建班級(jí)表
create table class(
classid int primary key,–定義班級(jí)ID為主鍵
classname varchar(15)
)
–建學(xué)生表
create table students(
studentid int primary key,–定義學(xué)生ID為主鍵
classid int ,–外鍵值,跟班級(jí)表classid 屬性類型相同
stuname varchar(20),–學(xué)生姓名
—定義外鍵
foreign key(classid) references class(classid) –本表classid是基于class表classid的外鍵
)
如上定饑襲義了主外鍵后,兩個(gè)表間的關(guān)系就是一對(duì)多的關(guān)系了,并且學(xué)生表內(nèi)的classid必須依托班級(jí)表的classid存在,也就是說(shuō)外鍵必須要主鍵存在的時(shí)候才能創(chuàng)建,例如:
–在班級(jí)表為空的情況往學(xué)生表插入一條記錄是不允許的:
insert into students(studentid,classid,stuname)values(1,1,’小明’)
系爛棗兄統(tǒng)會(huì)拋出異常提示主鍵表班級(jí)表內(nèi)班級(jí)ID不存在這樣是不允許插入的;
必須要先往班級(jí)表內(nèi)插入一條記錄:
insert into class(classid,classname)values(1,’一班’)
后才能執(zhí)行插入前面一條往學(xué)生表插入信息的語(yǔ)句巖森..
關(guān)于怎么在數(shù)據(jù)庫(kù)中建立表的外鍵關(guān)系的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
四川成都云服務(wù)器租用托管【創(chuàng)新互聯(lián)】提供各地服務(wù)器租用,電信服務(wù)器托管、移動(dòng)服務(wù)器托管、聯(lián)通服務(wù)器托管,云服務(wù)器虛擬主機(jī)租用。成都機(jī)房托管咨詢:13518219792
創(chuàng)新互聯(lián)(www.cdcxhl.com)擁有10多年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗(yàn)、開啟建站+互聯(lián)網(wǎng)銷售服務(wù),與企業(yè)客戶共同成長(zhǎng),共創(chuàng)價(jià)值。
網(wǎng)站標(biāo)題:建立數(shù)據(jù)庫(kù)表之間的外鍵關(guān)系:詳解(怎么在數(shù)據(jù)庫(kù)中建立表的外鍵關(guān)系)
文章來(lái)源:http://www.dlmjj.cn/article/djphhoe.html


咨詢
建站咨詢
