Files
YschcmsService/src/test/resources/schema-cms-test.sql
T
chenxing b4822a7f38 feat(B2): 附件引用模型-cms_attachment 增 ref_type/ref_id,消灭孤儿误报
- 实体/双 SQL 加列+idx_att_ref;upload 增 scene 白名单(banner/link/site)
- AttachmentService 新增 markUsed/release/markSiteConfigUsed(webUrl 反查,幂等)
- 未使用=articleId 与 refType 均空;page 返回 unusedCount(前后端同步改名无兼容别名)
- Banner/Link 保存先解引用再回写(换图旧图回未使用);Site 配置 logo/favicon 引用回写(@Lazy 解循环依赖)
- 新增13例(Attachment6/Banner3/Link2/Site2)+既有语义断言更新;mvn -o test 全绿
2026-09-07 19:40:14 +08:00

138 lines
8.5 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- ============================================================
-- 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 友情链接';