我新整理的是
TABLE post -- 存储所有post,串首是一个特殊的post,特别地,串首page_num = 0
-- post表只会发生插入,不会发生删除或更改
thread_id, INT -- 串首串号
id, INT -- 本条post串号,全局唯一,特别地,串首id = thread_id
cookie, CHAR(7)
page_num, INT -- 保持岛原有页码结构,不会发生更改
is_po, BOOL
is_sage, BOOL
is_admin, BOOL
created_at, INT UNSIGNED -- 这条post发布的时间,保证与id保持单调非递减,具体地,对于A.id < B.id,则A.created_at <= B.created_at
PRI(thread_id, id) -- 用于快速访问串内所有post,且保证每个串的所有post在物理存储上相邻
KEY(thread_id, page_num) -- 用于串内随机访问某页
KEY(thread_id, cookie) -- 用于串内查找某个cookie的发言
KEY(cookie, id) -- 用于全局查找某个cookie的发言
UNIQUE KEY(id) -- 用于快速获取引用
-- created_at排序与id排序在时间意义上一致
TABLE thread -- 存储所有串首数据
thread_id, INT
cookie, CHAR(7)
replies, INT -- 该串的回复数量
is_sage, BOOL
is_admin, BOOL
installment, DECIMAL(5,2) -- 展示用的系列内写作顺序,可能有间章
created_at, INT UNSIGNED -- 保证与thread_id保持单调非递减
PRI(thread_id)
KEY(replies) -- 按热度排序
KEY(cookie) -- 某个cookie的串
-- created_at排序与thread_id排序在时间意义上一致
TABLE post_body
id, INT
thread_id, INT
content, TEXT
img, VARCHAR(255) -- 图片在本地存储的相对位置
title, VARCHAR(64)
name, VARCHAR(64)
PRI(thread_id, id) -- 使内容按串在磁盘上邻近排列便于读取
UNIQUE KEY(id) -- 用于快速获取引用
TABLE tag_registry
tag_id, INT
tag_type, VARCHAR(16) -- 如“serie”、“status”
tag_name, VARCHAR(64) -- 如“大洛山系列”、“连载”
PRI(tag_id) AI
UNI(tag_type, tag_name)
TABLE thread_tag
thread_id, INT
tag_id, INT
tag_type, VARCHAR(16)
single_type, VARCHAR(16) VIRTUAL
/*
single_type VARCHAR(16) GENERATED ALWAYS AS (
CASE
WHEN tag_type = 'CUSTOM_TAG' THEN NULL
ELSE tag_type
END
) VIRTUAL
*/
PRI(thread_id, tag_id)
UNI(thread_id, single_type)
KEY(tag_id, thread_id)
删掉了thread_body和一些原本打算用来给manticore单表导入设计的冗余内容,之后导入的时候就JOIN吧
我是觉得没什么需要改的了