Files
urbanLifeline/urbanLifelineServ/.bin/database/postgres/sql/createTableFile.sql
2025-12-09 18:07:44 +08:00

120 lines
6.8 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.

CREATE SCHEMA IF NOT EXISTS file;
DROP TABLE IF EXISTS file.tb_sys_file CASCADE;
CREATE TABLE file.tb_sys_file (
-- BaseDTO 继承字段
optsn VARCHAR(50) NOT NULL, -- 操作流水号
creator VARCHAR(50) DEFAULT NULL, -- 创建人
updater VARCHAR(50) DEFAULT NULL, -- 更新人
dept_path VARCHAR(255) DEFAULT NULL, -- 部门路径
remark TEXT DEFAULT NULL, -- 备注
create_time TIMESTAMPTZ NOT NULL DEFAULT now(), -- 创建时间
update_time TIMESTAMPTZ DEFAULT NULL, -- 更新时间
delete_time TIMESTAMPTZ DEFAULT NULL, -- 删除时间
deleted INTEGER NOT NULL DEFAULT 0, -- 是否已删除0-未删除1-已删除)
-- TbSysFileDTO 特有字段
file_id VARCHAR(50) NOT NULL, -- 文件ID (主键)
name VARCHAR(255) NOT NULL, -- 文件名
path VARCHAR(500) NOT NULL, -- 文件路径
size BIGINT NOT NULL, -- 文件大小(字节)
type VARCHAR(50) DEFAULT NULL, -- 文件类型
storage_type VARCHAR(50) DEFAULT NULL, -- 存储类型
mime_type VARCHAR(255) DEFAULT NULL, -- MIME 类型
url VARCHAR(500) DEFAULT NULL, -- 文件访问 URL
status VARCHAR(50) DEFAULT NULL, -- 文件状态
module VARCHAR(100) DEFAULT NULL, -- 所属模块
business_id VARCHAR(50) DEFAULT NULL, -- 业务ID
uploader VARCHAR(50) DEFAULT NULL, -- 上传者用户ID
object_name VARCHAR(500) DEFAULT NULL, -- MinIO对象名称
bucket_name VARCHAR(100) DEFAULT NULL, -- MinIO存储桶名称
md5_hash VARCHAR(32) DEFAULT NULL, -- 文件MD5值
extension VARCHAR(20) DEFAULT NULL, -- 文件扩展名
PRIMARY KEY (file_id),
UNIQUE (optsn)
);
COMMENT ON TABLE file.tb_sys_file IS '系统文件表';
-- BaseDTO 继承字段注释
COMMENT ON COLUMN file.tb_sys_file.optsn IS '操作流水号';
COMMENT ON COLUMN file.tb_sys_file.creator IS '创建人';
COMMENT ON COLUMN file.tb_sys_file.updater IS '更新人';
COMMENT ON COLUMN file.tb_sys_file.dept_path IS '部门路径';
COMMENT ON COLUMN file.tb_sys_file.remark IS '备注';
COMMENT ON COLUMN file.tb_sys_file.create_time IS '创建时间';
COMMENT ON COLUMN file.tb_sys_file.update_time IS '更新时间';
COMMENT ON COLUMN file.tb_sys_file.delete_time IS '删除时间';
COMMENT ON COLUMN file.tb_sys_file.deleted IS '是否已删除0-未删除1-已删除)';
-- TbSysFileDTO 特有字段注释
COMMENT ON COLUMN file.tb_sys_file.file_id IS '文件ID (主键)';
COMMENT ON COLUMN file.tb_sys_file.name IS '文件名';
COMMENT ON COLUMN file.tb_sys_file.path IS '文件路径';
COMMENT ON COLUMN file.tb_sys_file.size IS '文件大小(字节)';
COMMENT ON COLUMN file.tb_sys_file.type IS '文件类型';
COMMENT ON COLUMN file.tb_sys_file.storage_type IS '存储类型';
COMMENT ON COLUMN file.tb_sys_file.mime_type IS 'MIME 类型';
COMMENT ON COLUMN file.tb_sys_file.url IS '文件访问 URL';
COMMENT ON COLUMN file.tb_sys_file.status IS '文件状态';
COMMENT ON COLUMN file.tb_sys_file.module IS '所属模块';
COMMENT ON COLUMN file.tb_sys_file.business_id IS '业务ID';
COMMENT ON COLUMN file.tb_sys_file.uploader IS '上传者用户ID';
COMMENT ON COLUMN file.tb_sys_file.object_name IS 'MinIO对象名称';
COMMENT ON COLUMN file.tb_sys_file.bucket_name IS 'MinIO存储桶名称';
COMMENT ON COLUMN file.tb_sys_file.md5_hash IS '文件MD5值';
COMMENT ON COLUMN file.tb_sys_file.extension IS '文件扩展名';
-- 文件表索引
CREATE INDEX idx_file_module_business ON file.tb_sys_file(module, business_id) WHERE deleted = 0;
CREATE INDEX idx_file_uploader ON file.tb_sys_file(uploader) WHERE deleted = 0;
CREATE INDEX idx_file_bucket ON file.tb_sys_file(bucket_name) WHERE deleted = 0;
CREATE INDEX idx_file_status ON file.tb_sys_file(status) WHERE deleted = 0;
CREATE INDEX idx_file_create_time ON file.tb_sys_file(create_time) WHERE deleted = 0;
CREATE INDEX idx_file_md5 ON file.tb_sys_file(md5_hash) WHERE deleted = 0;
-- =============================
-- 文件关联表
-- =============================
DROP TABLE IF EXISTS file.tb_file_relation CASCADE;
CREATE TABLE file.tb_file_relation (
optsn VARCHAR(50) NOT NULL,
relation_id VARCHAR(50) NOT NULL,
file_id VARCHAR(50) NOT NULL,
object_type VARCHAR(50) NOT NULL, -- 对象类型bidding_project/ticket/document等
object_id VARCHAR(50) NOT NULL, -- 对象ID
relation_type VARCHAR(30) DEFAULT 'attachment', -- 关联类型attachment-附件/avatar-头像/banner-横幅
order_num INTEGER DEFAULT 0, -- 排序号
service_type VARCHAR(50), -- 服务类型继承自object_type
creator VARCHAR(50) DEFAULT NULL, -- 创建者
updater VARCHAR(50) DEFAULT NULL, -- 更新者
create_time TIMESTAMPTZ NOT NULL DEFAULT now(), -- 创建时间
update_time TIMESTAMPTZ DEFAULT NULL, -- 更新时间
delete_time TIMESTAMPTZ DEFAULT NULL, -- 删除时间
deleted BOOLEAN NOT NULL DEFAULT false, -- 是否删除
PRIMARY KEY (relation_id),
UNIQUE (optsn),
FOREIGN KEY (file_id) REFERENCES file.tb_sys_file(file_id)
);
COMMENT ON TABLE file.tb_file_relation IS '文件关联表';
COMMENT ON COLUMN file.tb_file_relation.optsn IS '流水号';
COMMENT ON COLUMN file.tb_file_relation.relation_id IS '关联ID';
COMMENT ON COLUMN file.tb_file_relation.file_id IS '文件ID';
COMMENT ON COLUMN file.tb_file_relation.object_type IS '对象类型bidding_project/ticket/document等';
COMMENT ON COLUMN file.tb_file_relation.object_id IS '对象ID';
COMMENT ON COLUMN file.tb_file_relation.relation_type IS '关联类型attachment-附件/avatar-头像/banner-横幅';
COMMENT ON COLUMN file.tb_file_relation.order_num IS '排序号';
COMMENT ON COLUMN file.tb_file_relation.service_type IS '服务类型继承自object_type';
COMMENT ON COLUMN file.tb_file_relation.creator IS '创建者';
COMMENT ON COLUMN file.tb_file_relation.updater IS '更新者';
COMMENT ON COLUMN file.tb_file_relation.create_time IS '创建时间';
COMMENT ON COLUMN file.tb_file_relation.update_time IS '更新时间';
COMMENT ON COLUMN file.tb_file_relation.delete_time IS '删除时间';
COMMENT ON COLUMN file.tb_file_relation.deleted IS '是否删除';
-- 文件关联表索引
CREATE INDEX idx_file_relation_object ON file.tb_file_relation(object_type, object_id) WHERE deleted = false;
CREATE INDEX idx_file_relation_file ON file.tb_file_relation(file_id) WHERE deleted = false;
CREATE INDEX idx_file_relation_service ON file.tb_file_relation(service_type) WHERE deleted = false;