Skip to main content
数据库为 Cloudflare D1(SQLite),全部表由 migrations/ 下的迁移文件创建。下表是当前(迁移编号至 0032)的核心结构与新增表摘要。

posts(文章)

enc 字段格式:JSON({salt, iv, data}),明文文章为 NULL;protected = 1 时列表接口不下发 content。详见文章加密。

comments(评论)

后两个索引由 0015_hot_path_indexes.sql 补齐:(post_id, id) 服务文章详情页的评论列表与去重查询,(status, date) 服务后台「按审核状态过滤 + 按日期排序」。详见迁移脚本。

stats(统计)

stats_daily(每日统计)

每次阅读/点赞按 (post_id, date) 累加,后台「近 30 天趋势」与 /api/stats/trend 直接读这张表。

admin_auth(管理员认证)

密码以 PBKDF2-SHA256 加盐哈希存储(iter 默认 100000,为 CF WebCrypto 上限),绝不存明文。must_change 后端会随登录响应返回,但前端只做提示、不强制跳转。

admin_sessions(登录会话)

admin_fails(登录限流计数)

ip 列复用为三种计数维度:
until 兼作两种语义:达到阈值时表示锁定/冷却截止时间;未达阈值时表示计数窗口过期时间(1 小时)。冷却结束后若计数仍达阈值,会在 1 小时老化期内继续保留计数,避免「等冷却归零再重试」。登录与限流细节见安全概览与管理接口。

media(媒体)

图片本体存放在 R2 媒体桶,D1 仅存元数据;接口层只接受 http/https 链接(不接受 base64 内嵌)。详见媒体。

music(音乐)

音频文件本体存放在 Cloudflare R2,D1 仅存元数据。详见音乐。

site_settings(站点设置)

当前使用的键包括:site_info、profile、nav_menu、footer_nav、friend_links、moderate_comments、features、comment_blocklist。其中 features 是后台「功能开关」与广告配置的 JSON,详见配置参考与站点设置。

site_files(站点产物)

新增表(0016 ~ 0032)

以下表格由后续迁移加入,完整 DDL 见仓库 migrations/: posts 还新增了 og_image、series、series_order、publish_at、seo、author 等字段;comments 新增 likes、featured、pinned;media 新增 thumb_url。

schema_migrations(迁移记账表)

这张表由 CI 创建(deploy.yml 的「Apply D1 schema」步骤里的 CREATE TABLE IF NOT EXISTS),不是 migrations/ 下的迁移文件。手工执行迁移时若想获得同样的跳过能力,请先自行执行上面的建表语句。

索引总览

ER 关系