-- 文件中心独占数据库,其他服务只保存文件逻辑ID。 CREATE DATABASE IF NOT EXISTS baiyue_file DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci; USE baiyue_file; CREATE TABLE IF NOT EXISTS file_object ( id BIGINT UNSIGNED NOT NULL COMMENT '文件ID(雪花ID)', tenant_id BIGINT UNSIGNED NOT NULL COMMENT '数据所属租户ID', business_type VARCHAR(32) NULL COMMENT '关联业务类型', business_id VARCHAR(64) NULL COMMENT '关联业务逻辑ID', original_name VARCHAR(255) NOT NULL COMMENT '原始文件名', object_key VARCHAR(512) NOT NULL COMMENT '对象存储键', storage_provider VARCHAR(32) NOT NULL COMMENT '存储提供方', bucket_name VARCHAR(128) NOT NULL COMMENT '存储桶名称', content_type VARCHAR(128) NOT NULL COMMENT '文件内容类型', size_bytes BIGINT UNSIGNED NOT NULL COMMENT '文件字节数', sha256 CHAR(64) NULL COMMENT '文件SHA-256摘要', status VARCHAR(24) NOT NULL DEFAULT 'ACTIVE' COMMENT '文件状态', created_by BIGINT UNSIGNED NOT NULL COMMENT '创建人ID', created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', updated_by BIGINT UNSIGNED NOT NULL COMMENT '最后修改人ID', updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', deleted TINYINT(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除标记', version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号', PRIMARY KEY (id), UNIQUE KEY uk_file_tenant_object (tenant_id, object_key), KEY idx_file_tenant_business (tenant_id, business_type, business_id), KEY idx_file_tenant_created (tenant_id, created_at) ) ENGINE=InnoDB COMMENT='文件元数据表'; CREATE TABLE IF NOT EXISTS file_download_token ( id BIGINT UNSIGNED NOT NULL COMMENT '下载令牌ID', tenant_id BIGINT UNSIGNED NOT NULL COMMENT '数据所属租户ID', file_id BIGINT UNSIGNED NOT NULL COMMENT '文件逻辑ID', token_hash CHAR(64) NOT NULL COMMENT '下载令牌SHA-256摘要', expires_at DATETIME(3) NOT NULL COMMENT '过期时间', max_downloads INT UNSIGNED NOT NULL DEFAULT 1 COMMENT '最大下载次数', download_count INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '已下载次数', revoked_at DATETIME(3) NULL COMMENT '撤销时间', created_by BIGINT UNSIGNED NOT NULL COMMENT '创建人ID', created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', PRIMARY KEY (id), UNIQUE KEY uk_download_token_hash (token_hash), KEY idx_download_file (tenant_id, file_id), KEY idx_download_expiry (expires_at) ) ENGINE=InnoDB COMMENT='临时下载授权令牌表'; CREATE TABLE IF NOT EXISTS file_download_log ( id BIGINT UNSIGNED NOT NULL COMMENT '下载日志ID', tenant_id BIGINT UNSIGNED NOT NULL COMMENT '数据所属租户ID', file_id BIGINT UNSIGNED NOT NULL COMMENT '文件逻辑ID', user_id BIGINT UNSIGNED NULL COMMENT '下载用户ID', request_id VARCHAR(64) NULL COMMENT '请求ID', client_ip VARCHAR(64) NULL COMMENT '客户端IP', result VARCHAR(16) NOT NULL COMMENT '下载结果', failure_reason VARCHAR(500) NULL COMMENT '失败原因', downloaded_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '下载时间', PRIMARY KEY (id), KEY idx_download_log_file (tenant_id, file_id, downloaded_at), KEY idx_download_log_user (tenant_id, user_id, downloaded_at) ) ENGINE=InnoDB COMMENT='文件下载审计日志表';