數據庫關系模式有哪些類型?( 二 )


雖然超碼可以唯一標識一個實體,但是可能大多數超碼中含有多余的屬性,所以需要候選碼 。
例如學生表,學生(學號,姓名,年齡,性別,專業),其中的學號是可以唯一標識一個元組,所以學號可以作為候選碼 。既然學號都可以作候選碼,那么學號和姓名這兩個屬性的組合就可以唯一區別一個元組 。此時的學號可以成為碼,學號和姓名的組合也可以成為碼,但是學號和姓名的組合不能成為候選碼,因為即使去掉姓名屬性,剩下的學號屬性也完全可以唯一地標識一個元組 。也就是說,候選碼中的所有屬性都是必需的,缺少任何一個屬性,都不能唯一標識一個元組 。
(3)主碼(PrimaryKey) 。主碼是從多個候選碼中任意選出一個作為主鍵,這個被選中的候選碼就稱為主碼 。如果候選碼只有一個,那么候選碼就是主碼 。雖然說主碼的選擇是比較隨意的,但在實際開發中還是需要一定的經驗,不然開發出來的系統會出現問題 。一般來說,主碼都應該選擇那些從不或者極少變化的屬性 。
例如,在一個職工實體中,職工(職工號,姓名,入職時間,部門,崗位,工資,職級,工齡,電話),職工號可以用來唯一確定實體中的一個元組,所以職工號是一個候選碼 。如果實體屬性——姓名、入職時間、部門三者組合也能唯一地確定一個元組,則(姓名,入職時間,部門)也是一個候選碼 。在上述兩個候選碼中任選一個均可作為職工實體的主碼,一般來說直接選擇職工號作為實體的主碼是最為簡單方便的 。
1.3.2關系模式的定義關系是數據庫二維表中的數據記錄,關系模式是數據庫二維表的表結構,關系是動態的,關系模式是靜態的 。
關系模式可由六個元素來描述,分別是R、U、D、dom、I、F 。其中,R為關系的名稱;
U為組成該關系的屬性名的集合;D為U集合中屬性的域集合;dom為屬性集U向域集D的映射;I為完整約束集合;F為屬性間數據的依賴關系集合 。
一個關系模式通常表示為R(U,D,dom,I,F),也可以忽略其他元素,直接簡化為R(U)或R(A1,A2,A3,…,An),其中A1,A2,A3,…,An為屬性名 。
例如,在一個選課模塊中,包含“學生”“課程”“選修”等關系實體 。“學生”實體的屬性有SNO(學號)、SNAME(姓名)、AGE(年齡)、SEX(性別)、SDEPT(系部),其中“學號”為主鍵;“課程”實體的屬性有CNO(課程號)、CNAME(課程名稱)、CDEPT(系部)、TNAME(教師),其中“課程號”為主鍵;“選修”實體的屬性有GRADE(成績)、SNO(學號)、CNO(課程號),其中“學號”和“課程號”為聯合主鍵 。學生和課程之間是多對多的關聯關系,即一個學生可以同時選修多門課程,一門課程也可以同時被多個學生選修 。這種多對多的關聯關系可以通過“選修”關系實體作為中間橋接實體,變成兩個一對多的實體關聯關系,如圖所示 。
圖學生選課實體
從圖的實體關系圖中可以得到選課模塊的實體關系模式集——學生關系、課程關系、選修關系,具體關系模式如下:學生關系模式Student(SNO,SNAME,AGE,SEX,SDEPT);
課程關系模式Course(CNO,CNAME,CDEPT,TNAME);
選修關系模式StudentCourse(SNO,CNO,GRADE) 。
對以上定義的三個關系模式實例化,插入初始化數據后,可得到學生、課程、選修三個關系的實例,如圖所示 。圖中矩形框圈住部分為選課模塊中的關系模式(表結構);橢圓框圈住部分為選課模塊中的關系(數據) 。整個選課模塊的表環境由關系模式與關系兩部分共同組成,缺一不可 。關系模式的分解標準關系模式的規范化過程實際上就是關系模式的“分解”過程,即把邏輯上獨立的信息放在獨立的關系模式中 。分解是解決數據冗余的主要方法,也是規范化的一條原則——關系模式有冗余問題就要分解 。
數據庫設計者在進行關系數據庫設計時,應參照模式規范化理論,盡可能使數據庫模式保持高的標準 。一般盡量把關系數據庫設計成巴斯?科德范式(BCNF)的模式集,如果設計成巴斯?科德范式(BCNF)模式集時達不到保持函數依賴的標準,那么只能降低要求,設計成第三范式(3NF)的模式集,以達到保持函數依賴和無損分解的基本要求 。
學生、課程、選修三個關系的實例
1.分解的定義一個關系模式可以分解成眾多子關系模式,分解方式不同,得到的子關系模式也不同 。
關系模式的分解是指把某一個關系模式按照某一種方式進行分解得到的所有子關系模式 。

推薦閱讀