103 lines
4.6 KiB
SQL
103 lines
4.6 KiB
SQL
-- =============================================================================
|
||
-- zqyy_app 数据库 Schema DDL
|
||
-- 业务应用数据库:用户管理、RBAC 权限、任务管理、审批流程
|
||
-- 所有业务表包含 site_id 字段以支持多门店隔离(Requirements 13.1)
|
||
-- =============================================================================
|
||
|
||
-- ---------------------------------------------------------------------------
|
||
-- users 表:用户账户(微信 OpenID、手机号、昵称)
|
||
-- ---------------------------------------------------------------------------
|
||
CREATE TABLE IF NOT EXISTS users (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
wx_openid TEXT UNIQUE,
|
||
mobile TEXT,
|
||
nickname TEXT,
|
||
status INT DEFAULT 1, -- 1=启用, 0=禁用
|
||
site_id BIGINT NOT NULL,
|
||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||
updated_at TIMESTAMPTZ DEFAULT NOW()
|
||
);
|
||
|
||
CREATE INDEX IF NOT EXISTS idx_users_site_id ON users (site_id);
|
||
CREATE INDEX IF NOT EXISTS idx_users_mobile ON users (mobile);
|
||
|
||
-- ---------------------------------------------------------------------------
|
||
-- roles 表:角色定义
|
||
-- ---------------------------------------------------------------------------
|
||
CREATE TABLE IF NOT EXISTS roles (
|
||
id SERIAL PRIMARY KEY,
|
||
name TEXT UNIQUE NOT NULL,
|
||
description TEXT,
|
||
site_id BIGINT NOT NULL,
|
||
created_at TIMESTAMPTZ DEFAULT NOW()
|
||
);
|
||
|
||
CREATE INDEX IF NOT EXISTS idx_roles_site_id ON roles (site_id);
|
||
|
||
-- ---------------------------------------------------------------------------
|
||
-- permissions 表:权限定义(全局,不需要 site_id)
|
||
-- ---------------------------------------------------------------------------
|
||
CREATE TABLE IF NOT EXISTS permissions (
|
||
id SERIAL PRIMARY KEY,
|
||
resource TEXT NOT NULL, -- 资源标识,如 'order', 'member'
|
||
action TEXT NOT NULL, -- 操作标识,如 'read', 'write', 'delete'
|
||
description TEXT,
|
||
UNIQUE (resource, action)
|
||
);
|
||
|
||
-- ---------------------------------------------------------------------------
|
||
-- user_roles 关联表:用户-角色多对多
|
||
-- ---------------------------------------------------------------------------
|
||
CREATE TABLE IF NOT EXISTS user_roles (
|
||
user_id BIGINT REFERENCES users(id) ON DELETE CASCADE,
|
||
role_id INT REFERENCES roles(id) ON DELETE CASCADE,
|
||
site_id BIGINT NOT NULL,
|
||
PRIMARY KEY (user_id, role_id)
|
||
);
|
||
|
||
CREATE INDEX IF NOT EXISTS idx_user_roles_site_id ON user_roles (site_id);
|
||
|
||
-- ---------------------------------------------------------------------------
|
||
-- role_permissions 关联表:角色-权限多对多
|
||
-- ---------------------------------------------------------------------------
|
||
CREATE TABLE IF NOT EXISTS role_permissions (
|
||
role_id INT REFERENCES roles(id) ON DELETE CASCADE,
|
||
permission_id INT REFERENCES permissions(id) ON DELETE CASCADE,
|
||
PRIMARY KEY (role_id, permission_id)
|
||
);
|
||
|
||
-- ---------------------------------------------------------------------------
|
||
-- tasks 表:任务管理(含审批流)
|
||
-- ---------------------------------------------------------------------------
|
||
CREATE TABLE IF NOT EXISTS tasks (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
title TEXT NOT NULL,
|
||
description TEXT,
|
||
status TEXT DEFAULT 'pending', -- pending / approved / rejected / completed
|
||
assignee_id BIGINT REFERENCES users(id),
|
||
creator_id BIGINT REFERENCES users(id),
|
||
site_id BIGINT NOT NULL,
|
||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||
updated_at TIMESTAMPTZ DEFAULT NOW()
|
||
);
|
||
|
||
CREATE INDEX IF NOT EXISTS idx_tasks_site_id ON tasks (site_id);
|
||
CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks (status);
|
||
CREATE INDEX IF NOT EXISTS idx_tasks_assignee_id ON tasks (assignee_id);
|
||
|
||
-- ---------------------------------------------------------------------------
|
||
-- approvals 表:审批记录
|
||
-- ---------------------------------------------------------------------------
|
||
CREATE TABLE IF NOT EXISTS approvals (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
task_id BIGINT REFERENCES tasks(id) ON DELETE CASCADE,
|
||
approver_id BIGINT REFERENCES users(id),
|
||
status TEXT DEFAULT 'pending', -- pending / approved / rejected
|
||
comment TEXT,
|
||
site_id BIGINT NOT NULL,
|
||
created_at TIMESTAMPTZ DEFAULT NOW()
|
||
);
|
||
|
||
CREATE INDEX IF NOT EXISTS idx_approvals_site_id ON approvals (site_id);
|
||
CREATE INDEX IF NOT EXISTS idx_approvals_task_id ON approvals (task_id);
|