# 03-数据库设计文档 - **Schema**: `xlyweberp_vibe_erp_test` - **Migration 清单**: `sql/migrations/V*.sql`(由 Flyway 顺序 apply) - **生成方式**: 由 A3 `db-design-gen` 基于 `docs/01-需求清单//REQ-*.md` REQ 卡片正向设计生成(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 不对外暴露(标准列仍保留以保持结构一致)。