-- ============================================================ -- bsch_cms_test 单测库表结构(每次 Spring 上下文启动先 DROP 重建,保证干净起点) -- 以 src/main/resources/sql/cms_init.sql 为蓝本; -- 2026-09-05 起本机为 MySQL 8.0.45,JSON 列恢复原生类型(与 cms_init.sql / 实体 columnDefinition 一致) -- ============================================================ DROP TABLE IF EXISTS `cms_attachment`; DROP TABLE IF EXISTS `cms_article`; DROP TABLE IF EXISTS `cms_category`; DROP TABLE IF EXISTS `cms_banner`; DROP TABLE IF EXISTS `cms_link`; DROP TABLE IF EXISTS `cms_site`; CREATE TABLE `cms_site` ( `id` INT NOT NULL AUTO_INCREMENT COMMENT '主键', `code` VARCHAR(64) NOT NULL COMMENT '站点编码,URL 路径用(/portal/{code})', `parent_site_id` INT NOT NULL DEFAULT 0 COMMENT '上级站点ID(0=顶层校站点;院系子站挂主站 id)', `sch_id` INT NULL COMMENT '学校ID(逻辑外键 → UserBase sys_group.id)', `sch_name` VARCHAR(128) NULL COMMENT '学校名称(冗余展示)', `name` VARCHAR(128) NOT NULL COMMENT '站点名称', `theme` VARCHAR(64) NULL DEFAULT 'default' COMMENT '皮肤包名', `config_json` JSON NULL COMMENT '站点配置(logo/联系方式/页脚等;预留 wechat 节点)', `status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态:0=停用 1=启用', `create_by` VARCHAR(64) NULL, `create_time` DATETIME NULL, `update_by` VARCHAR(64) NULL, `update_time` DATETIME NULL, PRIMARY KEY (`id`), UNIQUE KEY `uk_site_code` (`code`), KEY `idx_site_sch` (`sch_id`), KEY `idx_site_parent` (`parent_site_id`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = 'CMS 站点'; CREATE TABLE `cms_category` ( `id` INT NOT NULL AUTO_INCREMENT COMMENT '主键', `site_id` INT NOT NULL COMMENT '所属站点', `parent_id` INT NOT NULL DEFAULT 0 COMMENT '父栏目ID(0=根)', `name` VARCHAR(64) NOT NULL COMMENT '栏目名称', `type` TINYINT NOT NULL DEFAULT 1 COMMENT '栏目类型:1=文章列表 2=单页 3=外链', `link_url` VARCHAR(500) NULL COMMENT '外链地址(type=3 必填)', `template` VARCHAR(64) NULL COMMENT '栏目模板覆盖', `content` LONGTEXT NULL COMMENT '单页栏目内容', `sort_no` INT NOT NULL DEFAULT 0 COMMENT '同级排序(升序)', `seo_title` VARCHAR(200) NULL COMMENT 'SEO 标题', `seo_description` VARCHAR(500) NULL COMMENT 'SEO 描述', `status` TINYINT NOT NULL DEFAULT 1 COMMENT '0=隐藏 1=显示', `create_by` VARCHAR(64) NULL, `create_time` DATETIME NULL, `update_by` VARCHAR(64) NULL, `update_time` DATETIME NULL, PRIMARY KEY (`id`), KEY `idx_cat_tree` (`site_id`, `parent_id`, `sort_no`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = 'CMS 栏目'; CREATE TABLE `cms_article` ( `id` INT NOT NULL AUTO_INCREMENT COMMENT '主键', `site_id` INT NOT NULL COMMENT '所属站点', `category_id` INT NOT NULL COMMENT '所属栏目', `title` VARCHAR(200) NOT NULL COMMENT '标题', `summary` VARCHAR(500) NULL COMMENT '摘要', `content` LONGTEXT NULL COMMENT '正文 HTML', `cover_image` VARCHAR(500) NULL COMMENT '封面图 URL', `author_account` VARCHAR(64) NULL COMMENT '作者账号', `author_name` VARCHAR(64) NULL COMMENT '作者姓名', `source` VARCHAR(128) NULL COMMENT '来源', `status` TINYINT NOT NULL DEFAULT 0 COMMENT '0=草稿 1=已发布 2=已下架', `topmost` TINYINT NOT NULL DEFAULT 0 COMMENT '置顶:0/1', `publish_time` DATETIME NULL COMMENT '发布时间', `offline_time` DATETIME NULL COMMENT '下架时间', `view_count` INT NOT NULL DEFAULT 0 COMMENT '浏览量', `ext_json` JSON NULL COMMENT '扩展字段(保留键:wechat=推送回执预留、albums=图集演进)', `create_by` VARCHAR(64) NULL, `create_time` DATETIME NULL, `update_by` VARCHAR(64) NULL, `update_time` DATETIME NULL, PRIMARY KEY (`id`), KEY `idx_art_list` (`site_id`, `category_id`, `status`, `publish_time`), KEY `idx_art_site_top` (`site_id`, `status`, `topmost`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = 'CMS 文章'; CREATE TABLE `cms_attachment` ( `id` INT NOT NULL AUTO_INCREMENT COMMENT '主键', `site_id` INT NOT NULL COMMENT '所属站点', `article_id` INT NULL COMMENT '关联文章', `ref_type` VARCHAR(16) NULL COMMENT '场景引用类型:banner/link/site(B2)', `ref_id` INT NULL COMMENT '场景引用对象ID(B2)', `file_name` VARCHAR(255) NOT NULL COMMENT '原始文件名', `file_path` VARCHAR(500) NOT NULL COMMENT '存储路径', `web_url` VARCHAR(500) NOT NULL COMMENT 'Web 访问 URL', `file_size` BIGINT NULL COMMENT '字节数', `mime_type` VARCHAR(128) NULL COMMENT 'MIME 类型', `create_by` VARCHAR(64) NULL, `create_time` DATETIME NULL, `update_by` VARCHAR(64) NULL, `update_time` DATETIME NULL, PRIMARY KEY (`id`), KEY `idx_att_article` (`article_id`), KEY `idx_att_site` (`site_id`), KEY `idx_att_ref` (`ref_type`, `ref_id`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = 'CMS 附件'; CREATE TABLE `cms_banner` ( `id` INT NOT NULL AUTO_INCREMENT COMMENT '主键', `site_id` INT NOT NULL COMMENT '所属站点', `position` VARCHAR(32) NOT NULL DEFAULT 'home' COMMENT '展示位标识', `title` VARCHAR(200) NOT NULL COMMENT '标题', `image_url` VARCHAR(500) NOT NULL COMMENT '图片 URL', `link_type` TINYINT NOT NULL DEFAULT 1 COMMENT '跳转类型:1=文章 2=栏目 3=外链', `link_value` VARCHAR(500) NULL COMMENT '跳转目标', `sort_no` INT NOT NULL DEFAULT 0 COMMENT '同级排序(升序)', `start_time` DATETIME NULL COMMENT '上线时间', `end_time` DATETIME NULL COMMENT '下线时间', `status` TINYINT NOT NULL DEFAULT 1 COMMENT '0=停用 1=启用', `create_by` VARCHAR(64) NULL, `create_time` DATETIME NULL, `update_by` VARCHAR(64) NULL, `update_time` DATETIME NULL, PRIMARY KEY (`id`), KEY `idx_banner` (`site_id`, `position`, `status`, `sort_no`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = 'CMS 轮播/推荐位'; CREATE TABLE `cms_link` ( `id` INT NOT NULL AUTO_INCREMENT COMMENT '主键', `site_id` INT NOT NULL COMMENT '所属站点', `group_name` VARCHAR(64) NOT NULL DEFAULT 'default' COMMENT '分组', `name` VARCHAR(128) NOT NULL COMMENT '链接名称', `logo_url` VARCHAR(500) NULL COMMENT 'Logo URL', `link_url` VARCHAR(500) NOT NULL COMMENT '链接地址', `sort_no` INT NOT NULL DEFAULT 0 COMMENT '组内排序', `status` TINYINT NOT NULL DEFAULT 1 COMMENT '0=隐藏 1=显示', `create_by` VARCHAR(64) NULL, `create_time` DATETIME NULL, `update_by` VARCHAR(64) NULL, `update_time` DATETIME NULL, PRIMARY KEY (`id`), KEY `idx_link` (`site_id`, `group_name`, `sort_no`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = 'CMS 友情链接';