数据表
1 用户表
drop table if exists app_users;
CREATE TABLE "public"."app_users" (
"id" VARCHAR PRIMARY KEY,-- 用户唯一标识 (对应 uid)
"email" VARCHAR UNIQUE,-- 用户邮箱
"phone" varchar unique,
"email_verified" BOOLEAN DEFAULT FALSE,-- 邮箱是否已验证
"updated_profile" BOOLEAN DEFAULT FALSE,-- 用户信息是否已经更新
"display_name" VARCHAR,-- 用户显示名称
"bio" TEXT,
"photo_url" VARCHAR,-- 用户头像 URL
"background_url" VARCHAR,-- 用户背景 URL
"phone_number" VARCHAR,-- 用户电话号码
"disabled" BOOLEAN DEFAULT FALSE,-- 用户是否已禁用
"birthday" TIMESTAMPTZ,-- 用户生日 (可选)
"coin" BIGINT DEFAULT 0,-- 用户金币数量
"invited_by_user_id" VARCHAR,-- 邀请人的用户 ID
"of" VARCHAR,-- 用户注册的系统
"platform" VARCHAR,-- 用户注册来源平台
"third_platform_url" VARCHAR,-- 第三方平台的 URL
"school_id" BIGINT,-- 学校 ID (可选字段)
"user_type" INT DEFAULT 0,-- 用户类型 (如 0: 普通用户, 1: 管理员等)
"password_salt" VARCHAR,-- 密码加盐 (用于存储加密的密码相关信息)
"password_hash" VARCHAR,-- 密码哈希值
provider_data JSONB DEFAULT '[]',-- 提供信息,存储为 JSON 格式
"mfa_info" JSONB DEFAULT '[]',-- 多因素认证信息,存储为 JSON 格式
"metadata" JSONB DEFAULT '{}',-- 用户元数据 (如创建时间、最后登录时间)
"user_info" JSONB DEFAULT '{}',
google_id VARCHAR,
google_info JSONB DEFAULT '{}' :: jsonb,
facebook_id VARCHAR,
facebook_info JSONB DEFAULT '{}' :: jsonb,
twitter_id VARCHAR,
twitter_info JSONB DEFAULT '{}' :: jsonb,
github_id VARCHAR,
github_info JSONB DEFAULT '{}' :: jsonb,
wechat_id VARCHAR,
wechat_info JSONB DEFAULT '{}' :: jsonb,
qq_id VARCHAR,
qq_info JSONB DEFAULT '{}' :: jsonb,
weibo_id VARCHAR,
weibo_info JSONB DEFAULT '{}' :: jsonb,
"remark" VARCHAR,-- 备注信息
"creator" VARCHAR DEFAULT '' :: CHARACTER VARYING,-- 创建人
"create_time" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,-- 创建时间
"updater" VARCHAR DEFAULT '' :: CHARACTER VARYING,-- 更新人
"update_time" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,-- 更新时间
"deleted" SMALLINT NOT NULL DEFAULT 0,-- 逻辑删除标识 (0: 未删除, 1: 已删除)
"tenant_id" BIGINT NOT NULL DEFAULT 0 -- 租户 ID (支持多租户架构)
);
-- 邮箱索引 (唯一索引已自动创建,因为字段定义为 UNIQUE)
-- 但为确保清晰,显式声明
CREATE UNIQUE INDEX idx_app_users_email ON "public"."app_users" ("email") WHERE "deleted" = 0;
-- 租户 ID 索引 (多租户环境下的查询优化)
CREATE INDEX idx_app_users_tenant_id ON "public"."app_users" ("tenant_id") WHERE "deleted" = 0;
-- 用户类型索引 (用于按用户类型筛选)
CREATE INDEX idx_app_users_user_type ON "public"."app_users" ("user_type") WHERE "deleted" = 0;
-- 邀请关系索引 (用于查询邀请关系)
CREATE INDEX idx_app_users_invited_by ON "public"."app_users" ("invited_by_user_id") WHERE "deleted" = 0;
-- 学校索引 (用于按学校筛选用户)
CREATE INDEX idx_app_users_school_id ON "public"."app_users" ("school_id") WHERE "deleted" = 0;
-- 平台索引 (用于按注册平台筛选)
CREATE INDEX idx_app_users_platform ON "public"."app_users" ("platform") WHERE "deleted" = 0;
-- 创建时间索引 (用于按时间排序或筛选)
CREATE INDEX idx_app_users_create_time ON "public"."app_users" ("create_time") WHERE "deleted" = 0;
-- 更新时间索引 (用于按更新时间排序或筛选)
CREATE INDEX idx_app_users_update_time ON "public"."app_users" ("update_time") WHERE "deleted" = 0;
-- 复合索引:租户ID + 用户类型 (常见的多条件查询)
CREATE INDEX idx_app_users_tenant_user_type ON "public"."app_users" ("tenant_id", "user_type") WHERE "deleted" = 0;
-- 金币数量索引 (用于排行榜等功能)
CREATE INDEX idx_app_users_coin ON "public"."app_users" ("coin") WHERE "deleted" = 0;
2 邮箱验证码表
用于存储邮件验证码信息,便于后续验证邮箱:
CREATE TABLE "public"."app_email_verification" (
"id" SERIAL PRIMARY KEY,
"email" VARCHAR NOT NULL, -- 验证的邮箱
"verification_code" VARCHAR NOT NULL, -- 验证码
"expire_time" TIMESTAMPTZ NOT NULL, -- 过期时间
"verified" BOOLEAN DEFAULT FALSE, -- 是否已验证
"creator" VARCHAR DEFAULT ''::character varying, -- 创建人
"create_time" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 创建时间
"updater" VARCHAR DEFAULT ''::character varying, -- 更新人
"update_time" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 更新时间
"deleted" SMALLINT NOT NULL DEFAULT 0, -- 逻辑删除标识 (0: 未删除, 1: 已删除)
"tenant_id" BIGINT NOT NULL DEFAULT 0 -- 租户 ID (支持多租户架构)
);