主键与外键
主鍵:唯一標(biāo)識(shí)表中的所有行的一個(gè)列或一組列。主鍵不允許空值。不能存在具有相同的主鍵值的兩個(gè)行,因此主鍵值總是唯一標(biāo)識(shí)單個(gè)行。表中可以有不止一個(gè)鍵唯一標(biāo)識(shí)行,每個(gè)鍵都稱作候選鍵。只有一個(gè)候選鍵可以選作表的主鍵,所有其它候選鍵稱作備用鍵。盡管表不要求具有主鍵,但定義主鍵是很好的做法。 在規(guī)范化的表中,每行中的所有數(shù)據(jù)值都完全依賴于主鍵。例如,在以 EmployeeID 作為主鍵的規(guī)范化的 employee 表中,所有列都應(yīng)包含與某個(gè)特定職員相關(guān)的數(shù)據(jù)。該表不具有 DepartmentName 列,因?yàn)椴块T的名稱依賴于部門 ID,而不是職員 ID。
外鍵:外鍵 (FK) 是用于建立和加強(qiáng)兩個(gè)表數(shù)據(jù)之間的鏈接的一列或多列。通過(guò)將保存表中主鍵值的一列或多列添加到另一個(gè)表中,可創(chuàng)建兩個(gè)表之間的鏈接。這個(gè)列就成為第二個(gè)表的外鍵。
?
=======================================================
?
外鍵的作用很重要,最好在數(shù)據(jù)庫(kù)中使用。?
? 舉一個(gè)例子比較明白?
? 比如有兩張表格,一個(gè)是學(xué)生檔案,另一個(gè)是上學(xué)期間的成績(jī)單?
? 檔案中會(huì)有:學(xué)號(hào),姓名。(學(xué)號(hào)為主鍵)?
? 成績(jī)單有(簡(jiǎn)化過(guò)的):學(xué)期號(hào),學(xué)號(hào),平均分?jǐn)?shù)(學(xué)期號(hào),學(xué)號(hào)兩個(gè)同時(shí)為主鍵,學(xué)號(hào)同時(shí)為外鍵)。為了保證成績(jī)單上的數(shù)據(jù)有效,所以要求錄入學(xué)號(hào)時(shí),必需保證檔案中有這個(gè)學(xué)號(hào),否則就不能錄入。從而保證了成績(jī)單上的成績(jī)數(shù)據(jù)的引用完整,否則將會(huì)是垃圾數(shù)據(jù)。
? 用程序控制,有很多缺點(diǎn);錄入成績(jī)單時(shí)為了保證學(xué)號(hào)有效,首先要搜索檔案,當(dāng)檔案很大時(shí)會(huì)影響效率。程序控制并不能保證百分之百引用完整性,尤其是并發(fā)操作。?
? 說(shuō)一個(gè)特例(主要是說(shuō)明程序控制不好):
? A錄入成績(jī)單,B在編輯檔案。?
? 當(dāng)A錄入張三的成績(jī),保存時(shí),搜索張三存在,于是程序下一步就要存盤,但這時(shí)B恰好把張三刪除了。但A那邊的程序并不知道,于是就把一條垃圾數(shù)據(jù)存進(jìn)數(shù)據(jù)庫(kù)中了。?
? 此例的操作流程正確與否不重要,但說(shuō)明了程序控制并不是好方法。
總結(jié)
- 上一篇: UTL_FILE包用法小记
- 下一篇: FTP命令行使用精粹