syz/store/migrations/0001_base.up.sql

66 lines
2.4 KiB
SQL

-- 用户状态
CREATE TYPE user_status AS ENUM ('normal', 'inactivate', 'banned', 'deleted');
COMMENT ON TYPE user_status IS '用户状态枚举类型,包括正常、未激活、封禁和删除';
-- 账户类型
CREATE TYPE account_type AS ENUM ('wechat', 'dingtalk');
COMMENT ON TYPE account_type IS '账户类型枚举类型,包括微信和钉钉';
-- 用户基础表
CREATE TABLE user_base (
id SERIAL PRIMARY KEY,
username TEXT NOT NULL UNIQUE,
email TEXT UNIQUE,
phone TEXT UNIQUE,
avatar TEXT,
bio TEXT,
nickname TEXT,
password_hash TEXT NOT NULL,
status user_status NOT NULL DEFAULT 'normal',
created_at BIGINT NOT NULL DEFAULT EXTRACT(EPOCH FROM NOW()),
updated_at BIGINT NOT NULL DEFAULT EXTRACT(EPOCH FROM NOW())
);
COMMENT ON COLUMN user_base.id IS '用户ID';
COMMENT ON COLUMN user_base.username IS '用户姓名';
COMMENT ON COLUMN user_base.email IS '用户邮箱';
COMMENT ON COLUMN user_base.phone IS '用户手机号';
COMMENT ON COLUMN user_base.avatar IS '用户头像';
COMMENT ON COLUMN user_base.bio IS '用户简介';
COMMENT ON COLUMN user_base.nickname IS '用户昵称';
COMMENT ON COLUMN user_base.password_hash IS '用户密码';
COMMENT ON COLUMN user_base.status IS '用户状态';
COMMENT ON COLUMN user_base.created_at IS '创建时间';
COMMENT ON COLUMN user_base.updated_at IS '更新时间';
-- 用户账户表
CREATE TABLE user_account (
user_id INTEGER NOT NULL,
type account_type NOT NULL,
value TEXT NOT NULL,
created_at BIGINT NOT NULL DEFAULT EXTRACT(EPOCH FROM NOW()),
updated_at BIGINT NOT NULL DEFAULT EXTRACT(EPOCH FROM NOW()),
UNIQUE (user_id, type)
);
COMMENT ON COLUMN user_account.user_id IS '用户ID';
COMMENT ON COLUMN user_account.type IS '账户类型';
COMMENT ON COLUMN user_account.value IS '设置值';
COMMENT ON COLUMN user_account.created_at IS '创建时间';
COMMENT ON COLUMN user_account.updated_at IS '更新时间';
-- 用户设置表
CREATE TABLE user_setting (
user_id INTEGER NOT NULL,
key TEXT NOT NULL,
value TEXT NOT NULL,
created_at BIGINT NOT NULL DEFAULT EXTRACT(EPOCH FROM NOW()),
updated_at BIGINT NOT NULL DEFAULT EXTRACT(EPOCH FROM NOW()),
UNIQUE (user_id, key)
);
COMMENT ON COLUMN user_setting.user_id IS '用户ID';
COMMENT ON COLUMN user_setting.key IS '设置项';
COMMENT ON COLUMN user_setting.value IS '设置值';
COMMENT ON COLUMN user_setting.created_at IS '创建时间';
COMMENT ON COLUMN user_setting.updated_at IS '更新时间';