180 lines
9.4 KiB
SQL
180 lines
9.4 KiB
SQL
DROP TABLE IF EXISTS `wk_user`;
|
||
CREATE TABLE `wk_user`
|
||
(
|
||
`id` bigint(64) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '主键',
|
||
`username` VARCHAR(32) NOT NULL UNIQUE COMMENT '用户名',
|
||
`nickname` VARCHAR(32) DEFAULT '默认用户' COMMENT '昵称',
|
||
`password` VARCHAR(256) NOT NULL COMMENT '加密后的密码',
|
||
`email` VARCHAR(32) UNIQUE COMMENT '邮箱',
|
||
`birthday` DATETIME DEFAULT NULL COMMENT '生日',
|
||
`sex` INT(2) DEFAULT NULL COMMENT '性别,男-1,女-2',
|
||
`phone` VARCHAR(15) DEFAULT NULL UNIQUE COMMENT '手机号',
|
||
`status` INT(2) NOT NULL DEFAULT 1 COMMENT '状态 -1:删除 0:警用 1:启用',
|
||
`create_time` DATETIME NOT NULL DEFAULT NOW() COMMENT '创建时间',
|
||
`update_time` DATETIME NOT NULL DEFAULT NOW() ON UPDATE NOW() COMMENT '上次更新时间',
|
||
`last_login_time` DATETIME DEFAULT NULL COMMENT '上次登录时间'
|
||
) ENGINE = INNODB
|
||
DEFAULT CHARSET = UTF8 COMMENT '用户表';
|
||
|
||
DROP TABLE IF EXISTS `wk_role`;
|
||
CREATE TABLE `wk_role`
|
||
(
|
||
`id` BIGINT(64) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '主键',
|
||
`name` VARCHAR(32) NOT NULL UNIQUE COMMENT '角色名',
|
||
`description` VARCHAR(100) DEFAULT NULL COMMENT '描述',
|
||
`create_time` DATETIME NOT NULL DEFAULT NOW() COMMENT '创建时间',
|
||
`update_time` DATETIME NOT NULL DEFAULT NOW() ON UPDATE NOW() COMMENT '更新时间'
|
||
) ENGINE = INNODB
|
||
DEFAULT CHARSET = UTF8 COMMENT '角色表';
|
||
|
||
DROP TABLE IF EXISTS `wk_permission`;
|
||
CREATE TABLE `wk_permission`
|
||
(
|
||
`id` BIGINT AUTO_INCREMENT COMMENT '主键',
|
||
`name` VARCHAR(32) NOT NULL COMMENT '权限名',
|
||
`url` VARCHAR(1000) NULL COMMENT '类型为页面时,代表前端路由地址,类型为按钮时,代表后端接口地址',
|
||
`type` INT NOT NULL COMMENT '权限类型,页面-1,按钮-2',
|
||
`permission` VARCHAR(50) NULL COMMENT '权限表达式',
|
||
`method` VARCHAR(50) NULL COMMENT '后端接口访问方式',
|
||
`sort` INT NOT NULL COMMENT '排序',
|
||
`parent_id` BIGINT NOT NULL COMMENT '父级ID',
|
||
`create_time` DATETIME DEFAULT NOW() COMMENT '创建时间',
|
||
`update_time` DATETIME DEFAULT NOW() ON UPDATE NOW() COMMENT '更新时间',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE INDEX `name` (`name`)
|
||
) ENGINE = InnoDB
|
||
AUTO_INCREMENT = 1072806379384868866
|
||
DEFAULT CHARSET = utf8mb4
|
||
COLLATE = utf8mb4_unicode_ci
|
||
COMMENT = '权限表';
|
||
|
||
|
||
DROP TABLE IF EXISTS `wk_role_permission`;
|
||
CREATE TABLE `wk_role_permission`
|
||
(
|
||
`role_id` BIGINT NOT NULL COMMENT '角色ID',
|
||
`permission_id` BIGINT NOT NULL COMMENT '权限ID',
|
||
PRIMARY KEY (`role_id`, `permission_id`),
|
||
CONSTRAINT `fk_role_permission_permission`
|
||
FOREIGN KEY (`permission_id`)
|
||
REFERENCES `wk_permission` (`id`),
|
||
CONSTRAINT `fk_role_permission_role`
|
||
FOREIGN KEY (`role_id`)
|
||
REFERENCES `wk_role` (`id`)
|
||
) ENGINE = InnoDB
|
||
DEFAULT CHARSET = utf8mb4
|
||
COLLATE = utf8mb4_unicode_ci
|
||
COMMENT = '角色权限表';
|
||
|
||
DROP TABLE IF EXISTS `wk_role_user`;
|
||
CREATE TABLE `wk_role_user`
|
||
(
|
||
`role_id` BIGINT NOT NULL COMMENT '角色ID',
|
||
`user_id` BIGINT NOT NULL COMMENT '用户ID',
|
||
PRIMARY KEY (`role_id`, `user_id`),
|
||
CONSTRAINT `fk_role_user_role`
|
||
FOREIGN KEY (`role_id`)
|
||
REFERENCES `wk_role` (`id`),
|
||
CONSTRAINT `fk_role_user_user`
|
||
FOREIGN KEY (`user_id`)
|
||
REFERENCES `wk_user` (`id`)
|
||
) ENGINE = InnoDB
|
||
DEFAULT CHARSET = utf8mb4
|
||
COLLATE = utf8mb4_unicode_ci
|
||
COMMENT = '角色用户表';
|
||
|
||
DROP TABLE IF EXISTS `wk_notebooks`;
|
||
CREATE TABLE `wk_notebooks`
|
||
(
|
||
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '笔记本主键', -- 笔记本唯一标识
|
||
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 BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '笔记唯一标识',
|
||
user_id bigint(64) NOT NULL COMMENT '作者用户ID',
|
||
notebook_id BIGINT 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 BIGINT AUTO_INCREMENT 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 BIGINT NOT NULL COMMENT '关联的笔记ID',
|
||
tag_id BIGINT 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 BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '附件唯一标识',
|
||
note_id BIGINT 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 '加速标签名称搜索'; |