Files
youlai-boot/sql/app_icon.sql

55 lines
3.7 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.
-- =============================================================================
-- 应用图标库表(app_icon)
--
-- 设计目标:
-- 1. 全局图标库:同一应用包名(package_name)的所有设备共用图标,按包名维度维护
-- 2. 历史版本:同一包名可保存多个历史图标版本(status 区分当前生效/历史),
-- 支持从历史版本中选取并锁定,规避三方 App 活动期换图标带广告等风险
-- 3. 锁定机制:locked=1 的版本不可被设备端/管理端上传覆盖,需先解锁
-- 4. 内容指纹:icon_md5 用于内容去重(同一图标不同包名复用同一文件)
--
-- 约定:
-- - 同一 package_name 下 status=1(当前生效)的记录有且仅有一条
-- - 历史版本(status=0)仅用于展示与选取锁定,不物理删除
-- - 版本号生成规则(必须严格遵守):
-- version = 该 package_name 下所有记录的 MAX(version) + 1
-- 统计范围必须包含 is_deleted=1 的逻辑删除行,版本号只增不减、永不复用。
-- 原因:uk_package_version 不包含 is_deleted,若用「当前生效版本+1」或从 1 重新开始,
-- 当前生效记录被删除/缺失时会与残留版本号撞唯一键(Duplicate entry '包名-1')。
-- - 图标文件统一存入 storage.type 配置的存储(当前为阿里云 OSS),icon_url 为可直接访问的完整 URL
--
-- 部署规范:不直连库,由 DBA 执行;先 DROP 再 CREATE 确保结构与实体完全一致
-- (DROP 会清空历史图标数据,可由设备端重新上报补齐)。
-- 存量库修复:不重建表的场景,先执行 sql/app_icon_version_repair.sql 清理脏数据。
-- =============================================================================
DROP TABLE IF EXISTS `app_icon`;
CREATE TABLE `app_icon`
(
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`package_name` VARCHAR(255) NOT NULL COMMENT '应用包名(全局唯一维度,同包名多版本共存)',
`app_name` VARCHAR(128) DEFAULT NULL COMMENT '应用名称(上报时的展示名,可为空;新版本上报时刷新)',
`icon_url` VARCHAR(500) NOT NULL COMMENT '图标访问地址(存储服务返回的完整 URL)',
`icon_md5` VARCHAR(64) DEFAULT NULL COMMENT '图标文件MD5(内容指纹,用于去重与换图标检测)',
`icon_sha1` VARCHAR(64) DEFAULT NULL COMMENT '图标文件SHA1',
`icon_sha256` VARCHAR(64) DEFAULT NULL COMMENT '图标文件SHA256',
`version` INT NOT NULL DEFAULT 1 COMMENT '版本号(同包名内自增,取所有记录含逻辑删除的 MAX(version)+1,不复用)',
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态(1当前生效 0历史版本)',
`locked` TINYINT NOT NULL DEFAULT 0 COMMENT '是否锁定(0未锁定 1已锁定,锁定后不可上传覆盖)',
`source` VARCHAR(20) NOT NULL DEFAULT 'device' COMMENT '图标来源(device设备端上报 admin管理端上传)',
`create_by` BIGINT DEFAULT NULL COMMENT '创建人ID',
`create_time` DATETIME DEFAULT NULL COMMENT '创建时间',
`update_by` BIGINT DEFAULT NULL COMMENT '更新人ID',
`update_time` DATETIME DEFAULT NULL COMMENT '更新时间',
`is_deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除(0未删 1已删)',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_package_version` (`package_name`, `version`),
KEY `idx_package_status` (`package_name`, `status`),
KEY `idx_md5` (`icon_md5`),
KEY `idx_is_deleted` (`is_deleted`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COMMENT = '应用图标库(含历史版本)';