03-数据库设计文档
-
Schema:
xlyweberp_vibe_erp_test -
Migration 清单:
sql/migrations/V*.sql(由 Flyway 顺序 apply) -
生成方式: 由 A3
db-design-gen基于docs/01-需求清单/<module>/REQ-*.mdREQ 卡片正向设计生成(schema SSoT)。
项目标准列约定
下文每张业务表的字段清单都自动包含以下 5 个标准列(匈牙利前缀 i int / s varchar / t datetime)。渲染时由 docs-03-table-template.md 模板内置原样输出。
| 列名 | 类型 | 可空 | 主键 | 说明 |
|---|---|---|---|---|
iIncrement |
int | 否 | 是 | 整数主键 ID(自增方式由实现决定:DB AUTO_INCREMENT 或应用 / 触发器分配) |
sId |
varchar(100) | 是 | — | 业务 ID(对外暴露的字符串标识,如 UUID / 人类可读编号) |
sBrandsId |
varchar(100) | 是 | — | 品牌 ID(多租户隔离) |
sSubsidiaryId |
varchar(100) | 是 | — | 子公司 ID(组织层级隔离) |
tCreateDate |
datetime | 否 | — | 记录创建时间 |
字典 / 辅助表如有豁免,在该表业务注记里注明豁免原因。
ER 关系概览
本库围绕「用户管理(USR)」单模块设计,核心实体为用户表 usr_user,辅以 4 张支撑/关联表:
-
usr_user(用户)—— 核心表。承载登录账号、密码、用户类型、语言、单据修改权限、作废标志、最后登录时间等。 -
usr_employee(职员)—— 支撑表。提供员工名 / 员工编号 / 部门;usr_user.iEmployeeId可选外键关联(N:1,一个职员至多对应一个登录用户)。 -
usr_company(公司 / 版本)—— 支撑表。登录页「版本」下拉的数据来源;当前仅供登录时选择,不与usr_user建强外键。 -
usr_permission(权限)—— 支撑表。定义可分配的权限项,按「权限分类」组织。 -
usr_user_permission(用户权限)—— 关联表。usr_user与usr_permission的多对多授权关系(对应新增 / 修改用户界面的「权限组」勾选)。
关系:
usr_user N:1 usr_employee (ON DELETE SET NULL)
usr_user N:M usr_permission 经 usr_user_permission(两侧 ON DELETE CASCADE)
usr_company 独立支撑表(登录时选择,无外键)
表清单
-
usr_user— 用户表:登录账号与用户属性核心表 -
usr_employee— 职员表:员工名 / 部门等支撑信息 -
usr_company— 公司表:登录「版本」下拉数据来源 -
usr_permission— 权限表:可分配权限项定义 -
usr_user_permission— 用户权限关联表:用户↔权限多对多授权
usr_user — 用户表:登录账号与用户属性核心表
字段
| 字段 | 类型 | Nullable | 默认 | 业务含义 |
|---|---|---|---|---|
iIncrement |
int | 否 | — | 整数主键 ID(标准列) |
sId |
varchar(100) | 是 | — | 业务 ID(标准列) |
sBrandsId |
varchar(100) | 是 | 1111111111 |
品牌 ID,多租户隔离(标准列) |
sSubsidiaryId |
varchar(100) | 是 | 1111111111 |
子公司 ID,组织层级隔离(标准列) |
tCreateDate |
datetime | 否 | 当前时间 | 创建时间(标准列,对应「制单日期」) |
sUserName |
varchar(50) | 否 | — | 用户名,登录账号,系统内全局唯一(3-20 位字母数字下划线) |
sUserNo |
varchar(50) | 是 | — | 用户号,关联职员后可自动带出员工编号 / 姓名 |
sPassword |
varchar(100) | 否 | — | 登录密码,BCrypt 哈希存储(初始密码 666666) |
iEmployeeId |
int | 是 | — | 关联职员 ID(可选),外键 → usr_employee.iIncrement
|
sUserType |
varchar(20) | 否 | 普通用户 |
用户类型:普通用户 / 超级管理员 |
sLanguage |
varchar(20) | 否 | 中文 |
界面语言:中文 / 英文 / 繁体 【人工填写:需用户审阅】默认值与取值范围待确认 |
iCanModifyBill |
tinyint(1) | 否 | 0 |
单据修改权限:0 否 / 1 是 |
iIsVoid |
tinyint(1) | 否 | 0 |
作废 / 禁用标志:0 正常 / 1 已作废(禁用后不可登录) |
tLastLoginDate |
datetime | 是 | — | 最后登录时间,登录成功时更新 |
sCreator |
varchar(50) | 是 | — | 制单人(创建该用户的操作员) |
索引
-
uk_usr_user_username(UNIQUE): sUserName -
idx_usr_user_employee(INDEX): iEmployeeId -
idx_usr_user_type(INDEX): sUserType -
idx_usr_user_tenant(INDEX): sBrandsId, sSubsidiaryId
外键
-
fk_usr_user_employee: iEmployeeId → usr_employee.iIncrement (SET NULL)
业务注记
用户表为本模块核心实体,承载登录认证(用户名 + 密码)与用户类型 / 语言 / 单据修改权限等属性。sUserName 全局唯一;sPassword 以 BCrypt 哈希存储,初始为 666666;iIsVoid=1 表示禁用,禁止登录。可选关联职员(iEmployeeId,职员删除时置空)以带出员工名 / 部门。登录令牌 JWT 为无状态,不落库。查询接口(REQ-USR-003)按用户名 / 类型 / 作废 / 登录日期 / 制单人等条件检索,密码字段不返回。
usr_employee — 职员表:员工名 / 部门等支撑信息
字段
| 字段 | 类型 | Nullable | 默认 | 业务含义 |
|---|---|---|---|---|
iIncrement |
int | 否 | — | 整数主键 ID(标准列) |
sId |
varchar(100) | 是 | — | 业务 ID(标准列) |
sBrandsId |
varchar(100) | 是 | 1111111111 |
品牌 ID,多租户隔离(标准列) |
sSubsidiaryId |
varchar(100) | 是 | 1111111111 |
子公司 ID,组织层级隔离(标准列) |
tCreateDate |
datetime | 否 | 当前时间 | 创建时间(标准列) |
sEmployeeName |
varchar(50) | 否 | — | 职员 / 员工姓名(用户「员工名」下拉来源) |
sEmployeeNo |
varchar(50) | 是 | — | 员工编号 |
sDepartment |
varchar(100) | 是 | — | 所属部门(用户查询输出「部门」来源) |
索引
-
idx_usr_employee_name(INDEX): sEmployeeName -
idx_usr_employee_tenant(INDEX): sBrandsId, sSubsidiaryId
外键
(无)
业务注记
职员表为用户的关联支撑表,提供员工名、员工编号、部门信息。用户新增 / 修改时通过「员工名」下拉选择职员,用户查询 / 展示时按 usr_user.iEmployeeId 关联取员工名与部门。可作为字典型支撑数据维护。
usr_company — 公司表:登录「版本」下拉数据来源
字段
| 字段 | 类型 | Nullable | 默认 | 业务含义 |
|---|---|---|---|---|
iIncrement |
int | 否 | — | 整数主键 ID(标准列) |
sId |
varchar(100) | 是 | — | 业务 ID(标准列) |
sBrandsId |
varchar(100) | 是 | 1111111111 |
品牌 ID,多租户隔离(标准列) |
sSubsidiaryId |
varchar(100) | 是 | 1111111111 |
子公司 ID,组织层级隔离(标准列) |
tCreateDate |
datetime | 否 | 当前时间 | 创建时间(标准列) |
sCompanyName |
varchar(100) | 否 | — | 公司名称(登录页「版本」下拉的显示来源) |
sVersion |
varchar(50) | 是 | — | 版本 / 账套标识 【人工填写:需用户审阅】"版本"语义(账套 / 数据版本)待确认 |
索引
-
uk_usr_company_name(UNIQUE): sCompanyName
外键
(无)
业务注记
公司表为登录页「版本」下拉的数据来源(REQ-USR-004),每行代表一个可登录的公司 / 账套。当前仅用于登录时选择,不与用户表建立强外键关系。
usr_permission — 权限表:可分配权限项定义
字段
| 字段 | 类型 | Nullable | 默认 | 业务含义 |
|---|---|---|---|---|
iIncrement |
int | 否 | — | 整数主键 ID(标准列) |
sId |
varchar(100) | 是 | — | 业务 ID(标准列) |
sBrandsId |
varchar(100) | 是 | 1111111111 |
品牌 ID,多租户隔离(标准列) |
sSubsidiaryId |
varchar(100) | 是 | 1111111111 |
子公司 ID,组织层级隔离(标准列) |
tCreateDate |
datetime | 否 | 当前时间 | 创建时间(标准列) |
sPermissionName |
varchar(100) | 否 | — | 权限名称 |
sPermissionCode |
varchar(100) | 否 | — | 权限编码(程序判定用,系统内唯一) |
sPermissionCategory |
varchar(100) | 是 | — | 权限分类(新增 / 修改用户界面「权限组」的"权限分类") |
索引
-
uk_usr_permission_code(UNIQUE): sPermissionCode -
idx_usr_permission_category(INDEX): sPermissionCategory
外键
(无)
业务注记
权限表定义可分配的权限项,按「权限分类」组织(对应新增 / 修改用户界面的「权限组」网格)。sPermissionCode 全局唯一供程序判定。【人工填写:需用户审阅】权限粒度(按分类 / 按具体功能点)待确认。
usr_user_permission — 用户权限关联表:用户↔权限多对多授权
字段
| 字段 | 类型 | Nullable | 默认 | 业务含义 |
|---|---|---|---|---|
iIncrement |
int | 否 | — | 整数主键 ID(标准列) |
sId |
varchar(100) | 是 | — | 业务 ID(标准列;关联表对外不暴露,可留空) |
sBrandsId |
varchar(100) | 是 | 1111111111 |
品牌 ID,多租户隔离(标准列) |
sSubsidiaryId |
varchar(100) | 是 | 1111111111 |
子公司 ID,组织层级隔离(标准列) |
tCreateDate |
datetime | 否 | 当前时间 | 创建时间(标准列) |
iUserId |
int | 否 | — | 用户 ID,外键 → usr_user.iIncrement
|
iPermissionId |
int | 否 | — | 权限 ID,外键 → usr_permission.iIncrement
|
索引
-
uk_usr_user_permission(UNIQUE): iUserId, iPermissionId -
idx_usr_user_permission_perm(INDEX): iPermissionId
外键
-
fk_usr_up_user: iUserId → usr_user.iIncrement (CASCADE) -
fk_usr_up_permission: iPermissionId → usr_permission.iIncrement (CASCADE)
业务注记
用户↔权限多对多关联表,记录每个用户被授予的权限(对应「权限组」勾选)。(iUserId, iPermissionId) 唯一防重复授权;删除用户或权限时级联清除对应授权记录。该表为纯关联表,sId 业务 ID 不对外暴露(标准列仍保留以保持结构一致)。