create table article
(
    id        bigint auto_increment
        primary key,
    title     varchar(100)             not null,
    topic     varchar(50)              not null,
    excerpt   varchar(255)             not null,
    cover     varchar(255)             not null,
    content   text                     not null,
    create_at datetime default (now()) not null,
    update_at datetime default (now()) not null on update CURRENT_TIMESTAMP,
    is_delete tinyint                  not null
);

create table baseoverview
(
    id              int auto_increment
        primary key,
    introduction    longtext     null comment '基地简介',
    regulations     longtext     null comment '规章制度',
    address         varchar(255) null,
    phone           varchar(20)  null,
    email           varchar(100) null,
    website         varchar(100) null,
    director        varchar(255) null comment '主任姓名',
    deputy_director varchar(255) null comment '副主任姓名',
    researchers     varchar(255) null comment '研究人员'
);

create table course
(
    id          int auto_increment comment '课程ID（主键）'
        primary key,
    title       varchar(255)                           not null comment '课程标题',
    subtitle    varchar(255) default ''                null comment '课程副标题',
    cover_url   varchar(512) default ''                null comment '课程封面图URL',
    intro       text                                   null comment '课程简介（对应“课程简介”模块）',
    status      tinyint      default 1                 null comment '课程状态（0删除，1-已发布）',
    create_time datetime     default CURRENT_TIMESTAMP null comment '创建时间',
    update_time datetime     default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP comment '更新时间'
)
    comment '课程主表' charset = utf8mb4;

create table course_activity
(
    id            int auto_increment comment '活动ID（主键）'
        primary key,
    course_id     int               not null comment '关联课程ID（外键）',
    title         varchar(255)      not null comment '活动标题（如“第1章作业”“期中测试”）',
    activity_type tinyint default 1 null comment '活动类型（1-作业，2-考试，3-讨论，4-直播）',
    content       text              null comment '活动详情（如作业要求、考试说明）',
    start_time    datetime          null comment '活动开始时间（如直播时间、作业发布时间）',
    end_time      datetime          null comment '活动结束时间（如作业截止时间）',
    sort          int     default 0 null comment '排序',
    constraint fk_activity_course
        foreign key (course_id) references course (id)
            on delete cascade
)
    comment '学生活动表' charset = utf8mb4;

create index idx_course_id
    on course_activity (course_id)
    comment '按课程查询活动';

create table course_content
(
    id        int auto_increment comment '内容ID（主键）'
        primary key,
    course_id int           not null comment '关联课程ID（外键）',
    parent_id int default 0 null comment '父级ID（0表示章节，>0表示小节，关联自身id）',
    title     varchar(255)  not null comment '章节/小节标题',
    content   text          null comment '内容详情（如视频地址、图文内容等）',
    sort      int default 0 null comment '排序（数字越小越靠前）',
    constraint fk_content_course
        foreign key (course_id) references course (id)
            on delete cascade
)
    comment '课程内容表（章节/小节）' charset = utf8mb4;

create index idx_course_id
    on course_content (course_id)
    comment '按课程查询内容';

create index idx_parent_id
    on course_content (parent_id)
    comment '按父级查询子内容';

create table course_resource
(
    id           int auto_increment comment '资源ID（主键）'
        primary key,
    course_id    int           not null comment '关联课程ID（外键）',
    title        varchar(255)  not null comment '资源标题（如“第1章课件.pdf”）',
    resource_url varchar(512)  not null comment '资源文件URL（如PDF、压缩包地址）',
    size         int default 0 null comment '文件大小（KB）',
    sort         int default 0 null comment '排序',
    constraint fk_resource_course
        foreign key (course_id) references course (id)
            on delete cascade
)
    comment '课程拓展资源表' charset = utf8mb4;

create index idx_course_id
    on course_resource (course_id)
    comment '按课程查询资源';

create table course_teacher
(
    id         int auto_increment comment '关联ID（主键）'
        primary key,
    course_id  int                     not null comment '关联课程ID（外键）',
    teacher_id int                     not null comment '教师ID（建议关联用户表user.id）',
    name       varchar(100)            not null comment '教师姓名',
    title      varchar(200) default '' null comment '教师头衔（如“XXX大学教授”）',
    avatar     varchar(512) default '' null comment '教师头像URL',
    intro      text                    null comment '教师简介',
    sort       int          default 0  null comment '排序（团队展示顺序）',
    constraint fk_teacher_course
        foreign key (course_id) references course (id)
            on delete cascade
)
    comment '教学团队表' charset = utf8mb4;

create index idx_course_id
    on course_teacher (course_id)
    comment '按课程查询教师';

create table devproject
(
    id                                   int  not null comment '基地开放项目ID'
        primary key,
    basic_dev_project_management_system  text null comment '基础开发项目管理制度',
    basic_dev_project_initiation_result  text null comment '基础开发项目立项结果',
    basic_dev_project_midterm_inspection text null comment '基础开发项目中期检查',
    basic_dev_project_achievements       text null comment '基础开发项目成果'
)
    comment '基地开放项目表';

create table meeting
(
    id                 int auto_increment comment '会议ID（主键）'
        primary key,
    theme              varchar(255)                           not null comment '会议主题',
    subtitle           varchar(255) default ''                null comment '会议副标题（允许为空）',
    intro              text                                   null comment '会议简介（支持长文本，可存Markdown）',
    cover_url          varchar(512) default ''                null comment '会议封面图片URL（允许为空）',
    schedule_image_url varchar(512) default ''                null comment '会议日程图片URL（允许为空，无日程图时存空字符串）',
    start_time         datetime                               not null comment '会议开始时间',
    end_time           datetime                               not null comment '会议结束时间',
    create_time        datetime     default CURRENT_TIMESTAMP null comment '创建时间',
    update_time        datetime     default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP comment '更新时间',
    is_delete          int          default 0                 not null comment '软删除'
)
    comment '会议主表' charset = utf8mb4;

create table meeting_speaker
(
    id         int auto_increment comment '嘉宾ID（主键）'
        primary key,
    meeting_id int                     not null comment '关联会议ID（外键，对应meeting表id）',
    name       varchar(100)            not null comment '嘉宾姓名',
    title      varchar(200) default '' null comment '嘉宾头衔（如：XX公司技术总监）',
    avatar     varchar(512) default '' null comment '嘉宾头像URL',
    intro      text                    null comment '嘉宾简介',
    sort       int          default 0  null comment '嘉宾排序（数字越小越靠前）',
    is_delete  int          default 0  not null comment '软删除',
    constraint fk_meeting_speaker_meeting
        foreign key (meeting_id) references meeting (id)
            on delete cascade
)
    comment '会议演讲嘉宾表' charset = utf8mb4;

create index idx_meeting_id
    on meeting_speaker (meeting_id)
    comment '索引：优化按会议查询嘉宾';

create table page_image
(
    id          int auto_increment comment '图片ID（主键）'
        primary key,
    page        varchar(50)                        not null comment '所属页面（固定值：home-首页，base-基地概况，research-科学研究，academic-学术交流，service-社会服务，cases-案例资源）',
    image_url   varchar(512)                       not null comment '图片URL',
    sort        int                                not null comment '排序（首页1-3对应轮播顺序，其他页面固定1）',
    create_time datetime default CURRENT_TIMESTAMP null comment '创建时间',
    update_time datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP comment '更新时间',
    constraint uk_page_sort
        unique (page, sort) comment '唯一约束：同一页面+排序值只能有一条记录（控制数量）'
)
    comment '页面图片表（首页3张轮播，其他页面1张顶部图）' charset = utf8mb4;

create index idx_page
    on page_image (page)
    comment '按页面查询图片';

create table social_service
(
    id            bigint auto_increment comment '主键ID'
        primary key,
    title         varchar(255)                       not null comment '标题',
    subtitle      varchar(255)                       null comment '副标题',
    cover_url     varchar(512)                       null comment '封面图片URL',
    intro         varchar(1000)                      null comment '简介（纯文字）',
    content       longtext                           null comment '内容（Markdown格式）',
    image_editors varchar(512)                       null comment '图片编辑者名单（多个用逗号分隔）',
    text_editors  varchar(512)                       null comment '文字编辑者名单（多个用逗号分隔）',
    chief_editor  varchar(100)                       null comment '总编辑',
    proofreaders  varchar(512)                       null comment '校对者名单（多个用逗号分隔）',
    reviewers     varchar(512)                       null comment '审核者名单（多个用逗号分隔）',
    publish_time  datetime default CURRENT_TIMESTAMP null comment '发布时间（默认插入时的当前时间）',
    update_time   datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP comment '最后更改时间（自动更新）',
    is_delete     int      default 0                 not null comment '软删除'
)
    comment '社会服务表' charset = utf8mb4;

create table social_service_governmentprogram
(
    id            bigint auto_increment comment '主键ID'
        primary key,
    title         varchar(255)                       not null comment '标题',
    subtitle      varchar(255)                       null comment '副标题',
    cover_url     varchar(512)                       null comment '封面图片URL',
    intro         varchar(1000)                      null comment '简介（纯文字）',
    content       longtext                           null comment '内容（Markdown格式）',
    image_editors varchar(512)                       null comment '图片编辑者名单（多个用逗号分隔）',
    text_editors  varchar(512)                       null comment '文字编辑者名单（多个用逗号分隔）',
    chief_editor  varchar(100)                       null comment '总编辑',
    proofreaders  varchar(512)                       null comment '校对者名单（多个用逗号分隔）',
    reviewers     varchar(512)                       null comment '审核者名单（多个用逗号分隔）',
    publish_time  datetime default CURRENT_TIMESTAMP null comment '发布时间（默认插入时的当前时间）',
    update_time   datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP comment '最后更改时间（自动更新）',
    is_delete     int      default 0                 not null comment '软删除'
)
    comment '乡村政府项目表' charset = utf8mb4;

create table social_service_internship
(
    id            bigint auto_increment comment '主键ID'
        primary key,
    title         varchar(255)                       not null comment '标题',
    subtitle      varchar(255)                       null comment '副标题',
    cover_url     varchar(512)                       null comment '封面图片URL',
    intro         varchar(1000)                      null comment '简介（纯文字）',
    content       longtext                           null comment '内容（Markdown格式）',
    image_editors varchar(512)                       null comment '图片编辑者名单（多个用逗号分隔）',
    text_editors  varchar(512)                       null comment '文字编辑者名单（多个用逗号分隔）',
    chief_editor  varchar(100)                       null comment '总编辑',
    proofreaders  varchar(512)                       null comment '校对者名单（多个用逗号分隔）',
    reviewers     varchar(512)                       null comment '审核者名单（多个用逗号分隔）',
    publish_time  datetime default CURRENT_TIMESTAMP null comment '发布时间（默认插入时的当前时间）',
    update_time   datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP comment '最后更改时间（自动更新）',
    is_delete     int      default 0                 not null comment '软删除'
)
    comment '研究实习项目表' charset = utf8mb4;

create table teaching_case
(
    id            int auto_increment comment '案例ID（主键）'
        primary key,
    title         varchar(255)                           not null comment '案例标题',
    tutor_name    varchar(100)                           not null comment '导师姓名',
    tutor_title   varchar(200) default ''                null comment '导师头衔（如：XX讲师）',
    student_names varchar(500)                           not null comment '学生姓名（多人用逗号分隔，如“张三,李四”）',
    content       text                                   not null comment '案例内容（详细描述）',
    cover_url     varchar(512) default ''                null comment '案例封面图URL',
    sort          int          default 0                 null comment '排序（数字越小越靠前）',
    create_time   datetime     default CURRENT_TIMESTAMP null comment '创建时间',
    update_time   datetime     default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP comment '更新时间'
)
    comment '独立教学案例表' charset = utf8mb4;

create table video_case
(
    id             int auto_increment comment '视频案例ID（主键）'
        primary key,
    title          varchar(255)                       not null comment '视频案例标题',
    intro          text                               null comment '视频简介（描述案例背景、内容等）',
    video_url      varchar(512)                       not null comment '视频播放地址（如MP4 URL、视频平台嵌入链接）',
    duration       int      default 0                 null comment '视频时长（秒，可选，用于前端展示）',
    designer_names varchar(1000)                      not null comment '设计人员名单（多人用逗号分隔，如“张三,李四,王五”）',
    tutor_names    varchar(1000)                      not null comment '指导老师名单（多人用逗号分隔，如“赵六,钱七”）',
    sort           int      default 0                 null comment '排序（数字越小越靠前）',
    create_time    datetime default CURRENT_TIMESTAMP null comment '创建时间',
    update_time    datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP comment '更新时间'
)
    comment '视频案例表（独立存储，不关联其他表）' charset = utf8mb4;

