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

JSP/SQL Server 學生信息系統:動態表結構導致維護災難的重構方案

     編輯:程式設計綜合問答

問題核心

按「年級-班級-課程」建立大量分表存儲成績,導致:

  • 新學年需批量建表、改頁面、改後台邏輯
  • 跨班級/跨學年統計查詢極其困難
  • 維護成本指數級增長,系統實用性趨近零

關鍵設計錯誤

將「業務維度」映射為「物理表」:
年級、班級、課程是查詢維度/屬性,而非數據分片依據。

正確範式設計

-- 核心表
CREATE TABLE student (
    id BIGINT PRIMARY KEY,
    name VARCHAR(50),
    grade_id INT,        -- 年級外鍵
    class_id INT,        -- 班級外鍵
    status TINYINT       -- 在籍/休學/畢業
);

CREATE TABLE course (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    credit DECIMAL(3,1)
);

CREATE TABLE score (
    id BIGINT PRIMARY KEY,
    student_id BIGINT,
    course_id INT,
    term VARCHAR(20),    -- 如 '2023-秋季'
    score DECIMAL(5,2),
    FOREIGN KEY (student_id) REFERENCES student(id),
    FOREIGN KEY (course_id) REFERENCES course(id),
    UNIQUE KEY uk_stu_course_term (student_id, course_id, term)
);

查詢優勢

  • 任意維度統計:WHERE grade_id=3 AND term='2023-秋季' GROUP BY course_id
  • 新學年零代碼變更:只需插入新 term 數據
  • 歷史數據完整保留:無需遷移、歸檔、分表

頁面動態化

JSP 頁面通過參數接收 gradeId、classId、term,單一頁面支持所有查詢/編輯場景,消除「頁面爆炸」。

「一張表解決所有同構數據」是關係型數據庫設計鐵律。分表僅用於億級數據分片,而非業務分類。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved