20260821230656
This commit is contained in:
1 parent
2e5d532f23
commit
c43b4c8364
144 files changed
+7665
-242
No files matched your search
+71
-60
@@ -15,7 +15,7 @@
|
||||
|
||||
其余约定:
|
||||
|
||||
- 内部主键 `b_id bigint identity(1, 1)`,跨环境稳定标识使用 `b_code`(参考旧系统)。
|
||||
- 内部主键 `b_id bigint` 由应用层雪花算法生成(全局唯一、带时间序,配置跨系统导出/导入时引用原样保留、无需重映射);跨环境稳定标识使用 `b_code`(参考旧系统)。
|
||||
- 全系统不建立物理外键;关联字段保留索引,引用完整性、跨模块一致性、停用与删除保护统一由服务层维护。
|
||||
- 布尔语义使用 `int`(0/1),与旧系统 `s_module` 风格一致。
|
||||
- 时间统一使用 UTC:字段类型为 `datetime2`,默认 `sysutcdatetime()`;前端按用户时区转换显示。
|
||||
@@ -55,7 +55,7 @@
|
||||
|
||||
```sql
|
||||
create table s_module (
|
||||
b_id bigint identity(1, 1) not null, -- 内部主键
|
||||
b_id bigint not null, -- 雪花主键(应用层生成,全局唯一)
|
||||
b_code varchar(50) not null, -- 模块编码(全局唯一)
|
||||
b_parent_id bigint null, -- 父模块(配置树位置)
|
||||
b_name nvarchar(100) not null, -- 模块名称
|
||||
@@ -83,7 +83,7 @@ create table s_module (
|
||||
or (b_module_type = 'query' and b_viewtable is not null and b_savetable is null and b_delete_policy is null)
|
||||
),
|
||||
constraint ck_s_module_parent check (b_parent_id is null or b_parent_id <> b_id),
|
||||
constraint fk_s_module_parent foreign key (b_parent_id) references s_module (b_id)
|
||||
-- constraint fk_s_module_parent foreign key (b_parent_id) references s_module (b_id)
|
||||
);
|
||||
|
||||
create index ix_s_module_parent on s_module (b_parent_id, b_xh, b_canuse, b_id);
|
||||
@@ -116,7 +116,7 @@ hard 临时记录:校验权限后直接物理删除
|
||||
|
||||
```sql
|
||||
create table s_field (
|
||||
b_id bigint identity(1, 1) not null, -- 内部主键
|
||||
b_id bigint not null, -- 雪花主键(应用层生成,全局唯一)
|
||||
b_module_id bigint not null, -- 所属数据模块
|
||||
b_field varchar(50) not null, -- 物理列名(与真实表列一致)
|
||||
b_name nvarchar(100) not null, -- 字段名称
|
||||
@@ -139,7 +139,7 @@ create table s_field (
|
||||
constraint pk_s_field primary key (b_id),
|
||||
constraint ux_s_field_module_field unique (b_module_id, b_field),
|
||||
constraint ux_s_field_module_id unique (b_module_id, b_id),
|
||||
constraint fk_s_field_module foreign key (b_module_id) references s_module (b_id),
|
||||
-- constraint fk_s_field_module foreign key (b_module_id) references s_module (b_id),
|
||||
constraint ck_s_field_type check (b_type in ('input', 'textarea', 'number', 'money', 'date', 'datetime', 'checkbox', 'select', 'selectId')),
|
||||
constraint ck_s_field_dbtype check (b_dbtype in ('varchar', 'nvarchar', 'char', 'nchar', 'int', 'bigint', 'smallint', 'tinyint', 'decimal', 'numeric', 'float', 'real', 'date', 'datetime', 'datetime2', 'bit', 'text', 'ntext', 'uniqueidentifier')),
|
||||
constraint ck_s_field_writemode check (b_writemode in ('direct', 'createOnly', 'readOnly', 'computed', 'system'))
|
||||
@@ -187,7 +187,7 @@ selectId 关联模块选择器,保存目标记录 ID
|
||||
|
||||
```sql
|
||||
create table s_field_group (
|
||||
b_id bigint identity(1, 1) not null, -- 内部主键
|
||||
b_id bigint not null, -- 雪花主键(应用层生成,全局唯一)
|
||||
b_module_id bigint not null, -- 所属数据模块
|
||||
b_parent_id bigint null, -- 父分组(分组树)
|
||||
b_title nvarchar(100) not null, -- 分组标题
|
||||
@@ -197,8 +197,8 @@ create table s_field_group (
|
||||
constraint pk_s_field_group primary key (b_id),
|
||||
constraint ux_s_field_group_module_id unique (b_module_id, b_id),
|
||||
constraint ck_s_field_group_parent check (b_parent_id is null or b_parent_id <> b_id),
|
||||
constraint fk_s_field_group_module foreign key (b_module_id) references s_module (b_id),
|
||||
constraint fk_s_field_group_parent foreign key (b_module_id, b_parent_id) references s_field_group (b_module_id, b_id)
|
||||
-- constraint fk_s_field_group_module foreign key (b_module_id) references s_module (b_id),
|
||||
-- constraint fk_s_field_group_parent foreign key (b_module_id, b_parent_id) references s_field_group (b_module_id, b_id)
|
||||
);
|
||||
|
||||
create index ix_s_field_group_module on s_field_group (b_module_id, b_xh, b_canuse);
|
||||
@@ -210,7 +210,7 @@ create index ix_s_field_group_module on s_field_group (b_module_id, b_xh, b_canu
|
||||
|
||||
```sql
|
||||
create table s_field_view (
|
||||
b_id bigint identity(1, 1) not null,
|
||||
b_id bigint not null,
|
||||
b_module_id bigint not null, -- 所属数据模块(与字段、分组一致)
|
||||
b_field_id bigint not null, -- 字段
|
||||
b_group_id bigint null, -- 列表分组
|
||||
@@ -220,9 +220,9 @@ create table s_field_view (
|
||||
b_width int null, -- 列宽(px)
|
||||
constraint pk_s_field_view primary key (b_id),
|
||||
constraint ux_s_field_view_field unique (b_module_id, b_field_id),
|
||||
constraint fk_s_field_view_module foreign key (b_module_id) references s_module (b_id),
|
||||
constraint fk_s_field_view_field foreign key (b_module_id, b_field_id) references s_field (b_module_id, b_id),
|
||||
constraint fk_s_field_view_group foreign key (b_module_id, b_group_id) references s_field_group (b_module_id, b_id)
|
||||
-- constraint fk_s_field_view_module foreign key (b_module_id) references s_module (b_id),
|
||||
-- constraint fk_s_field_view_field foreign key (b_module_id, b_field_id) references s_field (b_module_id, b_id),
|
||||
-- constraint fk_s_field_view_group foreign key (b_module_id, b_group_id) references s_field_group (b_module_id, b_id)
|
||||
);
|
||||
|
||||
create index ix_s_field_view_order on s_field_view (b_xh, b_id);
|
||||
@@ -234,7 +234,7 @@ create index ix_s_field_view_order on s_field_view (b_xh, b_id);
|
||||
|
||||
```sql
|
||||
create table s_field_edit (
|
||||
b_id bigint identity(1, 1) not null,
|
||||
b_id bigint not null,
|
||||
b_module_id bigint not null, -- 所属数据模块(与字段、分组一致)
|
||||
b_field_id bigint not null, -- 字段
|
||||
b_group_id bigint null, -- 表单分组
|
||||
@@ -245,9 +245,9 @@ create table s_field_edit (
|
||||
b_xh int not null default 0, -- 表单排序
|
||||
constraint pk_s_field_edit primary key (b_id),
|
||||
constraint ux_s_field_edit_field unique (b_module_id, b_field_id),
|
||||
constraint fk_s_field_edit_module foreign key (b_module_id) references s_module (b_id),
|
||||
constraint fk_s_field_edit_field foreign key (b_module_id, b_field_id) references s_field (b_module_id, b_id),
|
||||
constraint fk_s_field_edit_group foreign key (b_module_id, b_group_id) references s_field_group (b_module_id, b_id)
|
||||
-- constraint fk_s_field_edit_module foreign key (b_module_id) references s_module (b_id),
|
||||
-- constraint fk_s_field_edit_field foreign key (b_module_id, b_field_id) references s_field (b_module_id, b_id),
|
||||
-- constraint fk_s_field_edit_group foreign key (b_module_id, b_group_id) references s_field_group (b_module_id, b_id)
|
||||
);
|
||||
|
||||
create index ix_s_field_edit_order on s_field_edit (b_xh, b_id);
|
||||
@@ -261,7 +261,7 @@ create index ix_s_field_edit_order on s_field_edit (b_xh, b_id);
|
||||
|
||||
```sql
|
||||
create table s_field_query (
|
||||
b_id bigint identity(1, 1) not null,
|
||||
b_id bigint not null,
|
||||
b_module_id bigint not null, -- 查询所属模块
|
||||
b_field_module_id bigint not null, -- 条件字段所属模块
|
||||
b_field_id bigint not null, -- 条件字段
|
||||
@@ -274,8 +274,8 @@ create table s_field_query (
|
||||
b_xh int not null default 0, -- 查询条件排序
|
||||
constraint pk_s_field_query primary key (b_id),
|
||||
constraint ux_s_field_query_condition unique (b_module_id, b_field_module_id, b_field_id, b_relation_id, b_operator, b_condition_no),
|
||||
constraint fk_s_field_query_module foreign key (b_module_id) references s_module (b_id),
|
||||
constraint fk_s_field_query_field foreign key (b_field_module_id, b_field_id) references s_field (b_module_id, b_id)
|
||||
-- constraint fk_s_field_query_module foreign key (b_module_id) references s_module (b_id),
|
||||
-- constraint fk_s_field_query_field foreign key (b_field_module_id, b_field_id) references s_field (b_module_id, b_id)
|
||||
);
|
||||
|
||||
create index ix_s_field_query_order on s_field_query (b_canuse, b_xh, b_id);
|
||||
@@ -289,7 +289,7 @@ create index ix_s_field_query_order on s_field_query (b_canuse, b_xh, b_id);
|
||||
|
||||
```sql
|
||||
create table s_relation (
|
||||
b_id bigint identity(1, 1) not null, -- 内部主键
|
||||
b_id bigint not null, -- 雪花主键(应用层生成,全局唯一)
|
||||
b_code varchar(50) not null, -- 跨环境稳定关系编码
|
||||
b_module_id bigint not null, -- 关系端 A 模块
|
||||
b_target_module_id bigint not null, -- 关系端 B 模块
|
||||
@@ -309,15 +309,15 @@ create table s_relation (
|
||||
b_xh int not null default 0, -- 排序号
|
||||
constraint pk_s_relation primary key (b_id),
|
||||
constraint ux_s_relation_code unique (b_code),
|
||||
constraint fk_s_relation_module foreign key (b_module_id) references s_module (b_id),
|
||||
constraint fk_s_relation_target_module foreign key (b_target_module_id) references s_module (b_id),
|
||||
constraint fk_s_relation_module_field foreign key (b_module_id, b_module_field_id) references s_field (b_module_id, b_id),
|
||||
constraint fk_s_relation_target_field foreign key (b_target_module_id, b_target_field_id) references s_field (b_module_id, b_id),
|
||||
constraint fk_s_relation_junction_module foreign key (b_junction_module_id) references s_module (b_id),
|
||||
constraint fk_s_relation_junction_module_field foreign key (b_junction_module_id, b_junction_module_field_id) references s_field (b_module_id, b_id),
|
||||
constraint fk_s_relation_junction_target_field foreign key (b_junction_module_id, b_junction_target_field_id) references s_field (b_module_id, b_id),
|
||||
constraint fk_s_relation_order_module foreign key (b_order_module_id) references s_module (b_id),
|
||||
constraint fk_s_relation_order_field foreign key (b_order_module_id, b_order_field_id) references s_field (b_module_id, b_id),
|
||||
-- constraint fk_s_relation_module foreign key (b_module_id) references s_module (b_id),
|
||||
-- constraint fk_s_relation_target_module foreign key (b_target_module_id) references s_module (b_id),
|
||||
-- constraint fk_s_relation_module_field foreign key (b_module_id, b_module_field_id) references s_field (b_module_id, b_id),
|
||||
-- constraint fk_s_relation_target_field foreign key (b_target_module_id, b_target_field_id) references s_field (b_module_id, b_id),
|
||||
-- constraint fk_s_relation_junction_module foreign key (b_junction_module_id) references s_module (b_id),
|
||||
-- constraint fk_s_relation_junction_module_field foreign key (b_junction_module_id, b_junction_module_field_id) references s_field (b_module_id, b_id),
|
||||
-- constraint fk_s_relation_junction_target_field foreign key (b_junction_module_id, b_junction_target_field_id) references s_field (b_module_id, b_id),
|
||||
-- constraint fk_s_relation_order_module foreign key (b_order_module_id) references s_module (b_id),
|
||||
-- constraint fk_s_relation_order_field foreign key (b_order_module_id, b_order_field_id) references s_field (b_module_id, b_id),
|
||||
constraint ux_s_relation_key unique (b_module_id, b_target_module_id, b_module_field_id, b_target_field_id),
|
||||
constraint ck_s_relation_self_fields check (b_module_id <> b_target_module_id or b_module_field_id <> b_target_field_id),
|
||||
constraint ck_s_relation_type check (b_relation_type in ('one-to-one', 'one-to-many', 'many-to-one', 'many-to-many')),
|
||||
@@ -341,8 +341,7 @@ create table s_relation (
|
||||
|
||||
create index ix_s_relation_target on s_relation (b_target_module_id);
|
||||
|
||||
alter table s_field_query add constraint fk_s_field_query_relation
|
||||
foreign key (b_relation_id) references s_relation (b_id);
|
||||
-- 不建物理外键:s_field_query.b_relation_id -> s_relation.b_id 为逻辑外键,由服务层校验
|
||||
```
|
||||
|
||||
关系配置必须满足以下规则:
|
||||
@@ -363,7 +362,7 @@ alter table s_field_query add constraint fk_s_field_query_relation
|
||||
|
||||
```sql
|
||||
create table s_menu (
|
||||
b_id bigint identity(1, 1) not null, -- 内部主键
|
||||
b_id bigint not null, -- 雪花主键(应用层生成,全局唯一)
|
||||
b_parent_id bigint null, -- 父菜单(导航树自引用)
|
||||
b_code varchar(50) not null, -- 菜单编码
|
||||
b_name nvarchar(100) not null, -- 菜单名称
|
||||
@@ -378,8 +377,8 @@ create table s_menu (
|
||||
constraint pk_s_menu primary key (b_id),
|
||||
constraint ux_s_menu_code unique (b_code),
|
||||
constraint ck_s_menu_parent check (b_parent_id is null or b_parent_id <> b_id),
|
||||
constraint fk_s_menu_parent foreign key (b_parent_id) references s_menu (b_id),
|
||||
constraint fk_s_menu_module foreign key (b_module_id) references s_module (b_id)
|
||||
-- constraint fk_s_menu_parent foreign key (b_parent_id) references s_menu (b_id),
|
||||
-- constraint fk_s_menu_module foreign key (b_module_id) references s_module (b_id)
|
||||
);
|
||||
|
||||
create index ix_s_menu_parent on s_menu (b_parent_id, b_xh, b_canuse);
|
||||
@@ -398,7 +397,7 @@ create index ix_s_menu_module on s_menu (b_module_id);
|
||||
|
||||
```sql
|
||||
create table s_autocode (
|
||||
b_id bigint identity(1, 1) not null, -- 内部主键
|
||||
b_id bigint not null, -- 雪花主键(应用层生成,全局唯一)
|
||||
b_module_id bigint not null, -- 所属数据模块
|
||||
b_field_id bigint not null, -- 目标字段
|
||||
b_prefix nvarchar(100) not null default '', -- 前缀
|
||||
@@ -412,8 +411,8 @@ create table s_autocode (
|
||||
b_canuse int not null default 1, -- 是否启用
|
||||
constraint pk_s_autocode primary key (b_id),
|
||||
constraint ux_s_autocode_module_field unique (b_module_id, b_field_id),
|
||||
constraint fk_s_autocode_module foreign key (b_module_id) references s_module (b_id),
|
||||
constraint fk_s_autocode_field foreign key (b_module_id, b_field_id) references s_field (b_module_id, b_id),
|
||||
-- constraint fk_s_autocode_module foreign key (b_module_id) references s_module (b_id),
|
||||
-- constraint fk_s_autocode_field foreign key (b_module_id, b_field_id) references s_field (b_module_id, b_id),
|
||||
constraint ck_s_autocode_resettype check (b_resettype in ('none', 'day', 'month', 'year')),
|
||||
constraint ck_s_autocode_values check (b_seqwidth > 0 and b_startvalue >= 0 and b_currentvalue >= 0)
|
||||
);
|
||||
@@ -425,7 +424,7 @@ create table s_autocode (
|
||||
|
||||
```sql
|
||||
create table s_role (
|
||||
b_id bigint identity(1, 1) not null, -- 内部主键
|
||||
b_id bigint not null, -- 雪花主键(应用层生成,全局唯一)
|
||||
b_code varchar(50) not null, -- 角色编码
|
||||
b_name nvarchar(100) not null, -- 角色名称
|
||||
b_i18n varchar(150) null, -- 显示名多语言 key
|
||||
@@ -447,14 +446,14 @@ create table s_role (
|
||||
|
||||
```sql
|
||||
create table s_user_role (
|
||||
b_id bigint identity(1, 1) not null, -- 内部主键
|
||||
b_id bigint not null, -- 雪花主键(应用层生成,全局唯一)
|
||||
b_user_id bigint not null, -- 用户(逻辑外键,当前身份系统)
|
||||
b_role_id bigint not null, -- 角色
|
||||
b_canuse int not null default 1, -- 是否启用该关系
|
||||
b_inputdatetime datetime2 null default sysutcdatetime(),
|
||||
constraint pk_s_user_role primary key (b_id),
|
||||
constraint ux_s_user_role unique (b_user_id, b_role_id),
|
||||
constraint fk_s_user_role_role foreign key (b_role_id) references s_role (b_id)
|
||||
-- constraint fk_s_user_role_role foreign key (b_role_id) references s_role (b_id)
|
||||
);
|
||||
|
||||
create index ix_s_user_role_role on s_user_role (b_role_id, b_canuse);
|
||||
@@ -464,7 +463,7 @@ create index ix_s_user_role_role on s_user_role (b_role_id, b_canuse);
|
||||
|
||||
```sql
|
||||
create table s_power (
|
||||
b_id bigint identity(1, 1) not null, -- 内部主键
|
||||
b_id bigint not null, -- 雪花主键(应用层生成,全局唯一)
|
||||
b_code varchar(50) not null, -- 权限编码(如 booking.confirm)
|
||||
b_name nvarchar(100) not null, -- 权限名称
|
||||
b_i18n varchar(150) null, -- 显示名多语言 key
|
||||
@@ -477,8 +476,8 @@ create table s_power (
|
||||
b_xh int not null default 0, -- 排序号
|
||||
constraint pk_s_power primary key (b_id),
|
||||
constraint ux_s_power_code unique (b_code),
|
||||
constraint fk_s_power_module foreign key (b_module_id) references s_module (b_id),
|
||||
constraint fk_s_power_field foreign key (b_module_id, b_field_id) references s_field (b_module_id, b_id),
|
||||
-- constraint fk_s_power_module foreign key (b_module_id) references s_module (b_id),
|
||||
-- constraint fk_s_power_field foreign key (b_module_id, b_field_id) references s_field (b_module_id, b_id),
|
||||
constraint ck_s_power_type check (b_power_type in ('menu', 'module', 'action', 'field')),
|
||||
constraint ck_s_power_shape check (
|
||||
(b_power_type = 'menu' and b_resource is not null and b_module_id is null and b_field_id is null and b_operation = 'access')
|
||||
@@ -497,7 +496,7 @@ create index ix_s_power_resource on s_power (b_power_type, b_resource, b_canuse)
|
||||
|
||||
```sql
|
||||
create table s_role_power (
|
||||
b_id bigint identity(1, 1) not null, -- 内部主键
|
||||
b_id bigint not null, -- 雪花主键(应用层生成,全局唯一)
|
||||
b_role_id bigint not null, -- 角色
|
||||
b_power_id bigint not null, -- 权限点
|
||||
b_effect varchar(10) not null default 'allow', -- allow/deny
|
||||
@@ -505,8 +504,8 @@ create table s_role_power (
|
||||
b_inputdatetime datetime2 null default sysutcdatetime(),
|
||||
constraint pk_s_role_power primary key (b_id),
|
||||
constraint ux_s_role_power unique (b_role_id, b_power_id),
|
||||
constraint fk_s_role_power_role foreign key (b_role_id) references s_role (b_id),
|
||||
constraint fk_s_role_power_power foreign key (b_power_id) references s_power (b_id),
|
||||
-- constraint fk_s_role_power_role foreign key (b_role_id) references s_role (b_id),
|
||||
-- constraint fk_s_role_power_power foreign key (b_power_id) references s_power (b_id),
|
||||
constraint ck_s_role_power_effect check (b_effect in ('allow', 'deny'))
|
||||
);
|
||||
|
||||
@@ -519,7 +518,7 @@ create index ix_s_role_power_power on s_role_power (b_power_id, b_canuse);
|
||||
|
||||
```sql
|
||||
create table s_role_scope (
|
||||
b_id bigint identity(1, 1) not null,
|
||||
b_id bigint not null,
|
||||
b_role_id bigint not null, -- 角色
|
||||
b_module_id bigint not null, -- 数据模块
|
||||
b_operation varchar(20) not null, -- read/update/delete/export
|
||||
@@ -531,9 +530,9 @@ create table s_role_scope (
|
||||
b_inputdatetime datetime2 null default sysutcdatetime(),
|
||||
constraint pk_s_role_scope primary key (b_id),
|
||||
constraint ux_s_role_scope unique (b_role_id, b_module_id, b_operation, b_scope_type, b_scope_field_id, b_scope_no),
|
||||
constraint fk_s_role_scope_role foreign key (b_role_id) references s_role (b_id),
|
||||
constraint fk_s_role_scope_module foreign key (b_module_id) references s_module (b_id),
|
||||
constraint fk_s_role_scope_field foreign key (b_module_id, b_scope_field_id) references s_field (b_module_id, b_id),
|
||||
-- constraint fk_s_role_scope_role foreign key (b_role_id) references s_role (b_id),
|
||||
-- constraint fk_s_role_scope_module foreign key (b_module_id) references s_module (b_id),
|
||||
-- constraint fk_s_role_scope_field foreign key (b_module_id, b_scope_field_id) references s_field (b_module_id, b_id),
|
||||
constraint ck_s_role_scope_operation check (b_operation in ('read', 'update', 'delete', 'export')),
|
||||
constraint ck_s_role_scope_type check (b_scope_type in ('all', 'creator', 'owner', 'department', 'department-tree', 'custom')),
|
||||
constraint ck_s_role_scope_no check (b_scope_no > 0),
|
||||
@@ -562,7 +561,7 @@ create index ix_s_role_scope_role on s_role_scope (b_role_id, b_module_id, b_ope
|
||||
|
||||
```sql
|
||||
create table s_i18n (
|
||||
b_id bigint identity(1, 1) not null, -- 内部主键
|
||||
b_id bigint not null, -- 雪花主键(应用层生成,全局唯一)
|
||||
b_key varchar(150) not null, -- 资源 key(如 booking.name)
|
||||
b_locale varchar(20) not null, -- 语言区域(如 zh-CN/en-US)
|
||||
b_value nvarchar(500) not null, -- 该语言下的显示文本
|
||||
@@ -581,8 +580,7 @@ create index ix_s_i18n_locale on s_i18n (b_locale, b_canuse);
|
||||
|
||||
```sql
|
||||
create table s_log_technical (
|
||||
b_id bigint identity(1, 1) not null, -- 内部主键
|
||||
b_org_id varchar(50) null, -- 租户/组织标识(日志来源)
|
||||
b_id bigint not null, -- 雪花主键(应用层生成,全局唯一)
|
||||
b_user_id bigint null, -- 操作用户(逻辑外键)
|
||||
b_account varchar(50) null, -- 登录名快照
|
||||
b_sourcetype varchar(20) null, -- 来源类型:web/api
|
||||
@@ -604,7 +602,6 @@ create table s_log_technical (
|
||||
);
|
||||
|
||||
create index ix_s_log_technical_trace on s_log_technical (b_trace_id, b_occurdatetime desc);
|
||||
create index ix_s_log_technical_org on s_log_technical (b_org_id, b_occurdatetime desc);
|
||||
create index ix_s_log_technical_level on s_log_technical (b_loglevel, b_occurdatetime desc);
|
||||
```
|
||||
|
||||
@@ -614,8 +611,7 @@ create index ix_s_log_technical_level on s_log_technical (b_loglevel, b_occurdat
|
||||
|
||||
```sql
|
||||
create table s_log_login (
|
||||
b_id bigint identity(1, 1) not null, -- 内部主键
|
||||
b_org_id varchar(50) null, -- 租户/组织标识
|
||||
b_id bigint not null, -- 雪花主键(应用层生成,全局唯一)
|
||||
b_user_id bigint null, -- 用户(逻辑外键)
|
||||
b_account varchar(50) null, -- 登录名
|
||||
b_login_type varchar(20) not null, -- 登录类型:password/token/oidc/ldap
|
||||
@@ -647,7 +643,7 @@ create index ix_s_log_login_result on s_log_login (b_login_result, b_occurdateti
|
||||
|
||||
```sql
|
||||
create table s_log_audit (
|
||||
b_id bigint identity(1, 1) not null, -- 内部主键
|
||||
b_id bigint not null, -- 雪花主键(应用层生成,全局唯一)
|
||||
b_event_code varchar(50) not null, -- 业务事件编码(如 booking.submit)
|
||||
b_module_code varchar(50) null, -- 模块编码
|
||||
b_data_id varchar(50) null, -- 被审计的业务数据 ID
|
||||
@@ -672,7 +668,7 @@ create index ix_s_log_audit_trace on s_log_audit (b_trace_id);
|
||||
|
||||
```sql
|
||||
create table s_log_audit_field (
|
||||
b_id bigint identity(1, 1) not null, -- 内部主键
|
||||
b_id bigint not null, -- 雪花主键(应用层生成,全局唯一)
|
||||
b_event_id bigint not null, -- 所属审计事件
|
||||
b_module_code varchar(50) null, -- 模块编码
|
||||
b_data_id varchar(50) null, -- 业务数据 ID
|
||||
@@ -684,7 +680,7 @@ create table s_log_audit_field (
|
||||
b_after_display nvarchar(500) null, -- 变更后显示值
|
||||
b_visibility varchar(20) not null default 'internal', -- 可见性:internal 内部/customer 客户可见
|
||||
constraint pk_s_log_audit_field primary key (b_id),
|
||||
constraint fk_s_log_audit_field_event foreign key (b_event_id) references s_log_audit (b_id)
|
||||
-- constraint fk_s_log_audit_field_event foreign key (b_event_id) references s_log_audit (b_id)
|
||||
);
|
||||
|
||||
create index ix_s_log_audit_field_event on s_log_audit_field (b_event_id);
|
||||
@@ -721,9 +717,13 @@ create index ix_s_log_audit_field_customer on s_log_audit_field (b_module_code,
|
||||
- 登录日志与业务审计属于安全与合规数据,低频但必须长期留存,落库保存;审计字段明细在字段发生修改时全量写入,不做按字段开关,数据量按变更频率自然收敛。
|
||||
- 三类日志统一以 `b_request_id` / `b_trace_id` 串联,便于从业务审计反查技术日志。
|
||||
|
||||
### 4.9 为什么元数据表主键采用雪花 ID
|
||||
|
||||
配置数据(模块、字段、关系、菜单、权限等)需要跨系统导入导出与搬迁。若使用数据库自增主键,两个系统各自从 1 计数,搬入目标系统后必然 ID 冲突,模块子树下所有引用字段(`b_module_id`、`b_field_id`、`b_relation_id` 等 30+ 处)都必须重映射,而重映射正是搬迁工具中 bug 的高发区。雪花 ID 全局唯一,导出/导入时子树引用原样保留,无需重映射。元数据表行数少,雪花随机写入对聚簇索引的影响可忽略;`b_code` 仍作为跨环境稳定业务键,负责冲突检测与 dev/prod 对齐。业务数据表(模块生成的物理表)和用户表不在此列,用户表见 5.1。
|
||||
|
||||
## 5. 逻辑外键清单
|
||||
|
||||
元数据表已建物理外键;以下为业务侧或跨系统引用,由服务层校验:
|
||||
全系统(含元数据表)不建立物理外键;DDL 中的 `fk_*` 约束以注释形式保留,仅作逻辑关系参考,建表时不创建。以下引用统一由服务层校验:
|
||||
|
||||
| 表 | 字段 | 逻辑目标 |
|
||||
| --- | --- | --- |
|
||||
@@ -750,6 +750,17 @@ create index ix_s_log_audit_field_customer on s_log_audit_field (b_module_code,
|
||||
-> 删除或停用前是否仍被其他资源引用
|
||||
```
|
||||
|
||||
### 5.1 用户与身份系统(b_user)
|
||||
|
||||
`b_user` 不属于 FMS 业务库,由独立的身份系统维护;FMS 侧只保存用户引用 `b_user_id`(bigint,不透明 ID),不解析账号,也不关心身份系统内部的 ID 生成方案。
|
||||
|
||||
身份系统用户表约定:
|
||||
|
||||
- `b_id` bigint 主键:单库自增 `identity(1,1)` 即可;若未来用户需要跨系统迁移或合并,再改为全局唯一 ID(如雪花),FMS 侧无需任何改动。
|
||||
- `b_account` nvarchar(50) 唯一键:账号是自然键,允许改名;**绝不用账号做主键**。
|
||||
- 账号改名只更新用户表自身,引用 `b_user_id` 的业务数据(`s_user_role`、`s_log_*`)不受影响。
|
||||
- 日志表冗余保存 `b_account` 快照(`s_log_login.b_account`、`s_log_technical.b_account`),保证改名后历史日志仍可读、可追溯。
|
||||
|
||||
## 6. 与旧系统的映射对照
|
||||
|
||||
| 旧系统 | 本方案 | 变化 |
|
||||
|
||||
Reference in new issue
Block a user