61 lines
3.8 KiB
SQL
61 lines
3.8 KiB
SQL
-- 1. 创建表结构
|
||
CREATE TABLE "file_storage" (
|
||
-- [兼容模式] 支持 AUTO_INCREMENT
|
||
"id" BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||
|
||
"fileName" VARCHAR(255) NOT NULL DEFAULT '',
|
||
"fileId" BIGINT NOT NULL,
|
||
"userGroupId" BIGINT DEFAULT NULL,
|
||
"tenantId" BIGINT DEFAULT NULL,
|
||
"userId" BIGINT DEFAULT NULL,
|
||
"dirId" BIGINT NOT NULL,
|
||
"fileBizType" INTEGER DEFAULT NULL,
|
||
"fileSuffix" VARCHAR(50) NOT NULL DEFAULT '',
|
||
|
||
-- [兼容模式] 去掉 UNSIGNED,使用 BIGINT (范围足够覆盖)
|
||
"fileSize" BIGINT NOT NULL,
|
||
|
||
-- [兼容模式] 支持 DATETIME 类型
|
||
"createTime" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
||
-- [兼容模式] 支持 ON UPDATE 语法,无需触发器实现自动更新
|
||
"updateTime" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
|
||
"fullPath" VARCHAR(1024) NOT NULL DEFAULT '',
|
||
|
||
-- [修复核心报错]
|
||
-- 将 date_format 替换为标准的提取拼接逻辑,确保是 IMMUTABLE (不可变) 表达式
|
||
"createYearMonth" VARCHAR(7) GENERATED ALWAYS AS (
|
||
CAST(EXTRACT(YEAR FROM "createTime") AS VARCHAR) || '-' ||
|
||
LPAD(CAST(EXTRACT(MONTH FROM "createTime") AS VARCHAR), 2, '0')
|
||
) STORED
|
||
);
|
||
|
||
-- 2. 创建索引
|
||
CREATE INDEX "idx_dirid_size" ON "file_storage" ("dirId", "fileSize");
|
||
CREATE INDEX "idx_userid_size" ON "file_storage" ("userId", "fileSize");
|
||
CREATE INDEX "idx_dirid_createtime_size" ON "file_storage" ("dirId", "createTime", "fileSize");
|
||
CREATE INDEX "idx_userid_createtime_size" ON "file_storage" ("userId", "createTime", "fileSize");
|
||
CREATE INDEX "idx_dirid_createmonth_size" ON "file_storage" ("dirId", "createYearMonth", "fileSize");
|
||
CREATE INDEX "idx_userid_createmonth_size" ON "file_storage" ("userId", "createYearMonth", "fileSize");
|
||
CREATE INDEX "idx_dir_file_suffix_biz_createtime_size" ON "file_storage" ("dirId", "fileName", "fileSuffix", "fileBizType", "createTime", "fileSize");
|
||
CREATE INDEX "idx_filename" ON "file_storage" ("fileName");
|
||
|
||
-- 3. 添加字段注释
|
||
COMMENT ON TABLE "file_storage" IS '文件存储统计主表(支持项目/学科/用户维度的存储占用统计)';
|
||
COMMENT ON COLUMN "file_storage"."id" IS '主键ID(自增)';
|
||
COMMENT ON COLUMN "file_storage"."fileName" IS '文件名(含后缀)';
|
||
COMMENT ON COLUMN "file_storage"."fileId" IS '文件唯一标识ID(关联文件元数据表)';
|
||
COMMENT ON COLUMN "file_storage"."userGroupId" IS '用户组ID';
|
||
COMMENT ON COLUMN "file_storage"."tenantId" IS '租户ID';
|
||
COMMENT ON COLUMN "file_storage"."userId" IS '文件所属用户ID';
|
||
COMMENT ON COLUMN "file_storage"."dirId" IS '保存所有父目录ID(项目/学科等目录的唯一标识)';
|
||
COMMENT ON COLUMN "file_storage"."fileBizType" IS '文件业务类型(1:模型文件 2:仿真报告、3:计算文件、4:曲线文件、5:云图文件,6:网格文件,7:计算过程文件)';
|
||
COMMENT ON COLUMN "file_storage"."fileSuffix" IS '文件后缀(如txt、jpg、pdf)';
|
||
COMMENT ON COLUMN "file_storage"."fileSize" IS '文件大小(字节数,存储占用计算依据)';
|
||
COMMENT ON COLUMN "file_storage"."createTime" IS '文件创建时间';
|
||
COMMENT ON COLUMN "file_storage"."updateTime" IS '记录更新时间(自动更新)';
|
||
COMMENT ON COLUMN "file_storage"."fullPath" IS '文件完整路径(冗余字段,优化查询)';
|
||
COMMENT ON COLUMN "file_storage"."createYearMonth" IS '创建年月(自动生成)';
|
||
|