xiangyixiangqin/server/数据库设计.md
2025-12-28 22:16:58 +08:00

34 KiB
Raw Blame History

相宜相亲 - 数据库设计

版本1.0 更新日期2025-12-28


一、数据库架构

采用物理分离方案,分为两个独立数据库:

数据库 名称 说明
管理库 XiangYi_Admin 后台管理相关(管理员、角色、权限、菜单、操作日志)
业务库 XiangYi_Biz 业务数据(用户、资料、会员、订单、聊天、配置等)
┌─────────────────────────┐     ┌─────────────────────────┐
│     XiangYi_Admin       │     │      XiangYi_Biz        │
│     (后台管理库)         │     │      (业务库)           │
├─────────────────────────┤     ├─────────────────────────┤
│ Admin_User              │     │ User                    │
│ Admin_Role              │     │ User_Profile            │
│ Admin_Permission        │     │ User_Photo              │
│ Admin_Role_Permission   │     │ User_Requirement        │
│ Admin_User_Role         │     │ Member                  │
│ Admin_Menu              │     │ Order                   │
│ Admin_Role_Menu         │     │ Chat_Session            │
│ Admin_Operation_Log     │     │ Chat_Message            │
│                         │     │ User_View               │
│                         │     │ User_Favorite           │
│                         │     │ User_Unlock             │
│                         │     │ Real_Name_Auth          │
│                         │     │ Banner                  │
│                         │     │ System_Config           │
│                         │     │ System_Notification     │
│                         │     │ Daily_Recommend         │
└─────────────────────────┘     └─────────────────────────┘

二、管理库表设计 (XiangYi_Admin)

2.1 Admin_User (管理员用户表)

字段名 类型 是否必填 说明
Id bigint PK 主键,自增
Username nvarchar(50) Y 用户名,唯一
Password nvarchar(128) Y 密码(加密存储)
Salt nvarchar(32) Y 密码盐
RealName nvarchar(50) N 真实姓名
Phone nvarchar(20) N 手机号
Email nvarchar(100) N 邮箱
Avatar nvarchar(500) N 头像URL
Status int Y 状态1正常 2禁用
LastLoginTime datetime2 N 最后登录时间
LastLoginIp nvarchar(50) N 最后登录IP
CreateTime datetime2 Y 创建时间
UpdateTime datetime2 N 更新时间
IsDeleted bit Y 是否删除默认0
CREATE TABLE Admin_User (
    Id BIGINT PRIMARY KEY IDENTITY(1,1),
    Username NVARCHAR(50) NOT NULL,
    Password NVARCHAR(128) NOT NULL,
    Salt NVARCHAR(32) NOT NULL,
    RealName NVARCHAR(50),
    Phone NVARCHAR(20),
    Email NVARCHAR(100),
    Avatar NVARCHAR(500),
    Status INT NOT NULL DEFAULT 1,
    LastLoginTime DATETIME2,
    LastLoginIp NVARCHAR(50),
    CreateTime DATETIME2 NOT NULL DEFAULT GETDATE(),
    UpdateTime DATETIME2,
    IsDeleted BIT NOT NULL DEFAULT 0,
    CONSTRAINT UQ_Admin_User_Username UNIQUE (Username)
);

2.2 Admin_Role (角色表)

字段名 类型 是否必填 说明
Id bigint PK 主键,自增
RoleName nvarchar(50) Y 角色名称
RoleCode nvarchar(50) Y 角色编码,唯一
Description nvarchar(200) N 角色描述
Sort int Y 排序默认0
Status int Y 状态1正常 2禁用
CreateTime datetime2 Y 创建时间
UpdateTime datetime2 N 更新时间
IsDeleted bit Y 是否删除默认0
CREATE TABLE Admin_Role (
    Id BIGINT PRIMARY KEY IDENTITY(1,1),
    RoleName NVARCHAR(50) NOT NULL,
    RoleCode NVARCHAR(50) NOT NULL,
    Description NVARCHAR(200),
    Sort INT NOT NULL DEFAULT 0,
    Status INT NOT NULL DEFAULT 1,
    CreateTime DATETIME2 NOT NULL DEFAULT GETDATE(),
    UpdateTime DATETIME2,
    IsDeleted BIT NOT NULL DEFAULT 0,
    CONSTRAINT UQ_Admin_Role_RoleCode UNIQUE (RoleCode)
);

2.3 Admin_Permission (权限表)

字段名 类型 是否必填 说明
Id bigint PK 主键,自增
PermissionName nvarchar(50) Y 权限名称
PermissionCode nvarchar(100) Y 权限编码唯一user:view
Description nvarchar(200) N 权限描述
Module nvarchar(50) Y 所属模块
CreateTime datetime2 Y 创建时间
CREATE TABLE Admin_Permission (
    Id BIGINT PRIMARY KEY IDENTITY(1,1),
    PermissionName NVARCHAR(50) NOT NULL,
    PermissionCode NVARCHAR(100) NOT NULL,
    Description NVARCHAR(200),
    Module NVARCHAR(50) NOT NULL,
    CreateTime DATETIME2 NOT NULL DEFAULT GETDATE(),
    CONSTRAINT UQ_Admin_Permission_Code UNIQUE (PermissionCode)
);

2.4 Admin_Role_Permission (角色权限关联表)

字段名 类型 是否必填 说明
Id bigint PK 主键,自增
RoleId bigint Y 角色ID
PermissionId bigint Y 权限ID
CREATE TABLE Admin_Role_Permission (
    Id BIGINT PRIMARY KEY IDENTITY(1,1),
    RoleId BIGINT NOT NULL,
    PermissionId BIGINT NOT NULL,
    CONSTRAINT UQ_Role_Permission UNIQUE (RoleId, PermissionId)
);

2.5 Admin_User_Role (用户角色关联表)

字段名 类型 是否必填 说明
Id bigint PK 主键,自增
UserId bigint Y 用户ID
RoleId bigint Y 角色ID
CREATE TABLE Admin_User_Role (
    Id BIGINT PRIMARY KEY IDENTITY(1,1),
    UserId BIGINT NOT NULL,
    RoleId BIGINT NOT NULL,
    CONSTRAINT UQ_User_Role UNIQUE (UserId, RoleId)
);

2.6 Admin_Menu (菜单表)

字段名 类型 是否必填 说明
Id bigint PK 主键,自增
ParentId bigint Y 父级ID0为顶级
MenuName nvarchar(50) Y 菜单名称
MenuType int Y 类型1目录 2菜单 3按钮
Path nvarchar(200) N 路由路径
Component nvarchar(200) N 组件路径
Icon nvarchar(50) N 图标
PermissionCode nvarchar(100) N 关联权限编码
Sort int Y 排序
IsVisible bit Y 是否可见
IsCache bit Y 是否缓存
Status int Y 状态1正常 2禁用
CreateTime datetime2 Y 创建时间
UpdateTime datetime2 N 更新时间
CREATE TABLE Admin_Menu (
    Id BIGINT PRIMARY KEY IDENTITY(1,1),
    ParentId BIGINT NOT NULL DEFAULT 0,
    MenuName NVARCHAR(50) NOT NULL,
    MenuType INT NOT NULL,
    Path NVARCHAR(200),
    Component NVARCHAR(200),
    Icon NVARCHAR(50),
    PermissionCode NVARCHAR(100),
    Sort INT NOT NULL DEFAULT 0,
    IsVisible BIT NOT NULL DEFAULT 1,
    IsCache BIT NOT NULL DEFAULT 0,
    Status INT NOT NULL DEFAULT 1,
    CreateTime DATETIME2 NOT NULL DEFAULT GETDATE(),
    UpdateTime DATETIME2
);

2.7 Admin_Role_Menu (角色菜单关联表)

字段名 类型 是否必填 说明
Id bigint PK 主键,自增
RoleId bigint Y 角色ID
MenuId bigint Y 菜单ID
CREATE TABLE Admin_Role_Menu (
    Id BIGINT PRIMARY KEY IDENTITY(1,1),
    RoleId BIGINT NOT NULL,
    MenuId BIGINT NOT NULL,
    CONSTRAINT UQ_Role_Menu UNIQUE (RoleId, MenuId)
);

2.8 Admin_Operation_Log (操作日志表)

字段名 类型 是否必填 说明
Id bigint PK 主键,自增
AdminUserId bigint Y 管理员ID
AdminUsername nvarchar(50) Y 管理员用户名(冗余)
Module nvarchar(50) Y 操作模块
Action nvarchar(50) Y 操作类型
Description nvarchar(500) N 操作描述
RequestUrl nvarchar(500) N 请求URL
RequestMethod nvarchar(10) N 请求方法
RequestParams nvarchar(max) N 请求参数JSON
ResponseResult nvarchar(max) N 响应结果JSON
TargetId nvarchar(50) N 操作目标ID
Ip nvarchar(50) N IP地址
UserAgent nvarchar(500) N 用户代理
ExecuteTime int N 执行时长ms
Status int Y 状态1成功 2失败
ErrorMsg nvarchar(max) N 错误信息
CreateTime datetime2 Y 创建时间
CREATE TABLE Admin_Operation_Log (
    Id BIGINT PRIMARY KEY IDENTITY(1,1),
    AdminUserId BIGINT NOT NULL,
    AdminUsername NVARCHAR(50) NOT NULL,
    Module NVARCHAR(50) NOT NULL,
    Action NVARCHAR(50) NOT NULL,
    Description NVARCHAR(500),
    RequestUrl NVARCHAR(500),
    RequestMethod NVARCHAR(10),
    RequestParams NVARCHAR(MAX),
    ResponseResult NVARCHAR(MAX),
    TargetId NVARCHAR(50),
    Ip NVARCHAR(50),
    UserAgent NVARCHAR(500),
    ExecuteTime INT,
    Status INT NOT NULL DEFAULT 1,
    ErrorMsg NVARCHAR(MAX),
    CreateTime DATETIME2 NOT NULL DEFAULT GETDATE()
);

-- 索引
CREATE INDEX IX_Admin_Operation_Log_CreateTime ON Admin_Operation_Log(CreateTime DESC);
CREATE INDEX IX_Admin_Operation_Log_AdminUserId ON Admin_Operation_Log(AdminUserId);
CREATE INDEX IX_Admin_Operation_Log_Module ON Admin_Operation_Log(Module);

三、业务库表设计 (XiangYi_Biz)

3.1 User (用户表)

字段名 类型 是否必填 说明
Id bigint PK 主键,自增
OpenId nvarchar(64) Y 微信OpenId
UnionId nvarchar(64) N 微信UnionId
Phone nvarchar(20) N 手机号
Nickname nvarchar(50) N 昵称(如:李家长(父亲))
Avatar nvarchar(500) N 头像URL
XiangQinNo nvarchar(10) N 相亲编号6位数字
Gender int N 用户性别1男 2女
City nvarchar(50) N 定位城市
Status int Y 状态1正常 2禁用
IsProfileCompleted bit Y 是否完成资料填写
IsRealName bit Y 是否实名认证
IsMember bit Y 是否会员
MemberLevel int Y 会员等级0非会员 1不限时 2诚意 3家庭版
MemberExpireTime datetime2 N 会员到期时间不限时会员为null
ContactCount int Y 剩余联系次数默认2
LastLoginTime datetime2 N 最后登录时间
CreateTime datetime2 Y 创建时间
UpdateTime datetime2 N 更新时间
IsDeleted bit Y 是否删除
CREATE TABLE [User] (
    Id BIGINT PRIMARY KEY IDENTITY(1,1),
    OpenId NVARCHAR(64) NOT NULL,
    UnionId NVARCHAR(64),
    Phone NVARCHAR(20),
    Nickname NVARCHAR(50),
    Avatar NVARCHAR(500),
    XiangQinNo NVARCHAR(10),
    Gender INT,
    City NVARCHAR(50),
    Status INT NOT NULL DEFAULT 1,
    IsProfileCompleted BIT NOT NULL DEFAULT 0,
    IsRealName BIT NOT NULL DEFAULT 0,
    IsMember BIT NOT NULL DEFAULT 0,
    MemberLevel INT NOT NULL DEFAULT 0,
    MemberExpireTime DATETIME2,
    ContactCount INT NOT NULL DEFAULT 2,
    LastLoginTime DATETIME2,
    CreateTime DATETIME2 NOT NULL DEFAULT GETDATE(),
    UpdateTime DATETIME2,
    IsDeleted BIT NOT NULL DEFAULT 0,
    CONSTRAINT UQ_User_OpenId UNIQUE (OpenId),
    CONSTRAINT UQ_User_XiangQinNo UNIQUE (XiangQinNo)
);

CREATE INDEX IX_User_Phone ON [User](Phone);
CREATE INDEX IX_User_City ON [User](City);

3.2 User_Profile (用户相亲资料表)

字段名 类型 是否必填 说明
Id bigint PK 主键,自增
UserId bigint Y 用户ID
Relationship int Y 与孩子关系1父亲 2母亲 3本人
Surname nvarchar(50) Y 姓氏
ChildGender int Y 孩子性别1男 2女
BirthYear int Y 出生年份
Education int Y 学历
WorkProvince nvarchar(50) Y 工作省份
WorkCity nvarchar(50) Y 工作城市
WorkDistrict nvarchar(50) N 工作区县
Occupation nvarchar(50) Y 职业
MonthlyIncome int Y 月收入档位
Height int Y 身高(cm)
Weight int Y 体重(kg)
HouseStatus int Y 房产情况
CarStatus int Y 车辆情况
MarriageStatus int Y 婚姻状态
ExpectMarryTime int Y 期望结婚时间
Introduction nvarchar(500) Y 相亲介绍
IsPhotoPublic bit Y 是否公开照片
HomeProvince nvarchar(50) N 家乡省份
HomeCity nvarchar(50) N 家乡城市
WeChatNo nvarchar(128) Y 微信号
CreateTime datetime2 Y 创建时间
UpdateTime datetime2 N 更新时间
CREATE TABLE User_Profile (
    Id BIGINT PRIMARY KEY IDENTITY(1,1),
    UserId BIGINT NOT NULL,
    Relationship INT NOT NULL,
    Surname NVARCHAR(10) NOT NULL,
    ChildGender INT NOT NULL,
    BirthYear INT NOT NULL,
    Education INT NOT NULL,
    WorkProvince NVARCHAR(20) NOT NULL,
    WorkCity NVARCHAR(20) NOT NULL,
    WorkDistrict NVARCHAR(20),
    Occupation NVARCHAR(50) NOT NULL,
    MonthlyIncome INT NOT NULL,
    Height INT NOT NULL,
    Weight INT NOT NULL,
    HouseStatus INT NOT NULL,
    CarStatus INT NOT NULL,
    MarriageStatus INT NOT NULL,
    ExpectMarryTime INT NOT NULL,
    Introduction NVARCHAR(500) NOT NULL,
    IsPhotoPublic BIT NOT NULL DEFAULT 1,
    HomeProvince NVARCHAR(20),
    HomeCity NVARCHAR(20),
    WeChatNo NVARCHAR(50) NOT NULL,
    CreateTime DATETIME2 NOT NULL DEFAULT GETDATE(),
    UpdateTime DATETIME2,
    CONSTRAINT UQ_User_Profile_UserId UNIQUE (UserId)
);

CREATE INDEX IX_User_Profile_ChildGender ON User_Profile(ChildGender);
CREATE INDEX IX_User_Profile_WorkCity ON User_Profile(WorkCity);
CREATE INDEX IX_User_Profile_BirthYear ON User_Profile(BirthYear);

3.3 User_Photo (用户照片表)

字段名 类型 是否必填 说明
Id bigint PK 主键,自增
UserId bigint Y 用户ID
PhotoUrl nvarchar(500) Y 照片URL
Sort int Y 排序
CreateTime datetime2 Y 创建时间
CREATE TABLE User_Photo (
    Id BIGINT PRIMARY KEY IDENTITY(1,1),
    UserId BIGINT NOT NULL,
    PhotoUrl NVARCHAR(500) NOT NULL,
    Sort INT NOT NULL DEFAULT 0,
    CreateTime DATETIME2 NOT NULL DEFAULT GETDATE()
);

CREATE INDEX IX_User_Photo_UserId ON User_Photo(UserId);

3.4 User_Requirement (择偶要求表)

字段名 类型 是否必填 说明
Id bigint PK 主键,自增
UserId bigint Y 用户ID
AgeMin int Y 年龄最小值
AgeMax int Y 年龄最大值
HeightMin int N 身高最小值null表示不限
HeightMax int N 身高最大值
Education nvarchar(50) Y 学历要求JSON数组
City1Province nvarchar(20) Y 地区1-省
City1City nvarchar(20) Y 地区1-市
City2Province nvarchar(20) N 地区2-省
City2City nvarchar(20) N 地区2-市
MonthlyIncomeMin int N 月收入最小值null表示不限
MonthlyIncomeMax int N 月收入最大值
HouseStatus nvarchar(50) N 房产要求JSON数组
CarStatus nvarchar(50) N 车产要求JSON数组
MarriageStatus nvarchar(50) N 婚姻要求JSON数组
CreateTime datetime2 Y 创建时间
UpdateTime datetime2 N 更新时间
CREATE TABLE User_Requirement (
    Id BIGINT PRIMARY KEY IDENTITY(1,1),
    UserId BIGINT NOT NULL,
    AgeMin INT NOT NULL,
    AgeMax INT NOT NULL,
    HeightMin INT,
    HeightMax INT,
    Education NVARCHAR(50) NOT NULL,
    City1Province NVARCHAR(20) NOT NULL,
    City1City NVARCHAR(20) NOT NULL,
    City2Province NVARCHAR(20),
    City2City NVARCHAR(20),
    MonthlyIncomeMin INT,
    MonthlyIncomeMax INT,
    HouseStatus NVARCHAR(50),
    CarStatus NVARCHAR(50),
    MarriageStatus NVARCHAR(50),
    CreateTime DATETIME2 NOT NULL DEFAULT GETDATE(),
    UpdateTime DATETIME2,
    CONSTRAINT UQ_User_Requirement_UserId UNIQUE (UserId)
);

3.5 Member (会员表)

字段名 类型 是否必填 说明
Id bigint PK 主键,自增
UserId bigint Y 用户ID
MemberLevel int Y 会员等级1不限时 2诚意 3家庭版
OrderId bigint Y 关联订单ID
StartTime datetime2 Y 开始时间
ExpireTime datetime2 N 到期时间不限时为null
Status int Y 状态1生效中 2已过期
CreateTime datetime2 Y 创建时间
CREATE TABLE Member (
    Id BIGINT PRIMARY KEY IDENTITY(1,1),
    UserId BIGINT NOT NULL,
    MemberLevel INT NOT NULL,
    OrderId BIGINT NOT NULL,
    StartTime DATETIME2 NOT NULL,
    ExpireTime DATETIME2,
    Status INT NOT NULL DEFAULT 1,
    CreateTime DATETIME2 NOT NULL DEFAULT GETDATE()
);

CREATE INDEX IX_Member_UserId ON Member(UserId);

3.6 Member_Family (家庭版会员绑定表)

字段名 类型 是否必填 说明
Id bigint PK 主键,自增
MemberId bigint Y 会员记录ID
MasterUserId bigint Y 主账号用户ID
BindUserId bigint Y 绑定用户ID
CreateTime datetime2 Y 创建时间
CREATE TABLE Member_Family (
    Id BIGINT PRIMARY KEY IDENTITY(1,1),
    MemberId BIGINT NOT NULL,
    MasterUserId BIGINT NOT NULL,
    BindUserId BIGINT NOT NULL,
    CreateTime DATETIME2 NOT NULL DEFAULT GETDATE(),
    CONSTRAINT UQ_Member_Family UNIQUE (MemberId, BindUserId)
);

3.7 Order (订单表)

字段名 类型 是否必填 说明
Id bigint PK 主键,自增
OrderNo nvarchar(32) Y 订单号
UserId bigint Y 用户ID
OrderType int Y 订单类型1会员 2实名认证
ProductName nvarchar(100) Y 商品名称
Amount decimal(10,2) Y 订单金额
PayAmount decimal(10,2) Y 实付金额
PayType int N 支付方式1微信支付
PayTime datetime2 N 支付时间
TransactionId nvarchar(64) N 微信支付交易号
Status int Y 状态1待支付 2已支付 3已取消 4已退款
Remark nvarchar(200) N 备注
ExpireTime datetime2 Y 订单过期时间
CreateTime datetime2 Y 创建时间
UpdateTime datetime2 N 更新时间
CREATE TABLE [Order] (
    Id BIGINT PRIMARY KEY IDENTITY(1,1),
    OrderNo NVARCHAR(32) NOT NULL,
    UserId BIGINT NOT NULL,
    OrderType INT NOT NULL,
    ProductName NVARCHAR(100) NOT NULL,
    Amount DECIMAL(10,2) NOT NULL,
    PayAmount DECIMAL(10,2) NOT NULL,
    PayType INT,
    PayTime DATETIME2,
    TransactionId NVARCHAR(64),
    Status INT NOT NULL DEFAULT 1,
    Remark NVARCHAR(200),
    ExpireTime DATETIME2 NOT NULL,
    CreateTime DATETIME2 NOT NULL DEFAULT GETDATE(),
    UpdateTime DATETIME2,
    CONSTRAINT UQ_Order_OrderNo UNIQUE (OrderNo)
);

CREATE INDEX IX_Order_UserId ON [Order](UserId);
CREATE INDEX IX_Order_Status ON [Order](Status);
CREATE INDEX IX_Order_CreateTime ON [Order](CreateTime DESC);

3.8 Real_Name_Auth (实名认证表)

字段名 类型 是否必填 说明
Id bigint PK 主键,自增
UserId bigint Y 用户ID
OrderId bigint Y 关联订单ID
RealName nvarchar(50) Y 真实姓名(加密存储)
IdCard nvarchar(128) Y 身份证号(加密存储)
IdCardFrontUrl nvarchar(500) Y 身份证正面照URL
IdCardBackUrl nvarchar(500) Y 身份证反面照URL
Status int Y 状态1待审核 2已通过 3已拒绝
RejectReason nvarchar(200) N 拒绝原因
VerifyTime datetime2 N 审核时间
CreateTime datetime2 Y 创建时间
CREATE TABLE Real_Name_Auth (
    Id BIGINT PRIMARY KEY IDENTITY(1,1),
    UserId BIGINT NOT NULL,
    OrderId BIGINT NOT NULL,
    RealName NVARCHAR(50) NOT NULL,
    IdCard NVARCHAR(128) NOT NULL,
    IdCardFrontUrl NVARCHAR(500) NOT NULL,
    IdCardBackUrl NVARCHAR(500) NOT NULL,
    Status INT NOT NULL DEFAULT 1,
    RejectReason NVARCHAR(200),
    VerifyTime DATETIME2,
    CreateTime DATETIME2 NOT NULL DEFAULT GETDATE()
);

CREATE INDEX IX_Real_Name_Auth_UserId ON Real_Name_Auth(UserId);

3.9 Chat_Session (聊天会话表)

字段名 类型 是否必填 说明
Id bigint PK 主键,自增
User1Id bigint Y 用户1 ID较小的ID
User2Id bigint Y 用户2 ID较大的ID
LastMessageId bigint N 最后一条消息ID
LastMessageTime datetime2 N 最后消息时间
User1UnreadCount int Y 用户1未读数
User2UnreadCount int Y 用户2未读数
CreateTime datetime2 Y 创建时间
UpdateTime datetime2 N 更新时间
CREATE TABLE Chat_Session (
    Id BIGINT PRIMARY KEY IDENTITY(1,1),
    User1Id BIGINT NOT NULL,
    User2Id BIGINT NOT NULL,
    LastMessageId BIGINT,
    LastMessageTime DATETIME2,
    User1UnreadCount INT NOT NULL DEFAULT 0,
    User2UnreadCount INT NOT NULL DEFAULT 0,
    CreateTime DATETIME2 NOT NULL DEFAULT GETDATE(),
    UpdateTime DATETIME2,
    CONSTRAINT UQ_Chat_Session UNIQUE (User1Id, User2Id)
);

CREATE INDEX IX_Chat_Session_User1Id ON Chat_Session(User1Id);
CREATE INDEX IX_Chat_Session_User2Id ON Chat_Session(User2Id);

3.10 Chat_Message (聊天消息表)

字段名 类型 是否必填 说明
Id bigint PK 主键,自增
SessionId bigint Y 会话ID
SenderId bigint Y 发送者ID
ReceiverId bigint Y 接收者ID
MessageType int Y 消息类型1文本 2语音 3图片 4交换微信请求 5交换微信结果 6交换照片请求 7交换照片结果
Content nvarchar(max) N 消息内容
VoiceUrl nvarchar(500) N 语音URL
VoiceDuration int N 语音时长(秒)
ExtraData nvarchar(max) N 扩展数据JSON
Status int Y 状态1正常 2已撤回 3已删除
IsRead bit Y 是否已读
CreateTime datetime2 Y 创建时间
CREATE TABLE Chat_Message (
    Id BIGINT PRIMARY KEY IDENTITY(1,1),
    SessionId BIGINT NOT NULL,
    SenderId BIGINT NOT NULL,
    ReceiverId BIGINT NOT NULL,
    MessageType INT NOT NULL,
    Content NVARCHAR(MAX),
    VoiceUrl NVARCHAR(500),
    VoiceDuration INT,
    ExtraData NVARCHAR(MAX),
    Status INT NOT NULL DEFAULT 1,
    IsRead BIT NOT NULL DEFAULT 0,
    CreateTime DATETIME2 NOT NULL DEFAULT GETDATE()
);

CREATE INDEX IX_Chat_Message_SessionId ON Chat_Message(SessionId, CreateTime DESC);
CREATE INDEX IX_Chat_Message_ReceiverId ON Chat_Message(ReceiverId, IsRead);

3.11 User_View (浏览记录表)

字段名 类型 是否必填 说明
Id bigint PK 主键,自增
UserId bigint Y 浏览者ID
TargetUserId bigint Y 被浏览者ID
ViewCount int Y 当日浏览次数
ViewDate date Y 浏览日期
LastViewTime datetime2 Y 最后浏览时间
CreateTime datetime2 Y 创建时间
CREATE TABLE User_View (
    Id BIGINT PRIMARY KEY IDENTITY(1,1),
    UserId BIGINT NOT NULL,
    TargetUserId BIGINT NOT NULL,
    ViewCount INT NOT NULL DEFAULT 1,
    ViewDate DATE NOT NULL,
    LastViewTime DATETIME2 NOT NULL,
    CreateTime DATETIME2 NOT NULL DEFAULT GETDATE(),
    CONSTRAINT UQ_User_View UNIQUE (UserId, TargetUserId, ViewDate)
);

CREATE INDEX IX_User_View_TargetUserId ON User_View(TargetUserId, ViewDate DESC);

3.12 User_Favorite (收藏表)

字段名 类型 是否必填 说明
Id bigint PK 主键,自增
UserId bigint Y 收藏者ID
TargetUserId bigint Y 被收藏者ID
CreateTime datetime2 Y 创建时间
CREATE TABLE User_Favorite (
    Id BIGINT PRIMARY KEY IDENTITY(1,1),
    UserId BIGINT NOT NULL,
    TargetUserId BIGINT NOT NULL,
    CreateTime DATETIME2 NOT NULL DEFAULT GETDATE(),
    CONSTRAINT UQ_User_Favorite UNIQUE (UserId, TargetUserId)
);

CREATE INDEX IX_User_Favorite_TargetUserId ON User_Favorite(TargetUserId);

3.13 User_Unlock (解锁记录表)

字段名 类型 是否必填 说明
Id bigint PK 主键,自增
UserId bigint Y 解锁者ID
TargetUserId bigint Y 被解锁者ID
CreateTime datetime2 Y 创建时间
CREATE TABLE User_Unlock (
    Id BIGINT PRIMARY KEY IDENTITY(1,1),
    UserId BIGINT NOT NULL,
    TargetUserId BIGINT NOT NULL,
    CreateTime DATETIME2 NOT NULL DEFAULT GETDATE(),
    CONSTRAINT UQ_User_Unlock UNIQUE (UserId, TargetUserId)
);

CREATE INDEX IX_User_Unlock_TargetUserId ON User_Unlock(TargetUserId);

3.14 Daily_Recommend (每日推荐表)

字段名 类型 是否必填 说明
Id bigint PK 主键,自增
UserId bigint Y 用户ID
RecommendUserId bigint Y 推荐用户ID
RecommendDate date Y 推荐日期
Sort int Y 排序
IsViewed bit Y 是否已查看
CreateTime datetime2 Y 创建时间
CREATE TABLE Daily_Recommend (
    Id BIGINT PRIMARY KEY IDENTITY(1,1),
    UserId BIGINT NOT NULL,
    RecommendUserId BIGINT NOT NULL,
    RecommendDate DATE NOT NULL,
    Sort INT NOT NULL DEFAULT 0,
    IsViewed BIT NOT NULL DEFAULT 0,
    CreateTime DATETIME2 NOT NULL DEFAULT GETDATE(),
    CONSTRAINT UQ_Daily_Recommend UNIQUE (UserId, RecommendUserId, RecommendDate)
);

CREATE INDEX IX_Daily_Recommend_UserId_Date ON Daily_Recommend(UserId, RecommendDate DESC);

3.15 Banner (Banner配置表)

字段名 类型 是否必填 说明
Id bigint PK 主键,自增
Title nvarchar(100) Y 标题
ImageUrl nvarchar(500) Y 图片URL
LinkType int Y 链接类型1内部页面 2外部链接 3小程序
LinkUrl nvarchar(500) N 链接地址
Sort int Y 排序
Status int Y 状态1启用 2禁用
StartTime datetime2 N 开始时间
EndTime datetime2 N 结束时间
CreateTime datetime2 Y 创建时间
UpdateTime datetime2 N 更新时间
CREATE TABLE Banner (
    Id BIGINT PRIMARY KEY IDENTITY(1,1),
    Title NVARCHAR(100) NOT NULL,
    ImageUrl NVARCHAR(500) NOT NULL,
    LinkType INT NOT NULL DEFAULT 1,
    LinkUrl NVARCHAR(500),
    Sort INT NOT NULL DEFAULT 0,
    Status INT NOT NULL DEFAULT 1,
    StartTime DATETIME2,
    EndTime DATETIME2,
    CreateTime DATETIME2 NOT NULL DEFAULT GETDATE(),
    UpdateTime DATETIME2
);

3.16 System_Config (系统配置表)

字段名 类型 是否必填 说明
Id bigint PK 主键,自增
ConfigKey nvarchar(100) Y 配置键
ConfigValue nvarchar(max) Y 配置值
ConfigType nvarchar(50) Y 配置类型
Description nvarchar(200) N 描述
CreateTime datetime2 Y 创建时间
UpdateTime datetime2 N 更新时间
CREATE TABLE System_Config (
    Id BIGINT PRIMARY KEY IDENTITY(1,1),
    ConfigKey NVARCHAR(100) NOT NULL,
    ConfigValue NVARCHAR(MAX) NOT NULL,
    ConfigType NVARCHAR(50) NOT NULL,
    Description NVARCHAR(200),
    CreateTime DATETIME2 NOT NULL DEFAULT GETDATE(),
    UpdateTime DATETIME2,
    CONSTRAINT UQ_System_Config_Key UNIQUE (ConfigKey)
);

3.17 System_Notification (系统通知表)

字段名 类型 是否必填 说明
Id bigint PK 主键,自增
Title nvarchar(100) Y 标题
Content nvarchar(max) Y 内容
TargetType int Y 目标类型1全部用户 2指定用户
TargetUsers nvarchar(max) N 指定用户ID列表JSON数组
Status int Y 状态1草稿 2已发布
PublishTime datetime2 N 发布时间
CreateTime datetime2 Y 创建时间
UpdateTime datetime2 N 更新时间
CREATE TABLE System_Notification (
    Id BIGINT PRIMARY KEY IDENTITY(1,1),
    Title NVARCHAR(100) NOT NULL,
    Content NVARCHAR(MAX) NOT NULL,
    TargetType INT NOT NULL DEFAULT 1,
    TargetUsers NVARCHAR(MAX),
    Status INT NOT NULL DEFAULT 1,
    PublishTime DATETIME2,
    CreateTime DATETIME2 NOT NULL DEFAULT GETDATE(),
    UpdateTime DATETIME2
);

CREATE INDEX IX_System_Notification_Status ON System_Notification(Status, PublishTime DESC);

3.18 User_Notification_Read (用户通知已读表)

字段名 类型 是否必填 说明
Id bigint PK 主键,自增
UserId bigint Y 用户ID
NotificationId bigint Y 通知ID
ReadTime datetime2 Y 阅读时间
CREATE TABLE User_Notification_Read (
    Id BIGINT PRIMARY KEY IDENTITY(1,1),
    UserId BIGINT NOT NULL,
    NotificationId BIGINT NOT NULL,
    ReadTime DATETIME2 NOT NULL DEFAULT GETDATE(),
    CONSTRAINT UQ_User_Notification_Read UNIQUE (UserId, NotificationId)
);

3.19 Popup_Config (弹窗配置表)

字段名 类型 是否必填 说明
Id bigint PK 主键,自增
PopupType int Y 弹窗类型1每日首次 2服务号关注 3会员广告
Title nvarchar(100) N 标题
ImageUrl nvarchar(500) Y 背景图URL
LinkUrl nvarchar(500) N 跳转链接
ButtonText nvarchar(50) N 按钮文字
Status int Y 状态1启用 2禁用
CreateTime datetime2 Y 创建时间
UpdateTime datetime2 N 更新时间
CREATE TABLE Popup_Config (
    Id BIGINT PRIMARY KEY IDENTITY(1,1),
    PopupType INT NOT NULL,
    Title NVARCHAR(100),
    ImageUrl NVARCHAR(500) NOT NULL,
    LinkUrl NVARCHAR(500),
    ButtonText NVARCHAR(50),
    Status INT NOT NULL DEFAULT 1,
    CreateTime DATETIME2 NOT NULL DEFAULT GETDATE(),
    UpdateTime DATETIME2,
    CONSTRAINT UQ_Popup_Config_Type UNIQUE (PopupType)
);

3.20 King_Kong (金刚位配置表)

字段名 类型 是否必填 说明
Id bigint PK 主键,自增
Title nvarchar(50) Y 标题
IconUrl nvarchar(500) Y 图标URL
LinkType int Y 链接类型
LinkUrl nvarchar(500) N 链接地址
Sort int Y 排序
Status int Y 状态
CreateTime datetime2 Y 创建时间
UpdateTime datetime2 N 更新时间
CREATE TABLE King_Kong (
    Id BIGINT PRIMARY KEY IDENTITY(1,1),
    Title NVARCHAR(50) NOT NULL,
    IconUrl NVARCHAR(500) NOT NULL,
    LinkType INT NOT NULL DEFAULT 1,
    LinkUrl NVARCHAR(500),
    Sort INT NOT NULL DEFAULT 0,
    Status INT NOT NULL DEFAULT 1,
    CreateTime DATETIME2 NOT NULL DEFAULT GETDATE(),
    UpdateTime DATETIME2
);

四、枚举定义

4.1 通用状态

public enum Status
{
    Normal = 1,    // 正常
    Disabled = 2   // 禁用
}

4.2 用户相关

public enum Gender
{
    Male = 1,      // 男
    Female = 2     // 女
}

public enum Relationship
{
    Father = 1,    // 父亲
    Mother = 2,    // 母亲
    Self = 3       // 本人
}

public enum MemberLevel
{
    None = 0,           // 非会员
    Unlimited = 1,      // 不限时会员
    Sincere = 2,        // 诚意会员
    Family = 3          // 家庭版会员
}

4.3 资料相关

public enum Education
{
    None = 0,           // 不限
    HighSchool = 1,     // 高中
    Technical = 2,      // 中专
    College = 3,        // 大专
    Bachelor = 4,       // 本科
    Master = 5,         // 研究生
    Doctor = 6          // 博士及以上
}

public enum HouseStatus
{
    LocalOwned = 1,     // 现居地已购房
    HometownOwned = 2,  // 家乡已购房
    AfterMarriage = 3,  // 婚后购房
    WithParents = 4,    // 父母同住
    Renting = 5,        // 租房
    Planning = 6        // 近期有购房计划
}

public enum CarStatus
{
    Owned = 1,          // 已购车
    None = 2,           // 无车
    Planning = 3        // 近期购车
}

public enum MarriageStatus
{
    Single = 1,         // 未婚
    DivorcedNoChild = 2,// 离异未育
    DivorcedWithChild = 3 // 离异已育
}

public enum ExpectMarryTime
{
    ASAP = 1,           // 尽快结婚
    OneToTwoYears = 2,  // 一到两年内
    WhenReady = 3       // 孩子满意就结婚
}

4.4 订单相关

public enum OrderType
{
    Membership = 1,     // 会员
    RealName = 2        // 实名认证
}

public enum OrderStatus
{
    Pending = 1,        // 待支付
    Paid = 2,           // 已支付
    Cancelled = 3,      // 已取消
    Refunded = 4        // 已退款
}

public enum PayType
{
    WeChat = 1          // 微信支付
}

4.5 消息相关

public enum MessageType
{
    Text = 1,                   // 文本
    Voice = 2,                  // 语音
    Image = 3,                  // 图片
    ExchangeWeChatRequest = 4,  // 交换微信请求
    ExchangeWeChatResult = 5,   // 交换微信结果
    ExchangePhotoRequest = 6,   // 交换照片请求
    ExchangePhotoResult = 7     // 交换照片结果
}

4.6 菜单相关

public enum MenuType
{
    Directory = 1,      // 目录
    Menu = 2,           // 菜单
    Button = 3          // 按钮
}

五、索引策略

5.1 主要查询场景索引

表名 索引字段 场景
User OpenId 微信登录查询
User Phone 手机号查询
User City 按城市筛选
User_Profile ChildGender 按性别筛选
User_Profile WorkCity 按城市筛选
User_Profile BirthYear 按年龄筛选
Chat_Message SessionId, CreateTime 聊天记录查询
User_View TargetUserId, ViewDate 谁看过我
User_Favorite TargetUserId 谁收藏我
User_Unlock TargetUserId 谁解锁我
Daily_Recommend UserId, RecommendDate 每日推荐
Order UserId 用户订单查询
Admin_Operation_Log CreateTime 日志时间查询

六、版本记录

版本 日期 修改内容
1.0 2025-12-28 初始版本