- MySQL數據庫應用與維護項目式教程(微課版)
- 舒蕾 劉均主編
- 1609字
- 2023-11-16 18:21:56
任務1.3.2 設計學生成績管理系統數據庫關系模型
微課1-5

設計學生成績管理系統數據庫關系模型
平時大家接觸得最多的應用程序實際上只是處理數據的程序,它們的數據信息是從某個數據源得到的,其中一個數據源就是數據庫(DataBase,DB)。數據庫像是一個數據倉庫,存放著與應用程序相關的一些基礎數據,且這些數據通常以二維表(也叫關系)的形式存放,表與表之間互相關聯。這種存放數據的模型就是關系模型,以關系模型創建的數據庫稱為關系數據庫。
對關系的描述一般為關系名(屬性1,屬性2,……,屬性n),若某一屬性或屬性組為主鍵,則加下劃線表示。
完成概念數據模型設計后的關系模型設計的過程,其本質就是 E-R 模型向關系模型的轉換。要解決的問題包括如何將實體和實體間的聯系轉換為關系模型,以及如何確定這些關系模型的屬性和鍵。下面介紹把E-R模型中實體、實體的屬性和實體之間的聯系轉換為關系模型的方法。
1.實體(E)轉換為關系模式的方法
實體轉換為關系模型時,實體的屬性就是關系的屬性,實體的主鍵就是關系的主鍵,E-R模型中有幾個實體就轉換為幾個關系模型。
例如,將學生實體轉換為關系模型。
實體學生:學生(學號,姓名,專業,性別,出生日期,總學分,照片,備注)
主鍵:學號
關系模型:Student(S_ID,Name,Major,Sex,Birthday,Total_Credit,Photo,Note)
PK:S_ID
2.聯系(R)轉換為關系模型的方法
E-R模型向關系模型轉換時,除了要將實體轉換為關系模型,還需要將實體之間的聯系轉換為關系模型。實體之間的聯系類型不同,轉換規則也不同。
(1)一對一聯系
將聯系與任意端實體對應的關系模型合并,并加入另一端實體的主鍵和聯系本身的屬性。
【例1-1】假設實體班級(班級號,班級名)與實體班主任(職工號,姓名,性別,職稱)之間的任職聯系是一對一聯系。E-R模型如圖1-15所示,試將其轉換為關系模型。

圖1-15 班主任任職E-R模型(一對一聯系)
實體班級(班級號,班級名)與實體班主任(職工號,姓名,性別,職稱)的聯系轉換后得到的關系模型如下。
Class(ClassID,ClassName) PK:ClassID Head_Teacher(HireID,Name,Sex,Title) PK:HireID
(2)一對多聯系
將聯系與多端實體對應的關系模型合并,并加入另一端實體的主鍵和聯系本身的屬性。
【例1-2】實體班級與實體學生的聯系是一對多,E-R模型如圖1-16所示,試將其轉換為關系模型。
實體班級(班級號,班級名)和實體學生(學號,姓名,專業,性別,出生日期,總學分,照片,備注)的聯系轉換后得到的關系模型如下。
Class(ClassID,ClassName) PK:ClassID Student(S_ID,Name,Major,Sex,Birthday,Total_Credit,Photo,Note) PK:S_ID

圖1-16 學生與班級E-R模型(1:n聯系)
由于班級與學生之間的聯系是一對多,將聯系的屬性班干部職位和一端的主鍵放在多端,故此E-R模型轉換后得到的關系模型如下。
Student(S_ID,Name,Major,Sex,Birthday,Total_Credit,Photo,Note,ClassID,Class_Leader) PK:S_ID
班級實體轉換后的關系模型不變。
(3)多對多聯系
將聯系轉換為一個關系模型。將聯系連接的各實體的主鍵和聯系本身的屬性轉換為關系模型的屬性。
【例1-3】實體教師和實體學生的聯系是多對多,E-R模型如圖1-17所示,試將其轉換為關系模型。

圖1-17 教師與學生E-R模型(多對多聯系)
實體教師(職工號,姓名,性別,職稱,教授科目)和實體學生(學號,姓名,專業,性別,出生日期,總學分,照片,備注)之間的聯系是多對多,轉換后新增一個關系“教授”(職 工號,學號,評價),轉換后的關系模型如下。
Teacher(HireID,Name,Sex,Title,Subject) PK:HireID Student(S_ID,Name,Major,Sex,Birthday,Total_Credit,Photo,Note) PK:S_ID Teach(HireID,S_ID,Evaluation) PK:HireID和S_ID
根據以上轉換原則,將學生成績管理系統數據庫的E-R模型(圖1-15)轉換為關系模型時,應采取多對多聯系對應的轉換方式。也就是實體學生(學號,姓名,專業,性別,出生日期,總學分,照片,備注)和實體課程(課程號,課程名稱,開課學期,學時,學分)之間的聯系是多對多,轉換后新增一個關系“選課”(學號,課程號,成績),轉換后的關系模型如下。
Student(S_ID,Name,Major,Sex,Birthday,Total_Credit,Photo,Note,ClassID,Class_Leader) PK:S_ID Course(C_ID,C_Name,Semester,Credit_Hour,Credit) PK:C_ID Elective(S_ID,C_ID,Grade) PK:S_ID和C_ID
素養小貼士
要設計出完善、健壯的數據庫,在數據庫的分析、設計階段必須奠定好基礎。只有遵循規范化設計要求,才能設計出結構合理的關系模型,為之后數據庫的構建提供強有力的保障。
數據庫的關系模型不是一次就能成型的,而是需要不斷地進行優化才能得到最后的結果,優化通常以規范化理論作為指導。不以規矩,不能成方圓,所以必須不斷加強規范化意識,提升專業技能,才能開發出用戶所需的數據庫。