温柔乡(CP匹配)项目架构

温柔乡

操作逻辑

image-20241109100617075

前期准备

设备:服务器(规格待定)、数据云(七牛云)

数据库设计(PG)

User表

字段 含义 数据类型 描述 默认值 是否可为空 约束
id userID INT UNSIGNED 主键
wechat 微信id VARCHAR(128) 用户的微信ID 非空
nick_name 姓名 VARCHAR(20) 用户的昵称
avatar 头像 VARCHAR(255) 头像的URL或路径
detail 个性签名 VARCHAR(255) 用户的个性标签或描述
background 背景图 VARCHAR(255) 背景图的URL或路径
sign_days 连续签到天数 INT 用户签到的天数
sex 性别 TINYINT UNSIGNED 用户的性别 默认值’男0’(0,1)
age 年龄 TINYINT UNSIGNED 用户的年龄(例如0-127)
location 位置 INT UNSIGNED 用户的位置信息
likes 爱好 INT UNSIGNED 用户的爱好列表
school 学校 INT UNSIGNED 用户所在学校
height 身高 INT UNSIGNED 用户的身高(例如175.5)
specialty 特长 INT UNSIGNED
hometown 省份 INT UNSIGNED
advance_count 高级匹配次数 INT UNSIGNED 默认1
create_time 创建时间 DATETIME 用户的创建时间 默认值当前时间
update_time 更新时间 DATETIME 用户的更新时间 默认值当前时间
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
CREATE TABLE "User" (
id SERIAL PRIMARY KEY,
wechat VARCHAR(128) NOT NULL,
nick_name VARCHAR(20) NOT NULL,
avatar VARCHAR(255) NOT NULL,
detail VARCHAR(255),
background VARCHAR(255),
sign_days INT,
sex SMALLINT DEFAULT 0 CHECK (sex IN (0, 1)),
age SMALLINT,
location INT,
likes INT,
school INT,
height INT,
specialty INT,
hometown INT,
advance_count INT DEFAULT 1,
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Conditions筛选条件表

字段 含义 数据类型 默认值 是否可空 约束
user_id 用户id INT UNSIGNED 主键
sex 性别 TINYINT UNSIGNED 0 CHECK (sex IN (0, 1))
age 年龄 TINYINT UNSIGNED
location 位置 INT UNSIGNED
likes 喜好 INT UNSIGNED
score 成绩 INT UNSIGNED
school 学校 INT UNSIGNED 1
height 身高 INT UNSIGNED
hometown 省份 INT[ ]
remark 备注 VARCHAR(255)
create_time 创建时间 DATETIME 用户的创建时间 默认值当前时间
update_time 更新时间 DATETIME 用户的更新时间 默认值当前时间
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CREATE TABLE "Conditions" (
user_id INT REFERENCES "User"(id) ON DELETE CASCADE,
sex SMALLINT DEFAULT 0 CHECK (sex IN (0, 1)),
age SMALLINT,
location INT,
likes INT,
score INT,
school INT DEFAULT 1,
height INT,
hometown INT[],
remark VARCHAR(255),
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (user_id)
);

dictType字典类型

字段 含义 数据类型 默认值 是否可空 约束
id 字典类型id INT UNSIGNED 主键
type 类别 varchar(50) 枚举或CHECK约束(可选)
1
2
3
4
CREATE TABLE "dictType" (
id SERIAL PRIMARY KEY,
type VARCHAR(50) NOT NULL
);

dict字典表

字段 含义 数据类型 默认值 是否可空 约束
id 字典id INT UNSIGNED 主键
type 类别 varchar(50) 枚举或CHECK约束(可选)
content 对应的值 varchar(255)
1
2
3
4
5
CREATE TABLE "dict" (
id SERIAL PRIMARY KEY,
type VARCHAR(50) NOT NULL,
content VARCHAR(255)
);

pool池子表

字段 含义 数据类型 默认值 是否可空 约束
id id INT UNSIGNED 主键
userId 用户id INT UNSIGNED
matchId 匹配人id INT UNSIGNED
sex 性别 TINYINT UNSIGNED
ifConditions 条件匹配是否开启 Boolean
status 状态(0:待匹配,1:已完成) TINYINT UNSIGNED 0
update_time 更新时间 DATETIME 用户的更新时间 默认值当前时间
create_time 创建时间 DATETIME 用户的创建时间 默认值当前时间
1
2
3
4
5
6
7
8
9
10
CREATE TABLE "pool" (
id SERIAL PRIMARY KEY,
userId INT REFERENCES "User"(id) ON DELETE CASCADE,
matchId INT REFERENCES "User"(id) ON DELETE CASCADE,
sex SMALLINT NOT NULL CHECK (sex IN (0, 1)),
ifConditions BOOLEAN,
status SMALLINT DEFAULT 0 CHECK (status IN (0, 1)),
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

对另外一方想说的话

创建:覆盖;复用

上述SQL语句中,SERIAL是PostgreSQL的一个特殊数据类型,它是一个自动递增的整数,通常用于主键字段。ON DELETE CASCADE表示当引用的记录被删除时,该记录也会自动被删除。CHECK约束用于限制列中的值必须满足特定的条件。TIMESTAMP用于存储日期和时间,CURRENT_TIMESTAMP则表示插入或更新时的当前时间。对于hometown字段使用了数组类型INT[],这在PostgreSQL中允许存储一个整数的数组。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
-- 用户表
CREATE TABLE "User" (
id SERIAL PRIMARY KEY, -- 用户ID,主键,自动递增
wechat VARCHAR(128) NOT NULL, -- 微信ID,不允许为空
nick_name VARCHAR(20) NOT NULL, -- 昵称,不允许为空
avatar VARCHAR(255) NOT NULL, -- 头像URL或路径,不允许为空
detail VARCHAR(255), -- 个性签名
background VARCHAR(255), -- 背景图URL或路径
sign_days INT, -- 连续签到天数
sex SMALLINT DEFAULT 0 CHECK (sex IN (0, 1)), -- 性别,默认为0(男),只能是0或1
age SMALLINT, -- 年龄
location INT, -- 位置信息
likes INT, -- 爱好列表
school INT, -- 所在学校
height INT, -- 身高
specialty INT, -- 特长
hometown INT, -- 省份
advance_count INT DEFAULT 1, -- 高级匹配次数,默认为1
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 创建时间,默认为当前时间
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- 更新时间,默认为当前时间
);

-- 筛选条件表
CREATE TABLE "Conditions" (
user_id INT REFERENCES "User"(id) ON DELETE CASCADE, -- 用户ID,外键,引用User表,删除级联
sex SMALLINT DEFAULT 0 CHECK (sex IN (0, 1)), -- 性别,默认为0(男),只能是0或1
age SMALLINT, -- 年龄
location INT, -- 位置
likes INT, -- 喜好
score INT, -- 成绩
school INT DEFAULT 1, -- 学校,默认为1
height INT, -- 身高
hometown INT[], -- 省份,数组类型
remark VARCHAR(255), -- 备注
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 创建时间,默认为当前时间
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 更新时间,默认为当前时间
PRIMARY KEY (user_id) -- 主键
);

-- 字典类型表
CREATE TABLE "dictType" (
id SERIAL PRIMARY KEY, -- 字典类型ID,主键,自动递增
type VARCHAR(50) NOT NULL -- 类别,不允许为空
);

-- 字典表
CREATE TABLE "dict" (
id SERIAL PRIMARY KEY, -- 字典ID,主键,自动递增
type VARCHAR(50) NOT NULL, -- 类别,不允许为空
content VARCHAR(255) -- 对应的值
);

-- 池子表
CREATE TABLE "pool" (
id SERIAL PRIMARY KEY, -- ID,主键,自动递增
userId INT REFERENCES "User"(id) ON DELETE CASCADE, -- 用户ID,外键,引用User表,删除级联
matchId INT REFERENCES "User"(id) ON DELETE CASCADE, -- 匹配人ID,外键,引用User表,删除级联
sex SMALLINT NOT NULL CHECK (sex IN (0, 1)), -- 性别,不允许为空,只能是0或1
ifConditions BOOLEAN, -- 条件匹配是否开启
status SMALLINT DEFAULT 0 CHECK (status IN (0, 1)), -- 状态,默认为0(待匹配),只能是0或1
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 更新时间,默认为当前时间
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- 创建时间,默认为当前时间
);
1
2