Files
workspace/code/fms/新数据库结构.md
T
2026-07-21 22:30:33 +08:00

164 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# FMS 新数据库结构
## 设计约定
- 表名和字段名沿用旧系统的 `b_` 风格。
- 所有表的 `b_id` 使用 `bigint` 雪花 ID,返回前端时序列化为字符串。
- `b_module.b_code` 是可修改的模块编码,使用小写字母、数字和下划线,例如 `m_biz`。
- 布尔字段使用 `int`:`1` 表示是,`0` 表示否,并限制只能写入 `0` 或 `1`。
- `b_xh` 表示显示顺序,数值越小越靠前。
- 当前按机构使用独立数据库,表中不保存机构编号。
- 模块管理界面只区分目录和普通模块;普通模块配置路由时保存为 `page`,未配置路由时保存为 `data`。
## 模块管理
### 表关系
```text
b_module
|-- parent_id --> b_module
|-- 1:N --------> b_module_field
|-- 1:N --------> b_user_module
|-- 1:N --------> b_module_power ---- 1:N ----> b_user_power
b_module / b_module_field / b_module_power
|-- b_i18n --> b_i18n.b_key
```
### `dbo.b_module`
保存目录、页面和数据模块。
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `b_id` | `bigint` | 不可变雪花 ID 主键 |
| `b_code` | `varchar(50)` | 可修改的唯一模块编码,例如 `m_biz` |
| `b_parent_id` | `bigint` | 上级模块 ID,根节点为空 |
| `b_name` | `nvarchar(100)` | 默认中文名称 |
| `b_i18n` | `varchar(150)` | 多语言键 |
| `b_type` | `varchar(20)` | `directory`、`page` 或 `data` |
| `b_route` | `varchar(200)` | 页面路由 |
| `b_viewtable` | `varchar(128)` | 查询表或视图 |
| `b_savetable` | `varchar(128)` | 保存目标表 |
| `b_keyfield` | `varchar(50)` | 主键字段 |
| `b_orderfield` | `varchar(500)` | 排序条件,例如 `b_xh ASC, b_id DESC` |
| `b_canmenu` | `int` | 是否显示在菜单,默认 `0` |
| `b_canuse` | `int` | 是否启用,默认 `1` |
| `b_xh` | `int` | 同级显示顺序 |
约束:
- `b_parent_id` 外键引用 `b_module.b_id`。
- `b_code` 唯一,格式为 `^[a-z][a-z0-9_]{1,49}$`。
- `b_route` 非空时唯一。
- 目录不能配置路由和数据表;数据模块不能显示在菜单中。
- 表名、视图名和字段名必须由后端校验,不能直接拼接 SQL。
### `dbo.b_module_field`
保存模块的标准字段配置。
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `b_id` | `bigint` | 雪花 ID 主键 |
| `b_module_id` | `bigint` | 所属模块 ID |
| `b_field` | `varchar(50)` | 数据库字段名 |
| `b_name` | `nvarchar(100)` | 默认中文名称 |
| `b_i18n` | `varchar(150)` | 多语言键 |
| `b_type` | `varchar(20)` | `string`、`text`、`number`、`select`、`date`、`boolean` |
| `b_canlist` | `int` | 是否显示在列表 |
| `b_canform` | `int` | 是否显示在表单 |
| `b_must` | `int` | 是否必填 |
| `b_canquery` | `int` | 是否作为查询条件 |
| `b_readonly` | `int` | 是否只读 |
| `b_width` | `int` | 列表列宽 |
| `b_value` | `nvarchar(500)` | 新增时的默认值 |
| `b_xh` | `int` | 显示顺序 |
| `b_canuse` | `int` | 是否启用 |
约束:
- `b_module_id` 外键引用 `b_module.b_id`。
- `(b_module_id, b_field)` 唯一。
- `b_canform = 0` 时,`b_must` 必须为 `0`。
- `select` 的选项来源后续单独设计。
### `dbo.b_module_power`
定义模块内可以授权的按钮操作。
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `b_id` | `bigint` | 雪花 ID 主键 |
| `b_module_id` | `bigint` | 所属模块 ID |
| `b_code` | `varchar(50)` | 操作编码,例如 `create`、`update`、`delete` |
| `b_name` | `nvarchar(100)` | 操作名称 |
| `b_i18n` | `varchar(150)` | 多语言键 |
| `b_xh` | `int` | 显示顺序 |
| `b_canuse` | `int` | 是否启用 |
约束:
- `b_module_id` 外键引用 `b_module.b_id`。
- `(b_module_id, b_code)` 唯一。
- 模块使用权限不在本表定义。
### `dbo.b_user_module`
控制用户能否进入和使用模块。
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `b_id` | `bigint` | 雪花 ID 主键 |
| `b_user_id` | `bigint` | 用户雪花 ID |
| `b_module_id` | `bigint` | 模块 ID |
| `b_inputuser_id` | `bigint` | 授权人雪花 ID |
| `b_inputdatetime` | `datetime` | 授权时间 |
约束:
- `b_module_id` 外键引用 `b_module.b_id`。
- `(b_user_id, b_module_id)` 唯一。
- 目录不单独授权;拥有下级模块时自动显示上级目录。
### `dbo.b_user_power`
保存用户拥有的操作权限。
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `b_id` | `bigint` | 雪花 ID 主键 |
| `b_user_id` | `bigint` | 用户雪花 ID |
| `b_power_id` | `bigint` | `b_module_power.b_id` |
| `b_inputuser_id` | `bigint` | 授权人雪花 ID |
| `b_inputdatetime` | `datetime` | 授权时间 |
约束:
- `b_power_id` 外键引用 `b_module_power.b_id`。
- `(b_user_id, b_power_id)` 唯一。
### `dbo.b_i18n`
统一保存菜单、模块、权限、字段、按钮、提示和校验信息等界面文案;业务对象只绑定稳定的 `b_key`。
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `b_id` | `bigint` | 雪花 ID 主键 |
| `b_key` | `varchar(150)` | 多语言键 |
| `b_locale` | `varchar(20)` | 语言编码,例如 `zh-CN` |
| `b_value` | `nvarchar(500)` | 翻译文本 |
| `b_inputuser_id` | `bigint` | 创建人雪花 ID |
| `b_inputdatetime` | `datetime` | 创建时间 |
| `b_updateuser_id` | `bigint` | 修改人雪花 ID |
| `b_updatedatetime` | `datetime` | 修改时间 |
约束:`(b_key, b_locale)` 唯一。
### 权限规则
1. `b_user_module` 决定用户能否看到、进入和调用模块。
2. `b_user_power` 决定用户进入模块后可以执行哪些按钮操作。
3. 操作权限必须在拥有模块权限时才生效。
4. 当前阶段由前端负责页面进入控制和按钮禁用,后端权限校验后续单独实施。