创建数据表

CREATE TABLE IF NOT EXISTS xyb ( -- 创建学院表,存储学院基础信息
    ydh CHAR(2) PRIMARY KEY NOT NULL,  -- 学院代号,主键(不允许空,固定长度2字符)
    ymc CHAR(30) NOT NULL             -- 学院名称(不允许空,固定长度30字符)
);
 
CREATE TABLE IF NOT EXISTS xs ( -- 创建学生表,存储学生基本信息
    xm CHAR(8) NOT NULL,        -- 姓名(不允许空,固定长度8字符)
    xh CHAR(10) PRIMARY KEY NOT NULL,  -- 学号,主键(不允许空,固定长度10字符)
    ydh CHAR(2),                -- 所属学院代号(允许空,外键,引用xyb.ydh)
    bj CHAR(8),                -- 班级(固定长度8)
    chrq DATE,                  -- 出生日期(允许空)
    xb CHAR(2),                -- 性别(允许空,固定长度2字符)
    FOREIGN KEY (ydh)          -- 外键约束:所属学院代号必须是xyb表中存在的ydh值
        REFERENCES xyb(ydh),
    UNIQUE (bj)                -- 唯一约束:确保班级值唯一
);
 
CREATE TABLE IF NOT EXISTS js ( -- 创建教师表,存储教师信息
    xm CHAR(8) NOT NULL,        -- 姓名(不允许空)
    jsbh CHAR(10) PRIMARY KEY NOT NULL, -- 教师编号,主键(不允许空)
    zc CHAR(6),                -- 职称(允许空,固定长度6字符)
    ydh CHAR(2),                -- 所属学院代号(允许空,外键,引用xyb.ydh)
    FOREIGN KEY (ydh)          -- 外键约束:所属学院代号必须是xyb表中存在的ydh值
        REFERENCES xyb(ydh),
    UNIQUE(jsbh)               -- 唯一约束:确保教师编号值唯一
);
 
CREATE TABLE IF NOT EXISTS kc ( -- 创建课程表,存储课程信息
    kcbh CHAR(3) PRIMARY KEY NOT NULL, -- 课程编号,主键(不允许空)
    kc CHAR(20) NOT NULL,          -- 课程名称(不允许空)
    lx CHAR(10),                   -- 课程类型(允许空)
    xf NUMERIC(5, 1),               -- 学分(数值类型,总长度5位,小数点后1位)
    UNIQUE(kcbh)
);
 
CREATE TABLE IF NOT EXISTS sk ( -- 创建授课表,存储课程与班级的关联关系
    kcbh CHAR(3),               -- 课程编号(非主键字段,参与复合主键)
    bh CHAR(10),                -- 班级编号(非主键字段,参与复合主键)
    PRIMARY KEY (kcbh, bh),     -- 复合主键:课程编号 + 班级编号必须唯一组合
    FOREIGN KEY (kcbh)          -- 外键约束:课程编号必须是kc表中存在的kcbh值
        REFERENCES kc(kcbh),
    FOREIGN KEY (bh)            -- 外键约束:班级编号必须是js表中存在的bj值
        REFERENCES js(jsbh)       -- js的jsbj字段添加UNIQUE约束以允许外键引用
);
 
CREATE TABLE IF NOT EXISTS xk ( -- 创建学生选课表,记录选课及成绩
    xh CHAR(10),               -- 学号(主键字段之一)
    kcbh CHAR(3),              -- 课程编号(主键字段之一)
    jsbh CHAR(10),             -- 教师编号(主键字段之一)
    cj NUMERIC(5, 1),          -- 成绩(允许空)
    PRIMARY KEY (xh, kcbh, jsbh), -- 联合主键:学号 + 课程编号 + 教师编号的组合唯一
    FOREIGN KEY (xh)           -- 外键约束:学号必须是xs表中存在的xh值
        REFERENCES xs(xh),
    FOREIGN KEY (kcbh)         -- 外键约束:课程编号必须是kc表中存在的kcbh值
        REFERENCES kc(kcbh),
    FOREIGN KEY (jsbh)         -- 外键约束:教师编号必须是js表中存在的jsbh值
        REFERENCES js(jsbh)
);

创建索引

-- 学生表(xs)
CREATE INDEX idx_xs_ydh ON xs(ydh); --用于按学院快速筛选学生信息(如统计某学院的学生数量)
 
-- 教师表(js)
CREATE INDEX idx_js_ydh ON js(ydh); --用于按学院筛选教师(如查询某学院的教师列表)
 
-- 课程表(kc)
CREATE INDEX idx_kc_kc ON kc(kc); -- 按课程名称查询
CREATE INDEX idx_kc_xf ON kc(xf); -- 按学分数筛选课程
 
-- 学生选课表(xk)
CREATE INDEX idx_xk_kcbh ON xk(kcbh); --按课程编号(kcbh)统计选课人数
CREATE INDEX idx_xk_jsbh ON xk(jsbh); --按教师编号(jsbh)筛选授课记录
CREATE INDEX idx_xk_cj ON xk(cj); --按成绩(cj)排序或统计(如按成绩筛选)