實體-關係(E-R)圖是數據庫設計的藍圖。本文以「教學管理系統」為例,演示如何從業務需求提取實體、屬性、關係,繪製 E-R 圖,並轉化為關係模式(建表 SQL),幫助初學者建立規範建模思維。
業務描述:講師負責授課,學生選課學習,課程在教室進行。需記錄講師、學生、課程、教室、選課記錄等信息。
| 實體 | 屬性(主鍵粗體) | 說明 |
|---|---|---|
| 講師 | 講師號、姓名、性別、職稱、部門 | 弱實體可考慮依賴部門 |
| 學生 | 學號、姓名、性別、出生日期、專業、班級 | 核心實體 |
| 課程 | 課程號、課程名、學分、先修課程、開設學院 | 自關聯:先修課程 |
| 教室 | 教室號、樓棟、容量、類型(多媒體/普通) | 資源實體 |
| 選課 | 學號、課程號、學期、成績、選課時間 | 關係實體,複合主鍵 |
[講師] 1──授課──N [課程] [學生] N──選課──M [課程] --> 引入關係實體 [選課] [學生] N──所屬──1 [班級] [課程] 1──使用──N [教室] (含時間段屬性)
實際繪圖請使用 Visio、Draw.io、MySQL Workbench 等工具,矩形表實體,菱形表關係,橢圓表屬性,雙線表弱實體/標識關係。
-- 講師表
CREATE TABLE teacher (
teacher_id VARCHAR(20) PRIMARY KEY,
name VARCHAR(50) NOT NULL,
gender CHAR(1),
title VARCHAR(30),
dept_id VARCHAR(20)
);
-- 學生表
CREATE TABLE student (
stu_id VARCHAR(20) PRIMARY KEY,
name VARCHAR(50) NOT NULL,
gender CHAR(1),
birth_date DATE,
major_id VARCHAR(20),
class_id VARCHAR(20)
);
-- 課程表
CREATE TABLE course (
course_id VARCHAR(20) PRIMARY KEY,
name VARCHAR(100) NOT NULL,
credit DECIMAL(3,1),
pre_course_id VARCHAR(20), -- 自關聯外鍵
college_id VARCHAR(20),
teacher_id VARCHAR(20),
FOREIGN KEY (teacher_id) REFERENCES teacher(teacher_id)
);
-- 教室表
CREATE TABLE classroom (
room_id VARCHAR(20) PRIMARY KEY,
building VARCHAR(30),
capacity INT,
type ENUM('多媒體','普通')
);
-- 選課表(關係實體)
CREATE TABLE enrollment (
stu_id VARCHAR(20),
course_id VARCHAR(20),
term VARCHAR(20),
score DECIMAL(5,2),
enroll_time DATETIME DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (stu_id, course_id, term),
FOREIGN KEY (stu_id) REFERENCES student(stu_id),
FOREIGN KEY (course_id) REFERENCES course(course_id)
);
-- 排課表(課程-教室-時間段)
CREATE TABLE schedule (
course_id VARCHAR(20),
room_id VARCHAR(20),
term VARCHAR(20),
week_day TINYINT, -- 1-7
start_time TIME,
end_time TIME,
PRIMARY KEY (course_id, term, week_day, start_time),
FOREIGN KEY (course_id) REFERENCES course(course_id),
FOREIGN KEY (room_id) REFERENCES classroom(room_id)
);
id 或 表名_id。熟練掌握 E-R 建模,是成為優秀數據庫設計師的入場券。