- MySQL 8.0 或更高版本
- 确保 MySQL 服务已启动
-
执行初始化脚本
使用 MySQL 客户端(如 MySQL Workbench、Navicat、命令行等)执行以下 SQL 文件:
# 方式1:使用命令行 mysql -u root -p < src/main/resources/sql/new_data.sql # 方式2:使用 MySQL Workbench # 打开 MySQL Workbench -> File -> Open SQL Script -> 选择 new_data.sql -> 执行
-
验证数据库创建
执行以下 SQL 验证数据库是否创建成功:
USE linkme; SHOW TABLES;
应该能看到所有表(共 34 张表)。
-
测试数据
test.sql文件已包含测试数据,包括:- 测试用户(密码均为:Aa123456_)
- 示例帖子、评论、点赞等数据
- 匹配机制相关的初始数据
- 如果数据库已存在,脚本会使用
CREATE TABLE IF NOT EXISTS确保不会重复创建 - 执行脚本前请确保有足够的数据库权限
- 建议在开发环境使用,生产环境请根据实际情况调整
作用: 存储用户基本信息
主要字段:
user_id: 用户 ID(主键)username: 用户名(唯一)email: 邮箱(唯一)phone: 手机号(唯一)password_hash: 密码哈希(bcrypt 加密)nickname: 昵称gender: 性别(male/female/other)birthday: 生日region: 地区avatar_url: 头像 Base64 编码字符串bio: 个人简介role: 用户角色(customer/admin/moderator)matching_questionnaire_completed: 是否完成匹配问卷(默认 FALSE)matching_questionnaire_completed_at: 问卷完成时间(NULL 表示未完成)
作用: 存储标签定义,支持用户标签和帖子标签
主要字段:
tag_id: 标签 ID(主键)name: 标签名称(唯一)tag_type: 标签类型(post/user)created_by: 创建者 ID(NULL 为系统设定)
作用: 关联用户和标签,实现多对多关系
主要字段:
user_id: 用户 IDtag_id: 标签 ID- 联合主键:
(user_id, tag_id)
作用: 存储帖子内容
主要字段:
post_id: 帖子 ID(主键)user_id: 发布者 IDcontent: 帖子内容topic: 主题privacy_level: 隐私级别(public/followers/intimate/private)created_at: 创建时间updated_at: 更新时间
作用: 存储帖子关联的图片
主要字段:
image_id: 图片 ID(主键)post_id: 帖子 IDimage_url: 图片 Base64 编码字符串image_order: 图片顺序
作用: 关联帖子和标签,实现多对多关系
主要字段:
post_id: 帖子 IDtag_id: 标签 ID- 联合主键:
(post_id, tag_id)
作用: 存储评论信息,支持回复评论(父子评论)
主要字段:
comment_id: 评论 ID(主键)post_id: 帖子 IDuser_id: 评论者 IDcontent: 评论内容parent_id: 父评论 ID(NULL 表示顶级评论)
作用: 存储用户对帖子的点赞关系
主要字段:
like_id: 点赞 ID(主键)user_id: 点赞用户 IDpost_id: 被点赞的帖子 IDcreated_at: 点赞时间- 唯一约束:
(user_id, post_id)确保同一用户不能重复点赞同一帖子
作用: 存储用户创建的收藏夹
主要字段:
folder_id: 收藏夹 ID(主键)user_id: 用户 IDname: 收藏夹名称is_public: 是否公开- 唯一约束:
(user_id, name)确保同一用户不能创建同名收藏夹
作用: 存储用户收藏的帖子,支持分类到不同收藏夹
主要字段:
favorite_id: 收藏 ID(主键)user_id: 用户 IDpost_id: 帖子 IDfolder_id: 收藏夹 ID- 唯一约束:
(user_id, post_id, folder_id)确保同一帖子不能重复收藏到同一收藏夹
作用: 存储用户之间的关注关系
主要字段:
follower_id: 关注者 IDfollowee_id: 被关注者 IDcreated_at: 关注时间- 联合主键:
(follower_id, followee_id) - 约束:不能关注自己
作用: 存储用户之间的红心关系(用于匹配机制)
主要字段:
heart_id: 红心 ID(主键)from_user_id: 发送者 IDto_user_id: 接收者 IDcreated_at: 发送时间- 唯一约束:
(from_user_id, to_user_id)确保不能重复发送 - 约束:不能给自己发送红心
作用: 存储用户之间的匹配关系(双方互相发送红心后形成匹配)
主要字段:
match_id: 匹配 ID(主键)user1_id: 用户 1ID(较小的 ID)user2_id: 用户 2ID(较大的 ID)status: 状态(0-进行中,1-已结束)created_at: 匹配时间updated_at: 更新时间- 约束:
user1_id < user2_id确保 ID 顺序一致
作用: 存储用户之间的聊天会话
主要字段:
conversation_id: 会话 ID(主键)user1_id: 用户 1ID(较小的 ID)user2_id: 用户 2ID(较大的 ID)user1_muted: 用户 1 是否免打扰user2_muted: 用户 2 是否免打扰user1_pinned: 用户 1 是否置顶user2_pinned: 用户 2 是否置顶created_at: 创建时间- 约束:
user1_id < user2_id确保 ID 顺序一致
作用: 存储聊天消息
主要字段:
message_id: 消息 ID(主键)conversation_id: 会话 IDsender_id: 发送者 IDcontent_type: 内容类型(text/image/video/voice/file)content: 消息内容is_read: 是否已读created_at: 发送时间
作用: 存储系统通知
主要字段:
notification_id: 通知 ID(主键)user_id: 接收用户 IDtype: 通知类型(message/follow/heart/like/comment/match)actor_id: 操作者 IDrelated_id: 关联实体 IDrelated_type: 关联实体类型title: 通知标题content: 通知内容is_read: 是否已读created_at: 通知时间
作用: 存储验证码信息,用于注册、登录、重置密码等场景
主要字段:
code_id: 验证码 ID(主键)user_id: 用户 ID(可为 NULL)code: 验证码type: 类型(email/phone)purpose: 用途(register/login/reset_password)expire_at: 过期时间is_used: 是否已使用created_at: 发送时间
作用: 存储用户的隐私设置
主要字段:
privacy_id: 隐私设置 ID(主键)user_id: 用户 ID(唯一)allow_match: 是否允许匹配allow_private_messages: 允许私聊(all/followed/none)allow_profile_view: 允许查看个人资料(all/followed/none)
作用: 存储内容审核日志
主要字段:
id: 日志 ID(主键)target_id: 被审核内容 IDtarget_type: 被审核内容类型(0-帖子, 1-评论, 2-用户资料)auditor_id: 审核员 ID(0 代表系统自动审核)action: 执行操作(PASS/BLOCK/DELETE)reason: 原因备注create_time: 创建时间
作用: 存储用户之间的屏蔽关系
主要字段:
blocker_id: 屏蔽者 IDblocked_id: 被屏蔽者 IDcreated_at: 屏蔽时间- 联合主键:
(blocker_id, blocked_id) - 约束:不能屏蔽自己
作用: 存储爱好分类,用于匹配机制
主要字段:
category_id: 分类 ID(主键)name: 分类名称(唯一)icon: 分类图标display_order: 显示顺序
作用: 存储具体的爱好选项
主要字段:
hobby_id: 爱好 ID(主键)category_id: 分类 IDname: 爱好名称display_order: 显示顺序- 唯一约束:
(category_id, name)确保同一分类下不能有同名爱好
作用: 关联用户和爱好,实现多对多关系
主要字段:
user_id: 用户 IDhobby_id: 爱好 ID- 联合主键:
(user_id, hobby_id)
作用: 存储性格特质分类
主要字段:
category_id: 分类 ID(主键)name: 分类名称description: 分类描述trait_type: 特质类型(self-自身特质,ideal-理想对象特质)display_order: 显示顺序- 唯一约束:
(name, trait_type)确保同一类型下不能有同名分类
作用: 存储性格特质的具体选项
主要字段:
option_id: 选项 ID(主键)category_id: 分类 IDname: 选项名称display_order: 显示顺序- 唯一约束:
(category_id, name)确保同一分类下不能有同名选项
作用: 关联用户和性格特质选项
主要字段:
user_id: 用户 IDoption_id: 选项 ID- 联合主键:
(user_id, option_id)
作用: 存储关系品质选项,用于匹配机制
主要字段:
quality_id: 品质 ID(主键)name: 品质名称(唯一)display_order: 显示顺序
作用: 关联用户和关系品质
主要字段:
user_id: 用户 IDquality_id: 品质 ID- 联合主键:
(user_id, quality_id)
作用: 存储关系模式选项
主要字段:
mode_id: 模式 ID(主键)name: 模式名称(唯一)description: 模式描述display_order: 显示顺序
作用: 存储沟通期待选项
主要字段:
expectation_id: 期待 ID(主键)name: 期待名称(唯一)description: 期待描述display_order: 显示顺序
作用: 存储匹配维度定义
主要字段:
dimension_id: 维度 ID(主键)name: 维度名称(唯一)code: 维度代码(唯一)display_order: 显示顺序
作用: 存储用户的匹配偏好设置
主要字段:
preference_id: 偏好 ID(主键)user_id: 用户 ID(唯一)age_min: 最小年龄要求age_max: 最大年龄要求age_unlimited: 是否无年龄限制distance_preference: 关系距离要求(same_city/same_city_or_remote/unlimited)relationship_mode_id: 理想关系模式 IDcommunication_expectation_id: 沟通期待 IDadditional_requirements: 其他未被覆盖的交友要求
作用: 关联用户和必须匹配的维度
主要字段:
user_id: 用户 IDdimension_id: 维度 ID- 联合主键:
(user_id, dimension_id)
作用: 关联用户和优先匹配的维度(带优先级)
主要字段:
user_id: 用户 IDdimension_id: 维度 IDpriority_order: 优先级顺序- 联合主键:
(user_id, dimension_id)
-
用户系统
user←user_tag→tag_defuser←privacy_settinguser←verification_code
-
帖子系统
user←post→post_tag→tag_defpost←post_imagepost←comment←userpost←like_post←userpost←favorite←favorite_folder←user
-
社交关系
user←follow→user(关注关系)user←heart→user(红心关系)user←match_user→user(匹配关系)user←block→user(屏蔽关系)
-
聊天系统
user←conversation→userconversation←message←user
-
匹配机制
user←user_hobby→hobby→hobby_categoryuser←user_personality→personality_trait_option→personality_trait_categoryuser←user_relationship_quality→relationship_qualityuser←user_matching_preference→relationship_modeuser←user_matching_preference→communication_expectationuser←user_matching_must_dimension→matching_dimensionuser←user_matching_priority_dimension→matching_dimension
-
表名规范
- 所有表名使用小写下划线命名
like_post和match_user表名避免了 MySQL 保留字冲突
-
外键约束
- 所有外键都设置了
ON DELETE CASCADE,删除主表记录时会自动删除关联记录 - 部分外键设置了
ON DELETE SET NULL,删除主表记录时会将外键设为 NULL
- 所有外键都设置了
-
索引优化
- 所有外键字段都建立了索引
- 常用查询字段(如
created_at、user_id等)都建立了索引 - 联合索引用于优化多条件查询
-
数据完整性
- 使用唯一约束防止重复数据
- 使用检查约束(CHECK)确保数据有效性
- 使用枚举类型(ENUM)限制字段取值范围