Skip to content

数据表 ​

1 用户表 ​

Postgres ​

sql
drop table if exists app_users;
CREATE TABLE "public"."app_users" (
	"id" VARCHAR PRIMARY KEY,-- 用户唯一标识 (对应 uid)
    username VARCHAR UNIQUE,                  -- 用户名
	"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: 普通用户, 2:高级用户)
	"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_username ON "public"."app_users" ("username") WHERE "deleted" = 0;
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;

sqlite ​

sql
-- 删除旧表
DROP TABLE IF EXISTS app_users;

-- 建表
CREATE TABLE app_users (
    id TEXT PRIMARY KEY,                      -- 用户唯一标识
    username text UNIQUE,                  -- 用户名
    email TEXT UNIQUE,                        -- 用户邮箱
    phone TEXT UNIQUE,                        -- 用户电话
    email_verified INTEGER NOT NULL DEFAULT 0,-- 邮箱是否已验证 (0=false, 1=true)
    updated_profile INTEGER NOT NULL DEFAULT 0,-- 是否更新过资料
    display_name TEXT,                        -- 显示名称
    bio TEXT,                                 -- 个人简介
    photo_url TEXT,                           -- 头像 URL
    background_url TEXT,                      -- 背景图 URL
    phone_number TEXT,                        -- 电话号码
    disabled INTEGER NOT NULL DEFAULT 0,      -- 是否禁用 (0=false,1=true)
    birthday DATETIME,                        -- 生日
    coin INTEGER NOT NULL DEFAULT 0,          -- 金币数量
    invited_by_user_id TEXT,                  -- 邀请人 ID
    of TEXT,                                  -- 注册的系统
    platform TEXT,                            -- 注册来源平台
    third_platform_url TEXT,                  -- 第三方平台 URL
    school_id INTEGER,                        -- 学校 ID
    user_type INTEGER NOT NULL DEFAULT 0,     -- 用户类型
    password_salt TEXT,                       -- 密码盐
    password_hash TEXT,                       -- 密码哈希
    provider_data TEXT NOT NULL DEFAULT '[]', -- JSON 存储
    mfa_info TEXT NOT NULL DEFAULT '[]',      -- JSON 存储
    metadata TEXT NOT NULL DEFAULT '{}',      -- JSON 存储
    user_info TEXT NOT NULL DEFAULT '{}',     -- JSON 存储
    google_id TEXT,
    google_info TEXT NOT NULL DEFAULT '{}',
    facebook_id TEXT,
    facebook_info TEXT NOT NULL DEFAULT '{}',
    twitter_id TEXT,
    twitter_info TEXT NOT NULL DEFAULT '{}',
    github_id TEXT,
    github_info TEXT NOT NULL DEFAULT '{}',
    wechat_id TEXT,
    wechat_info TEXT NOT NULL DEFAULT '{}',
    qq_id TEXT,
    qq_info TEXT NOT NULL DEFAULT '{}',
    weibo_id TEXT,
    weibo_info TEXT NOT NULL DEFAULT '{}',
    remark TEXT,                              -- 备注
    creator TEXT NOT NULL DEFAULT '',         -- 创建人
    create_time DATETIME NOT NULL DEFAULT (CURRENT_TIMESTAMP), -- 创建时间
    updater TEXT NOT NULL DEFAULT '',         -- 更新人
    update_time DATETIME NOT NULL DEFAULT (CURRENT_TIMESTAMP), -- 更新时间
    deleted INTEGER NOT NULL DEFAULT 0,       -- 逻辑删除标志
    tenant_id INTEGER NOT NULL DEFAULT 0      -- 租户 ID
);

-- 索引(仅对 deleted = 0 的行生效)
CREATE UNIQUE INDEX idx_app_users_username
    ON app_users(username)
    WHERE deleted = 0;

CREATE UNIQUE INDEX idx_app_users_email
    ON app_users(email)
    WHERE deleted = 0;

CREATE INDEX idx_app_users_tenant_id
    ON app_users(tenant_id)
    WHERE deleted = 0;

CREATE INDEX idx_app_users_user_type
    ON app_users(user_type)
    WHERE deleted = 0;

CREATE INDEX idx_app_users_invited_by
    ON app_users(invited_by_user_id)
    WHERE deleted = 0;

CREATE INDEX idx_app_users_school_id
    ON app_users(school_id)
    WHERE deleted = 0;

CREATE INDEX idx_app_users_platform
    ON app_users(platform)
    WHERE deleted = 0;

CREATE INDEX idx_app_users_create_time
    ON app_users(create_time)
    WHERE deleted = 0;

CREATE INDEX idx_app_users_update_time
    ON app_users(update_time)
    WHERE deleted = 0;

CREATE INDEX idx_app_users_tenant_user_type
    ON app_users(tenant_id, user_type)
    WHERE deleted = 0;

CREATE INDEX idx_app_users_coin
    ON app_users(coin)
    WHERE deleted = 0;

2 邮箱验证码表 ​

用于存储邮件验证码信息,便于后续验证邮箱:

sql
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 (支持多租户架构)
);

MIT Licensed