From f46f6d97e1bfae54a8d1ec7edb49d3de3ed9a018 Mon Sep 17 00:00:00 2001 From: yulinling <2712495353@qq.com> Date: Thu, 10 Jul 2025 22:51:50 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E7=AC=94=E8=AE=B0?= =?UTF-8?q?=E7=9A=84=E6=95=B0=E6=8D=AE=E5=BA=93sql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/db/data.sql | 78 +++++++++++++++++++++++++ src/main/resources/db/schema.sql | 98 +++++++++++++++++++++++++++++++- src/main/resources/db/test.sql | 1 + 3 files changed, 176 insertions(+), 1 deletion(-) create mode 100644 src/main/resources/db/test.sql diff --git a/src/main/resources/db/data.sql b/src/main/resources/db/data.sql index 3be23fb..a4bf604 100644 --- a/src/main/resources/db/data.sql +++ b/src/main/resources/db/data.sql @@ -91,4 +91,82 @@ INSERT INTO `wk_role_user` VALUES (1072806379208708096, 1072806377661009920); INSERT INTO `wk_role_user` VALUES (1072806379238068224, 1072806378780889088); +COMMIT; + + +-- 1. 插入笔记本数据 +BEGIN; +INSERT INTO wk_notebooks (id, user_id, name, color, icon, created_at, updated_at, notes_count) +VALUES ('660e8400-e29b-41d4-a716-446655440000', '1072806377661009920', '工作笔记', '#FF5733', + 'mdi-briefcase', '2023-01-05 09:00:00', '2023-06-10 14:00:00', 3), + ('660e8400-e29b-41d4-a716-446655440001', '1072806377661009920', '学习笔记', '#33A1FF', + 'mdi-school', '2023-02-10 13:00:00', '2023-06-12 16:30:00', 2), + ('660e8400-e29b-41d4-a716-446655440002', '1072806378780889088', '个人日记', '#8A33FF', + 'mdi-book-open', '2023-03-15 08:00:00', '2023-06-13 10:15:00', 1); +COMMIT; + +BEGIN; +-- 2. 插入标签数据 +INSERT INTO wk_tags (id, user_id, name, color, created_at, usage_count) +VALUES ('770e8400-e29b-41d4-a716-446655440000', '1072806377661009920', '重要', '#FF3333', + '2023-01-06 10:00:00', 2), + ('770e8400-e29b-41d4-a716-446655440001', '1072806377661009920', '项目A', '#33FF57', + '2023-01-07 11:00:00', 1), + ('770e8400-e29b-41d4-a716-446655440002', '1072806378780889088', '灵感', '#FF33A1', + '2023-03-16 09:00:00', 1); +COMMIT; + +BEGIN; +-- 3. 插入笔记数据 +INSERT INTO wk_notes (id, user_id, notebook_id, title, content, preview_text, word_count, is_pinned, is_archived, + is_favorite, password_protected, created_at, updated_at, reminder, cover_image) +VALUES + -- Alice的工作笔记 + ('880e8400-e29b-41d4-a716-446655440000', '1072806377661009920', + '660e8400-e29b-41d4-a716-446655440000', '项目A会议记录', + '## 项目A启动会议\n\n**时间**: 2023-06-10 14:00\n**参会人**: Alice, Bob, Charlie\n\n### 讨论要点\n1. 确定项目时间线\n2. 分配初期任务\n3. 技术方案讨论', + '项目A启动会议 时间: 2023-06-10 14:00 参会人: Alice, Bob, Charlie', 98, TRUE, FALSE, TRUE, FALSE, + '2023-06-10 15:30:00', '2023-06-10 15:30:00', NULL, NULL), + + -- Alice的学习笔记 + ('880e8400-e29b-41d4-a716-446655440001', '1072806377661009920', + '660e8400-e29b-41d4-a716-446655440001', '机器学习笔记', + '# 机器学习基础\n\n## 监督学习\n- 线性回归\n- 逻辑回归\n\n## 无监督学习\n- K-means聚类\n- PCA降维', + '机器学习基础 监督学习 线性回归 逻辑回归 无监督学习 K-means聚类 PCA降维', 56, FALSE, FALSE, FALSE, FALSE, + '2023-06-12 16:00:00', '2023-06-12 16:30:00', NULL, NULL), + + -- Alice的另一个工作笔记(带提醒) + ('880e8400-e29b-41d4-a716-446655440002', '1072806377661009920', + '660e8400-e29b-41d4-a716-446655440000', '下周工作计划', + '1. 完成项目A原型设计 (周一)\n2. 与团队review代码 (周三)\n3. 准备客户演示材料 (周五)', + '1. 完成项目A原型设计 (周一) 2. 与团队review代码 (周三) 3. 准备客户演示材料 (周五)', 42, FALSE, FALSE, FALSE, + FALSE, '2023-06-14 09:00:00', '2023-06-14 09:00:00', '2023-06-19 09:00:00', NULL), + + -- Bob的个人日记(加密笔记) + ('880e8400-e29b-41d4-a716-446655440003', '1072806378780889088', + '660e8400-e29b-41d4-a716-446655440002', '2023年旅行计划', + '## 夏季旅行\n- 地点: 云南\n- 时间: 7月15-20日\n- 预算: 5000元\n\n## 冬季旅行\n- 地点: 待定', + '夏季旅行 地点: 云南 时间: 7月15-20日 预算: 5000元 冬季旅行 地点: 待定', 45, FALSE, FALSE, TRUE, TRUE, + '2023-06-13 10:00:00', '2023-06-13 10:15:00', NULL, NULL); +COMMIT; + +BEGIN; +-- 4. 插入笔记标签关联 +INSERT INTO wk_note_tags (note_id, tag_id, created_at) +VALUES ('880e8400-e29b-41d4-a716-446655440000', '770e8400-e29b-41d4-a716-446655440000', + '2023-06-10 15:35:00'), -- 项目A会议记录 -> 重要 + ('880e8400-e29b-41d4-a716-446655440000', '770e8400-e29b-41d4-a716-446655440001', + '2023-06-10 15:35:00'), -- 项目A会议记录 -> 项目A + ('880e8400-e29b-41d4-a716-446655440003', '770e8400-e29b-41d4-a716-446655440002', '2023-06-13 10:20:00'); +-- 旅行计划 -> 灵感 +COMMIT; + +BEGIN; +-- 5. 插入附件数据 +INSERT INTO wk_attachments (id, note_id, file_path, file_type, file_name, file_size, created_at, thumbnail_path) +VALUES ('990e8400-e29b-41d4-a716-446655440000', '880e8400-e29b-41d4-a716-446655440000', + '/attachments/projectA_meeting.pdf', 'application/pdf', 'projectA_meeting.pdf', 1024000, '2023-06-10 15:40:00', + NULL), + ('990e8400-e29b-41d4-a716-446655440001', '880e8400-e29b-41d4-a716-446655440003', '/attachments/yunnan_map.jpg', + 'image/jpeg', 'yunnan_map.jpg', 512000, '2023-06-13 10:30:00', '/attachments/thumbs/yunnan_map_thumb.jpg'); COMMIT; \ No newline at end of file diff --git a/src/main/resources/db/schema.sql b/src/main/resources/db/schema.sql index c823537..f38ef38 100644 --- a/src/main/resources/db/schema.sql +++ b/src/main/resources/db/schema.sql @@ -81,4 +81,100 @@ CREATE TABLE `wk_role_user` ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci - COMMENT = '角色用户表'; \ No newline at end of file + COMMENT = '角色用户表'; + +DROP TABLE IF EXISTS `wk_notebooks`; +CREATE TABLE `wk_notebooks` +( + id VARCHAR(36) PRIMARY KEY, -- 笔记本唯一标识 + user_id bigint(64) NOT NULL COMMENT '所属用户ID', -- 笔记本所有者 + name VARCHAR(100) NOT NULL COMMENT '笔记本名称', -- 显示名称 + color VARCHAR(20) COMMENT '笔记本颜色标记,用于UI显示', -- 如#FF0000 + icon VARCHAR(50) COMMENT '笔记本图标标识', -- 如media-book + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '最后更新时间', + notes_count INT DEFAULT 0 COMMENT '包含的笔记数量', -- 用于快速统计 + FOREIGN KEY (user_id) REFERENCES wk_user (id) ON DELETE CASCADE, + CONSTRAINT chk_notebook_name CHECK (name <> '') -- 名称不能为空 +) COMMENT '用户笔记本分类表,用于组织管理笔记'; + +DROP TABLE IF EXISTS `wk_notes`; +CREATE TABLE `wk_notes` +( + id VARCHAR(36) PRIMARY KEY COMMENT '笔记唯一标识', + user_id bigint(64) NOT NULL COMMENT '作者用户ID', + notebook_id VARCHAR(36) COMMENT '所属笔记本ID,可为空', + title VARCHAR(255) COMMENT '笔记标题,可为空(自动提取内容首行)', + content TEXT NOT NULL COMMENT '笔记正文内容,支持Markdown格式', + preview_text VARCHAR(200) COMMENT '内容预览,自动提取前200字符', + word_count INTEGER DEFAULT 0 COMMENT '自动计算的字数统计', + is_pinned BOOLEAN DEFAULT FALSE COMMENT '是否置顶显示', + is_archived BOOLEAN DEFAULT FALSE COMMENT '是否归档(不显示在默认列表中)', + is_favorite BOOLEAN DEFAULT FALSE COMMENT '是否标记为收藏', + password_protected BOOLEAN DEFAULT FALSE COMMENT '是否需要密码查看', + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '最后编辑时间', + reminder TIMESTAMP COMMENT '提醒时间,为空表示无提醒', + cover_image VARCHAR(255) COMMENT '封面图片URL', + FOREIGN KEY (user_id) REFERENCES wk_user (id) ON DELETE CASCADE, + FOREIGN KEY (notebook_id) REFERENCES wk_notebooks (id) ON DELETE SET NULL, + CONSTRAINT chk_content_length CHECK (LENGTH(content) > 0) -- 内容不能为空 +) COMMENT '核心笔记内容表,存储用户的所有笔记数据'; + +DROP TABLE IF EXISTS `wk_tags`; +CREATE TABLE `wk_tags` +( + id VARCHAR(36) PRIMARY KEY COMMENT '标签唯一标识', + user_id bigint(64) NOT NULL COMMENT '所属用户ID', + name VARCHAR(50) NOT NULL COMMENT '标签名称', + color VARCHAR(20) COMMENT '标签颜色,用于UI显示', + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + usage_count INT DEFAULT 1 COMMENT '标签使用次数,用于排序', + UNIQUE (user_id, name) COMMENT '同一用户的标签名必须唯一', + FOREIGN KEY (user_id) REFERENCES wk_user (id) ON DELETE CASCADE, + CONSTRAINT chk_tag_name CHECK (name <> '') -- 标签名不能为空 +) COMMENT '用户自定义标签表,用于多维度分类笔记'; + +DROP TABLE IF EXISTS `wk_note_tags`; +CREATE TABLE `wk_note_tags` +( + note_id VARCHAR(36) NOT NULL COMMENT '关联的笔记ID', + tag_id VARCHAR(36) NOT NULL COMMENT '关联的标签ID', + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '关联创建时间', + PRIMARY KEY (note_id, tag_id) COMMENT '联合主键,防止重复关联', + FOREIGN KEY (note_id) REFERENCES wk_notes (id) ON DELETE CASCADE, + FOREIGN KEY (tag_id) REFERENCES wk_tags (id) ON DELETE CASCADE +) COMMENT '笔记和标签的多对多关联表'; + +DROP TABLE IF EXISTS `wk_attachments`; +CREATE TABLE wk_attachments +( + id VARCHAR(36) PRIMARY KEY COMMENT '附件唯一标识', + note_id VARCHAR(36) NOT NULL COMMENT '所属笔记ID', + file_path VARCHAR(255) NOT NULL COMMENT '文件存储路径', + file_type VARCHAR(50) NOT NULL COMMENT '文件MIME类型,如image/png', + file_name VARCHAR(255) NOT NULL COMMENT '原始文件名', + file_size INTEGER NOT NULL COMMENT '文件大小(字节)', + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '上传时间', + thumbnail_path VARCHAR(255) COMMENT '缩略图路径(针对图片)', + FOREIGN KEY (note_id) REFERENCES wk_notes (id) ON DELETE CASCADE, + CONSTRAINT chk_file_size CHECK (file_size > 0) -- 文件大小必须为正 +) COMMENT '笔记附件表,存储用户上传的各类文件'; + +# -- 用户相关索引 +# CREATE INDEX idx_notes_user ON wk_notes (user_id) COMMENT '加速按用户查询笔记'; +# CREATE INDEX idx_tags_user ON wk_tags (user_id) COMMENT '加速按用户查询标签'; +# CREATE INDEX idx_notebooks_user ON wk_notebooks (user_id) COMMENT '加速按用户查询笔记本'; +# +# -- 笔记内容检索索引 +# CREATE INDEX idx_notes_notebook ON wk_notes (notebook_id) COMMENT '加速按笔记本查询笔记'; +# CREATE INDEX idx_notes_title ON wk_notes (title) COMMENT '加速按标题搜索笔记'; +# CREATE INDEX idx_notes_created ON wk_notes (created_at) COMMENT '加速按创建时间排序'; +# CREATE INDEX idx_notes_updated ON wk_notes (updated_at) COMMENT '加速按更新时间排序'; +# +# -- 全文检索索引(MySQL示例) +# CREATE FULLTEXT INDEX ft_note_content ON wk_notes (title, content) +# COMMENT '支持对标题和内容的全文检索'; +# +# -- 标签查询优化 +# CREATE INDEX idx_tags_name ON wk_tags (name) COMMENT '加速标签名称搜索'; \ No newline at end of file diff --git a/src/main/resources/db/test.sql b/src/main/resources/db/test.sql new file mode 100644 index 0000000..8766c05 --- /dev/null +++ b/src/main/resources/db/test.sql @@ -0,0 +1 @@ +SELECT * FROM wk_notes; \ No newline at end of file