编辑代码

CREATE DATABASE jwgl026;  -- 教学管理系统数据库,后缀026是学号末三位
USE jwgl026;              -- 切换到目标数据库
-- 1. 专业表(主表:major026)
CREATE TABLE major026 (
    mno VARCHAR(20) PRIMARY KEY,  -- 专业号(主键)
    mname VARCHAR(20),           -- 专业名称
    dept VARCHAR(20)             -- 所在系
);

-- 2. 学生表(外键表:student026,依赖major026)
CREATE TABLE student026 (
    sno VARCHAR(20) PRIMARY KEY,  -- 学号(主键)
    sname VARCHAR(20),            -- 姓名
    sex VARCHAR(2) DEFAULT '男',  -- 性别,默认值“男”
    sbirth DATE,                  -- 出生日期
    sclass VARCHAR(20),           -- 班级号
    mno VARCHAR(20),              -- 专业号(外键,关联major026.mno)
    FOREIGN KEY (mno) REFERENCES major026(mno)
        ON DELETE SET NULL        -- 主表记录删除时,外键字段置空
        ON UPDATE CASCADE         -- 主表记录更新时,外键字段级联更新
);

-- 3. 课程表(主表:course026)
CREATE TABLE course026 (
    cno VARCHAR(20) PRIMARY KEY,  -- 课程号(主键)
    cname VARCHAR(20),            -- 课程名
    chours INT                    -- 学时
);

-- 4. 教师表(主表:teacher026)
CREATE TABLE teacher026 (
    tno VARCHAR(20) PRIMARY KEY,  -- 教工号(主键)
    tname VARCHAR(20),            -- 姓名
    sex VARCHAR(2),               -- 性别
    title VARCHAR(20),            -- 职称
    dept VARCHAR(20)              -- 所在系
);

-- 5. 选修表(外键表:sc026,依赖student026、course026)
CREATE TABLE sc026 (
    sno VARCHAR(20),              -- 学号(外键)
    cno VARCHAR(20),              -- 课程号(外键)
    grade DECIMAL(5,1) DEFAULT 0, -- 成绩,默认值0
    PRIMARY KEY (sno, cno),       -- 复合主键(学号+课程号)
    FOREIGN KEY (sno) REFERENCES student026(sno),
    FOREIGN KEY (cno) REFERENCES course026(cno)
);

-- 6. 讲授表(外键表:tc026,依赖teacher026、course026)
CREATE TABLE tc026 (
    tno VARCHAR(20),              -- 教工号(外键)
    cno VARCHAR(20),              -- 课程号(外键)
    PRIMARY KEY (tno, cno),       -- 复合主键(教工号+课程号)
    FOREIGN KEY (tno) REFERENCES teacher026(tno),
    FOREIGN KEY (cno) REFERENCES course026(cno)
);

-- 7. 设置表(外键表:cm026,依赖course026、major026)
CREATE TABLE cm026 (
    cno VARCHAR(20),              -- 课程号(外键)
    mno VARCHAR(20),              -- 专业号(外键)
    PRIMARY KEY (cno, mno),       -- 复合主键(课程号+专业号)
    FOREIGN KEY (cno) REFERENCES course026(cno),
    FOREIGN KEY (mno) REFERENCES major026(mno)
);
-- ① 先插主表:major026、course026、teacher026
INSERT INTO major026 (mno, mname, dept) VALUES
('M001', '计算机科学与技术', '信息学院'),
('M002', '软件工程', '信息学院'),
('M003', '会计学', '经管学院'),
('M004', '汉语言文学', '文学院'),
('M005', '物理学', '理学院');

INSERT INTO course026 (cno, cname, chours) VALUES
('C001', '数据库原理', 48),
('C002', 'Java编程', 64),
('C003', '高级财务会计', 48),
('C004', '古代文学', 64),
('C005', '大学物理', 64);

INSERT INTO teacher026 (tno, tname, sex, title, dept) VALUES
('T001', '张建国', '男', '教授', '信息学院'),
('T002', '李海燕', '女', '副教授', '信息学院'),
('T003', '王晓明', '男', '教授', '经管学院'),
('T004', '赵雅芝', '女', '副教授', '文学院'),
('T005', '孙悟明', '男', '教授', '理学院');


-- ② 再插外键表:student026、sc026、tc026、cm026
INSERT INTO student026 (sno, sname, sex, sbirth, sclass, mno) VALUES
('2021001026', '张一', '男', '2002-09-01', '计科2101', 'M001'),
('2021002026', '李二', '女', '2003-10-15', '软工2102', 'M002'),
('2021003026', '王三', '男', '2002-08-20', '会计2101', 'M003'),
('2021004026', '赵四', '女', '2003-11-05', '汉本2101', 'M004'),
('2021005026', '孙五', '男', '2002-07-10', '物理2101', 'M005');

INSERT INTO sc026 (sno, cno, grade) VALUES
('2021001026', 'C001', 85.5),
('2021001026', 'C002', 90.0),
('2021002026', 'C002', 88.5),
('2021003026', 'C003', 92.0),
('2021004026', 'C004', 86.0);

INSERT INTO tc026 (tno, cno) VALUES
('T001', 'C001'),
('T002', 'C002'),
('T003', 'C003'),
('T004', 'C004'),
('T005', 'C005');

INSERT INTO cm026 (cno, mno) VALUES
('C001', 'M001'),
('C002', 'M002'),
('C003', 'M003'),
('C004', 'M004'),
('C005', 'M005');