已有學生表(學號、姓名、年齡)和課程表(課程號、課程名),現需創建一張選課表,記錄學生選課關係,並建立外鍵約束保證數據完整性。
CREATE TABLE student (
stu_id INT PRIMARY KEY,
stu_name VARCHAR(50),
age INT
);
CREATE TABLE course (
course_id INT PRIMARY KEY,
course_name VARCHAR(100)
);
選課表作為中間表,包含兩個外鍵分別關聯學生表和課程表:
CREATE TABLE student_course (
id INT AUTO_INCREMENT PRIMARY KEY,
stu_id INT NOT NULL,
course_id INT NOT NULL,
select_time DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (stu_id) REFERENCES student(stu_id) ON DELETE CASCADE,
FOREIGN KEY (course_id) REFERENCES course(course_id) ON DELETE CASCADE,
UNIQUE KEY uk_stu_course (stu_id, course_id) -- 防止重複選課
);
UNIQUE KEY uk_stu_course (stu_id, course_id) 保證同一學生不能重複選同一門課。查詢某學生的所有選課:
SELECT c.course_name, sc.select_time
FROM student_course sc
JOIN course c ON sc.course_id = c.course_id
WHERE sc.stu_id = ?;
查詢某課程的選課學生名單:
SELECT s.stu_name, s.age
FROM student_course sc
JOIN student s ON sc.stu_id = s.stu_id
WHERE sc.course_id = ?;