官术网_书友最值得收藏!

2.3 關系的完整性

視頻二維碼(掃碼觀看)

2.3.1 關系的三類完整性約束

·實體完整性和參照完整性:

關系模型必須滿足的完整性約束條件

稱為關系的兩個不變性,應該由關系系統自動支持

·用戶定義的完整性:

應用領域需要遵循的約束條件,體現了具體領域中的語義約束

2.3.2 實體完整性

【規則2.1】實體完整性規則(Entity Integrity)

若屬性A是基本關系R的主屬性,則屬性A不能取空值

例:SAP(SUPERVISOR,SPECIALITY,POSTGRADUATE)

POSTGRADUATE:主碼(假設研究生不會重名)不能取空值。

實體完整性規則的說明:

(1)實體完整性規則是針對基本關系而言的。一個基本表通常對應現實世界的一個實體集。

(2)現實世界中的實體是可區分的,即它們具有某種唯一性標識。

(3)關系模型中以主碼作為唯一性標識。

(4)主碼中的屬性即主屬性不能取空值。

主屬性取空值,就說明存在某個不可標識的實體,即存在不可區分的實體,這與第(2)點相矛盾,因此這個規則稱為實體完整性。

注意:實體完整性規則規定基本關系的所有主屬性都不能取空值,而不僅是主碼整體不能取空值。

例:選修(學號,課程號,成績)

“學號、課程號”為主碼,則學號和課程號兩個屬性都不能取空值。

2.3.3 參照完整性

1關系間的引用

在關系模型中實體及實體間的聯系都是用關系來描述的,存在著關系與關系間的引用。

【例1】學生實體、專業實體

學生(學號,姓名,性別,專業號,年齡)

專業(專業號,專業名)

·學生關系引用了專業關系的主碼“專業號”。

·學生關系中的“專業號”值必須是確實存在的專業的專業號,即專業關系中有該專業的記錄。

【例2】學生、課程、學生與課程之間的多對多聯系

學生(學號,姓名,性別,專業號,年齡)

課程(課程號,課程名,學分)

選修(學號,課程號,成績)

學生:

課程:

學生選課:

【例3】學生實體及其內部的一對多聯系

學生(學號,姓名,性別,專業號,年齡,班長

·“學號”是主碼,“班長”是外碼,它引用了本關系的“學號”;

·“班長”必須是確實存在的學生的學號。

2外碼(Foreign Key)

·設F是基本關系R的一個或一組屬性,但不是關系R的碼。如果F與基本關系S的主碼Ks相對應,則稱F是基本關系R的外碼

·基本關系R稱為參照關系(Referencing Relation)

·基本關系S稱為被參照關系(Referenced Relation)或目標關系(Target Relation)

【例1】學生關系的“專業號”與專業關系的主碼“專業號”相對應

·“專業號”屬性是學生關系的外碼;

·專業關系是被參照關系,學生關系為參照關系。

【例2】選修關系的“學號”與學生關系的主碼“學號”相對應;

選修關系的“課程號”與課程關系的主碼“課程號”相對應。

·“學號”和“課程號”是選修關系的外碼;

·學生關系和課程關系均為被參照關系;

·選修關系為參照關系。

【例3】“班長”與本身的主碼“學號”相對應。

·“班長”是外碼;

·學生關系既是參照關系也是被參照關系。

說明:

·關系R和S不一定是不同的關系;

·目標關系S的主碼Ks和參照關系的外碼F必須定義在同一個(或一組)域上;

·外碼并不一定要與相應的主碼同名,當外碼與相應的主碼屬于不同關系時,往往取相同的名字,以便于識別。

3參照完整性規則

【規則2.2】參照完整性規則

若屬性(或屬性組)F是基本關系R的外碼,它與基本關系S的主碼Ks相對應(基本關系R和S不一定是不同的關系),則對于R中每個元組在F上的值必須為:

·或者取空值(F的每個屬性值均為空值);

·或者等于S中某個元組的主碼值。

【例1】學生關系中每個元組的“專業號”屬性只取兩類值:

(1)空值,表示尚未給該學生分配專業;

(2)非空值,這時該值必須是專業關系中某個元組的“專業號”值,表示該學生不可能分配一個不存在的專業。

【例2】選修(學號,課程號,成績)

“學號”和“課程號”可能的取值:

(1)選修關系中的主屬性,不能取空值;

(2)只能取相應被參照關系中已經存在的主碼值。

【例3】學生(學號,姓名,性別,專業號,年齡,班長

“班長”屬性值可以取兩類值:

(1)空值,表示該學生所在班級尚未選出班長;

(2)非空值,該值必須是本關系中某個元組的學號值。

2.3.4 用戶定義的完整性

·針對某一具體關系數據庫的約束條件,反映某一具體應用所涉及的數據必須滿足的語義要求。

·關系模型應提供定義和檢驗這類完整性的機制,以便用統一的系統的方法處理它們,而不要由應用程序承擔這一功能。

例:課程(課程號,課程名,學分)

“課程號”屬性必須取惟一值,非主屬性“課程名”也不能取空值,“學分”屬性只能取值{1,2,3,4}。

主站蜘蛛池模板: 靖安县| 饶河县| 横山县| 华容县| 江川县| 新闻| 保德县| 娄烦县| 枝江市| 咸丰县| 宁明县| 云南省| 连平县| 广水市| 康定县| 泸州市| 柘荣县| 中牟县| 横峰县| 温州市| 河东区| 闸北区| 武清区| 隆安县| 克什克腾旗| 平果县| 罗源县| 中阳县| 巴中市| 乌海市| 休宁县| 江达县| 乌拉特中旗| 罗江县| 本溪| 乐平市| 东乡| 罗田县| 伊通| 赣榆县| 英山县|