相宜相亲 - 数据库设计
版本: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)
);
| 字段名 |
类型 |
是否必填 |
说明 |
| Id |
bigint |
PK |
主键,自增 |
| ParentId |
bigint |
Y |
父级ID,0为顶级 |
| 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
);
| 字段名 |
类型 |
是否必填 |
说明 |
| 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)
);
| 字段名 |
类型 |
是否必填 |
说明 |
| 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 |
初始版本 |