一、國立ABC大學的校務行政電腦化,其中有關教務資料,擬採用資料庫系統,經系統分析後,得到如下需求(Requirements):
1.ABC大學由許多學系(DEPARTMENT)組成,每一學系有系代碼 (DeptId)與系名稱(DeptName),系代碼可區別不同學系。
2.各學系會開許多課程(COURSE),每一課程有課程代碼(CrsId)、課程名稱(CrsName)、課程說明(CrsDescrip)與課程學分數(CrsCredit),課程代碼可區別不同課程。3.每一學系有許多學生(STUDENT),每個學生有學生代碼(StudId)、學生姓名(StudName)與學生電子信箱(StudEmail) ,有學生會有多個電子信箱,學生代碼可區別不同學生。4.每一學系由許多教授(PROFESSOR)組成,每一教授有教職員工代碼 (Prof Id)、姓名(Prof Name)與職稱(Prof Rank) ,教職員工代碼可區別不同教授。5.每個學系會開授許多課程,每一課程僅由一學系開授。6.每個學系會有許多學生,每一學生僅隸屬於一學系。7.每個學系會有許多教授,每一教授僅隸屬於一學系。8.每一教授可以開授許多門課程,每一門課程僅由一個教授開授。9.每一學生可以修習許多課程,每一課程也可由許多學生來修習,每一學生修習的課程有一成績(Grade)。請設計此教務關聯式資料庫綱要(Relational Database Schema),並標示出此資料庫關聯(Relations)的主鍵(Primary Key)與外來鍵(Foreign Key)。(25分)
詳解 (共 2 筆)
詳解
據給定的需求,我們可以設計一個關聯式資料庫綱要來管理ABC大學的教務資料。以下是設計出的資料庫綱要,包括各個關聯表格及其主鍵和外來鍵。
1. 學系表(DEPARTMENT)
sql
複製程式碼
CREATE TABLE DEPARTMENT (
DeptId INT PRIMARY KEY,
DeptName VARCHAR(255) NOT NULL
);
2. 課程表(COURSE)
sql
複製程式碼
CREATE TABLE COURSE (
CrsId INT PRIMARY KEY,
CrsName VARCHAR(255) NOT NULL,
CrsDescrip TEXT,
CrsCredit INT NOT NULL,
DeptId INT,
FOREIGN KEY (DeptId) REFERENCES DEPARTMENT(DeptId)
);
3. 學生表(STUDENT)
sql
複製程式碼
CREATE TABLE STUDENT (
StudId INT PRIMARY KEY,
StudName VARCHAR(255) NOT NULL,
DeptId INT,
FOREIGN KEY (DeptId) REFERENCES DEPARTMENT(DeptId)
);
4. 學生電子信箱表(STUDENT_EMAIL)
sql
複製程式碼
CREATE TABLE STUDENT_EMAIL (
EmailId INT PRIMARY KEY,
StudId INT,
StudEmail VARCHAR(255) NOT NULL,
FOREIGN KEY (StudId) REFERENCES STUDENT(StudId)
);
5. 教授表(PROFESSOR)
sql
複製程式碼
CREATE TABLE PROFESSOR (
ProfId INT PRIMARY KEY,
ProfName VARCHAR(255) NOT NULL,
ProfRank VARCHAR(255),
DeptId INT,
FOREIGN KEY (DeptId) REFERENCES DEPARTMENT(DeptId)
);
6. 課程教授關係表(COURSE_PROFESSOR)
sql
複製程式碼
CREATE TABLE COURSE_PROFESSOR (
CrsId INT,
ProfId INT,
PRIMARY KEY (CrsId, ProfId),
FOREIGN KEY (CrsId) REFERENCES COURSE(CrsId),
FOREIGN KEY (ProfId) REFERENCES PROFESSOR(ProfId)
);
7. 學生修課表(ENROLLMENT)
sql
複製程式碼
CREATE TABLE ENROLLMENT (
StudId INT,
CrsId INT,
Grade VARCHAR(2),
PRIMARY KEY (StudId, CrsId),
FOREIGN KEY (StudId) REFERENCES STUDENT(StudId),
FOREIGN KEY (CrsId) REFERENCES COURSE(CrsId)
);
資料庫關聯與鍵
DEPARTMENT:
sql
複製程式碼
CREATE TABLE DEPARTMENT (
DeptId INT PRIMARY KEY,
DeptName VARCHAR(255) NOT NULL
);
2. 課程表(COURSE)
sql
複製程式碼
CREATE TABLE COURSE (
CrsId INT PRIMARY KEY,
CrsName VARCHAR(255) NOT NULL,
CrsDescrip TEXT,
CrsCredit INT NOT NULL,
DeptId INT,
FOREIGN KEY (DeptId) REFERENCES DEPARTMENT(DeptId)
);
3. 學生表(STUDENT)
sql
複製程式碼
CREATE TABLE STUDENT (
StudId INT PRIMARY KEY,
StudName VARCHAR(255) NOT NULL,
DeptId INT,
FOREIGN KEY (DeptId) REFERENCES DEPARTMENT(DeptId)
);
4. 學生電子信箱表(STUDENT_EMAIL)
sql
複製程式碼
CREATE TABLE STUDENT_EMAIL (
EmailId INT PRIMARY KEY,
StudId INT,
StudEmail VARCHAR(255) NOT NULL,
FOREIGN KEY (StudId) REFERENCES STUDENT(StudId)
);
5. 教授表(PROFESSOR)
sql
複製程式碼
CREATE TABLE PROFESSOR (
ProfId INT PRIMARY KEY,
ProfName VARCHAR(255) NOT NULL,
ProfRank VARCHAR(255),
DeptId INT,
FOREIGN KEY (DeptId) REFERENCES DEPARTMENT(DeptId)
);
6. 課程教授關係表(COURSE_PROFESSOR)
sql
複製程式碼
CREATE TABLE COURSE_PROFESSOR (
CrsId INT,
ProfId INT,
PRIMARY KEY (CrsId, ProfId),
FOREIGN KEY (CrsId) REFERENCES COURSE(CrsId),
FOREIGN KEY (ProfId) REFERENCES PROFESSOR(ProfId)
);
7. 學生修課表(ENROLLMENT)
sql
複製程式碼
CREATE TABLE ENROLLMENT (
StudId INT,
CrsId INT,
Grade VARCHAR(2),
PRIMARY KEY (StudId, CrsId),
FOREIGN KEY (StudId) REFERENCES STUDENT(StudId),
FOREIGN KEY (CrsId) REFERENCES COURSE(CrsId)
);
資料庫關聯與鍵
DEPARTMENT:
主鍵:DeptId
COURSE:
COURSE:
主鍵:CrsId
外來鍵:DeptId(參考 DEPARTMENT(DeptId))
STUDENT:
外來鍵:DeptId(參考 DEPARTMENT(DeptId))
STUDENT:
主鍵:StudId
外來鍵:DeptId(參考 DEPARTMENT(DeptId))
STUDENT_EMAIL:
外來鍵:DeptId(參考 DEPARTMENT(DeptId))
STUDENT_EMAIL:
主鍵:EmailId
外來鍵:StudId(參考 STUDENT(StudId))
PROFESSOR:
外來鍵:StudId(參考 STUDENT(StudId))
PROFESSOR:
主鍵:ProfId
外來鍵:DeptId(參考 DEPARTMENT(DeptId))
COURSE_PROFESSOR:
外來鍵:DeptId(參考 DEPARTMENT(DeptId))
COURSE_PROFESSOR:
主鍵:CrsId, ProfId
外來鍵:CrsId(參考 COURSE(CrsId))
外來鍵:ProfId(參考 PROFESSOR(ProfId))
ENROLLMENT:
外來鍵:CrsId(參考 COURSE(CrsId))
外來鍵:ProfId(參考 PROFESSOR(ProfId))
ENROLLMENT:
主鍵:StudId, CrsId
外來鍵:StudId(參考 STUDENT(StudId))
外來鍵:CrsId(參考 COURSE(CrsId))
關係與說明
DEPARTMENT: 存儲學系的基本資訊。
COURSE: 存儲課程的基本資訊,每個課程隸屬於一個學系。
STUDENT: 存儲學生的基本資訊,每個學生隸屬於一個學系。
STUDENT_EMAIL: 存儲學生的電子郵件,每個學生可能有多個電子郵件。
PROFESSOR: 存儲教授的基本資訊,每個教授隸屬於一個學系。
COURSE_PROFESSOR: 表示課程與教授的關係,每個課程僅由一個教授開授,但每個教授可以開授多個課程。
ENROLLMENT: 學生的選課信息,每個學生可以修習多個課程,每個課程也可以由多個學生修習,並記錄學生在該課程的成績。
這個設計確保了資料的完整性和一致性,並能有效地管理ABC大學的教務資料。
外來鍵:StudId(參考 STUDENT(StudId))
外來鍵:CrsId(參考 COURSE(CrsId))
關係與說明
DEPARTMENT: 存儲學系的基本資訊。
COURSE: 存儲課程的基本資訊,每個課程隸屬於一個學系。
STUDENT: 存儲學生的基本資訊,每個學生隸屬於一個學系。
STUDENT_EMAIL: 存儲學生的電子郵件,每個學生可能有多個電子郵件。
PROFESSOR: 存儲教授的基本資訊,每個教授隸屬於一個學系。
COURSE_PROFESSOR: 表示課程與教授的關係,每個課程僅由一個教授開授,但每個教授可以開授多個課程。
ENROLLMENT: 學生的選課信息,每個學生可以修習多個課程,每個課程也可以由多個學生修習,並記錄學生在該課程的成績。
這個設計確保了資料的完整性和一致性,並能有效地管理ABC大學的教務資料。
詳解
共有6張表格:
1. DEPARTMENT(學系): DeptId(PK), DeptName
2. COURSE(課程): CrsId(PK), DeptId(FK), CrsName, CrsDescrip, CrsCredit, ProfId -> 每門課程僅有一位教授
3. STUDENT(學生): StudId(PK), DeptId(FK), StudName
4. Mail(信箱):StudEmail(PK), StudId(FK), DeptId(FK) -> 因學生有多個信箱, 採用獨立表紀錄
5. PROFESSOR(教授):ProfId(PK), DeptId(FK), ProfName, ProfRank
6. StudAndCurs(學生與課程):DeptId(FK),CrsId(FK),StudId(PK) -> 學生與課程的關係(N對N), 採用獨立表紀錄