首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

MySQL 建立學生選課表:關聯學生表與課程表的設計方案

     編輯:程式設計綜合問答

需求背景

已有學生表(學號、姓名、年齡)和課程表(課程號、課程名),現需創建一張選課表,記錄學生選課關係,並建立外鍵約束保證數據完整性。

表結構設計

1. 學生表 (student)

CREATE TABLE student (
    stu_id INT PRIMARY KEY,
    stu_name VARCHAR(50),
    age INT
);

2. 課程表 (course)

CREATE TABLE course (
    course_id INT PRIMARY KEY,
    course_name VARCHAR(100)
);

3. 選課表 (student_course)

選課表作為中間表,包含兩個外鍵分別關聯學生表和課程表:

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 = ?;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved