Files
CloudFlare-ImgBed/database/schema.sql

117 lines
5.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.

-- CloudFlare ImgBed D1 Database Schema
-- 用于替代原有的KV存储
-- 1. 文件表 - 存储文件元数据
CREATE TABLE IF NOT EXISTS files (
id TEXT PRIMARY KEY, -- 文件ID (原KV的key)
value TEXT, -- 文件值 (对于分块文件,存储实际内容)
metadata TEXT NOT NULL, -- 文件元数据 (JSON格式)
file_name TEXT, -- 文件名 (从metadata中提取便于查询)
file_type TEXT, -- 文件类型 (从metadata中提取)
file_size TEXT, -- 文件大小 (从metadata中提取)
upload_ip TEXT, -- 上传IP (从metadata中提取)
upload_address TEXT, -- 上传地址 (从metadata中提取)
list_type TEXT, -- 列表类型 (从metadata中提取)
timestamp INTEGER, -- 时间戳 (从metadata中提取便于排序)
label TEXT, -- 标签 (从metadata中提取)
directory TEXT, -- 目录 (从metadata中提取便于查询)
channel TEXT, -- 渠道 (从metadata中提取)
channel_name TEXT, -- 渠道名称 (从metadata中提取)
tg_file_id TEXT, -- Telegram文件ID (从metadata中提取)
tg_chat_id TEXT, -- Telegram聊天ID (从metadata中提取)
tg_bot_token TEXT, -- Telegram Bot Token (从metadata中提取)
is_chunked BOOLEAN DEFAULT FALSE, -- 是否为分块文件
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- 为文件表创建索引
CREATE INDEX IF NOT EXISTS idx_files_timestamp ON files(timestamp DESC);
CREATE INDEX IF NOT EXISTS idx_files_directory ON files(directory);
CREATE INDEX IF NOT EXISTS idx_files_channel ON files(channel);
CREATE INDEX IF NOT EXISTS idx_files_file_type ON files(file_type);
CREATE INDEX IF NOT EXISTS idx_files_upload_ip ON files(upload_ip);
CREATE INDEX IF NOT EXISTS idx_files_created_at ON files(created_at DESC);
-- 2. 系统配置表 - 存储各种系统配置
CREATE TABLE IF NOT EXISTS settings (
key TEXT PRIMARY KEY, -- 配置键 (原KV的key)
value TEXT NOT NULL, -- 配置值 (JSON格式)
category TEXT, -- 配置分类 (page, security, upload, others等)
description TEXT, -- 配置描述
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- 为设置表创建索引
CREATE INDEX IF NOT EXISTS idx_settings_category ON settings(category);
-- 3. 索引操作表 - 存储原子操作记录
CREATE TABLE IF NOT EXISTS index_operations (
id TEXT PRIMARY KEY, -- 操作ID
type TEXT NOT NULL, -- 操作类型 (add, remove, move, batch_add等)
timestamp INTEGER NOT NULL, -- 时间戳
data TEXT NOT NULL, -- 操作数据 (JSON格式)
processed BOOLEAN DEFAULT FALSE, -- 是否已处理
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- 为索引操作表创建索引
CREATE INDEX IF NOT EXISTS idx_index_operations_timestamp ON index_operations(timestamp);
CREATE INDEX IF NOT EXISTS idx_index_operations_processed ON index_operations(processed);
CREATE INDEX IF NOT EXISTS idx_index_operations_type ON index_operations(type);
-- 4. 索引元数据表 - 存储索引的元信息
CREATE TABLE IF NOT EXISTS index_metadata (
key TEXT PRIMARY KEY, -- 元数据键 (如 'main_index')
last_updated INTEGER, -- 最后更新时间
total_count INTEGER DEFAULT 0, -- 总文件数
last_operation_id TEXT, -- 最后处理的操作ID
chunk_count INTEGER DEFAULT 0, -- 分块数量 (保留字段D1中可能不需要)
chunk_size INTEGER DEFAULT 0, -- 分块大小 (保留字段)
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- 5. 其他数据表 - 存储黑名单IP等其他数据
CREATE TABLE IF NOT EXISTS other_data (
key TEXT PRIMARY KEY, -- 数据键
value TEXT NOT NULL, -- 数据值
type TEXT, -- 数据类型 (blacklist_ip, whitelist等)
description TEXT, -- 描述
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- 为其他数据表创建索引
CREATE INDEX IF NOT EXISTS idx_other_data_type ON other_data(type);
-- 6. 创建触发器来自动更新 updated_at 字段
-- 文件表触发器
CREATE TRIGGER IF NOT EXISTS update_files_updated_at
AFTER UPDATE ON files
BEGIN
UPDATE files SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.id;
END;
-- 设置表触发器
CREATE TRIGGER IF NOT EXISTS update_settings_updated_at
AFTER UPDATE ON settings
BEGIN
UPDATE settings SET updated_at = CURRENT_TIMESTAMP WHERE key = NEW.key;
END;
-- 索引元数据表触发器
CREATE TRIGGER IF NOT EXISTS update_index_metadata_updated_at
AFTER UPDATE ON index_metadata
BEGIN
UPDATE index_metadata SET updated_at = CURRENT_TIMESTAMP WHERE key = NEW.key;
END;
-- 其他数据表触发器
CREATE TRIGGER IF NOT EXISTS update_other_data_updated_at
AFTER UPDATE ON other_data
BEGIN
UPDATE other_data SET updated_at = CURRENT_TIMESTAMP WHERE key = NEW.key;
END;