V1__initial_schema.sql
10.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
-- Flyway migration V1 — initial schema for 小羚羊
-- Generated: 2026-05-06T08:30:00Z
-- Source: 由 A4 db-init 从 docs/03-数据库设计文档.md 翻译生成(schema SSoT 是 docs/03)
-- This is the FIRST migration; subsequent schema changes must be written as new files sql/migrations/V2__<desc>.sql, V3__... etc.
-- Apply: Flyway runs this automatically at Spring Boot startup.
-- Do not hand-edit this file after it is committed; write a new migration instead.
-- ============================================================
-- 1) tUser — 系统用户账户与登录凭据
-- ============================================================
CREATE TABLE `tUser` (
`iIncrement` int NOT NULL AUTO_INCREMENT COMMENT '整数主键 ID(标准列)',
`sId` varchar(100) NULL COMMENT '业务 ID(标准列)',
`sBrandsId` varchar(100) NULL COMMENT '品牌 ID(多租户隔离,标准列)',
`sSubsidiaryId` varchar(100) NULL COMMENT '子公司 ID(组织层级隔离,标准列)',
`tCreateDate` datetime NOT NULL COMMENT '创建时间(标准列)',
`sUserNo` varchar(50) NOT NULL COMMENT '用户号;系统内唯一',
`sUserName` varchar(50) NOT NULL COMMENT '用户名(登录账号);系统内唯一',
`iStaffId` int NULL DEFAULT NULL COMMENT '关联职员 ID(可选,外键 → tStaff.iIncrement)',
`sUserType` varchar(20) NOT NULL DEFAULT '普通用户' COMMENT '用户类型;枚举:普通用户 / 超级管理员',
`sLanguage` varchar(10) NOT NULL DEFAULT 'zh' COMMENT '语言偏好;枚举:zh / en / zh-TW',
`bCanModifyDocs` bit(1) NOT NULL DEFAULT b'0' COMMENT '单据修改权限;0 否 / 1 是',
`sPasswordHash` varchar(255) NOT NULL COMMENT '密码哈希值(BCrypt 等强哈希算法),新增默认初始密码 666666 的哈希',
`tLastLoginDate` datetime NULL DEFAULT NULL COMMENT '最后登录时间',
`sCreatedBy` varchar(50) NULL COMMENT '制单人(创建用户的操作员用户号)',
`bDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '软删除标记;0 有效 / 1 已作废',
`tDeletedDate` datetime NULL DEFAULT NULL COMMENT '软删除时间',
`sDeletedBy` varchar(50) NULL DEFAULT NULL COMMENT '软删除操作人',
PRIMARY KEY (`iIncrement`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统用户账户与登录凭据';
-- ============================================================
-- 2) tStaff — 职员维度(员工名 / 部门 / 编号)
-- ============================================================
CREATE TABLE `tStaff` (
`iIncrement` int NOT NULL AUTO_INCREMENT COMMENT '整数主键 ID(标准列)',
`sId` varchar(100) NULL COMMENT '业务 ID(标准列)',
`sBrandsId` varchar(100) NULL COMMENT '品牌 ID(多租户隔离,标准列)',
`sSubsidiaryId` varchar(100) NULL COMMENT '子公司 ID(组织层级隔离,标准列)',
`tCreateDate` datetime NOT NULL COMMENT '创建时间(标准列)',
`sStaffNo` varchar(50) NULL COMMENT '职员编号;系统内唯一',
`sStaffName` varchar(50) NOT NULL COMMENT '职员姓名',
`sDepartment` varchar(100) NULL DEFAULT NULL COMMENT '所属部门(本期暂用字符串,未来如需独立 tDepartment 字典表再另行重构)',
`sCreatedBy` varchar(50) NULL COMMENT '制单人',
`bDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '软删除标记',
`tDeletedDate` datetime NULL DEFAULT NULL COMMENT '软删除时间',
`sDeletedBy` varchar(50) NULL DEFAULT NULL COMMENT '软删除操作人',
PRIMARY KEY (`iIncrement`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='职员维度(员工名 / 部门 / 编号)';
-- ============================================================
-- 3) tPermissionCategory — 权限分类树
-- ============================================================
CREATE TABLE `tPermissionCategory` (
`iIncrement` int NOT NULL AUTO_INCREMENT COMMENT '整数主键 ID(标准列)',
`sId` varchar(100) NULL COMMENT '业务 ID(标准列)',
`sBrandsId` varchar(100) NULL COMMENT '品牌 ID(多租户隔离,标准列)',
`sSubsidiaryId` varchar(100) NULL COMMENT '子公司 ID(组织层级隔离,标准列)',
`tCreateDate` datetime NOT NULL COMMENT '创建时间(标准列)',
`sCategoryCode` varchar(50) NOT NULL COMMENT '权限分类编码;系统内唯一',
`sCategoryName` varchar(100) NOT NULL COMMENT '权限分类名称(界面展示)',
`iParentId` int NULL DEFAULT NULL COMMENT '父分类 ID(自引用,根节点为 NULL)',
`iSortOrder` int NOT NULL DEFAULT 0 COMMENT '同级排序号',
`sCreatedBy` varchar(50) NULL COMMENT '制单人',
`bDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '软删除标记',
`tDeletedDate` datetime NULL DEFAULT NULL COMMENT '软删除时间',
`sDeletedBy` varchar(50) NULL DEFAULT NULL COMMENT '软删除操作人',
PRIMARY KEY (`iIncrement`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='权限分类树';
-- ============================================================
-- 4) tUserPermission — 用户与权限分类关联
-- ============================================================
CREATE TABLE `tUserPermission` (
`iIncrement` int NOT NULL AUTO_INCREMENT COMMENT '整数主键 ID(标准列)',
`sId` varchar(100) NULL COMMENT '业务 ID(标准列)',
`sBrandsId` varchar(100) NULL COMMENT '品牌 ID(多租户隔离,标准列)',
`sSubsidiaryId` varchar(100) NULL COMMENT '子公司 ID(组织层级隔离,标准列)',
`tCreateDate` datetime NOT NULL COMMENT '创建时间(标准列)',
`iUserId` int NOT NULL COMMENT '关联用户 ID(外键 → tUser.iIncrement)',
`iCategoryId` int NOT NULL COMMENT '关联权限分类 ID(外键 → tPermissionCategory.iIncrement)',
`sCreatedBy` varchar(50) NULL COMMENT '授权操作人',
PRIMARY KEY (`iIncrement`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户与权限分类关联';
-- ============================================================
-- 5) tModule — ERP 业务模块元数据树
-- ============================================================
CREATE TABLE `tModule` (
`iIncrement` int NOT NULL AUTO_INCREMENT COMMENT '整数主键 ID(标准列)',
`sId` varchar(100) NULL COMMENT '业务 ID(标准列)',
`sBrandsId` varchar(100) NULL COMMENT '品牌 ID(多租户隔离,标准列)',
`sSubsidiaryId` varchar(100) NULL COMMENT '子公司 ID(组织层级隔离,标准列)',
`tCreateDate` datetime NOT NULL COMMENT '创建时间(标准列)',
`sDisplayType` varchar(20) NOT NULL DEFAULT '手机端' COMMENT '显示类型;枚举:手机端 / 前端业务 / 系统配置 / 接口',
`sProcedureName` varchar(100) NOT NULL COMMENT '存储过程(审核)名称;系统内唯一',
`sModuleType` varchar(50) NOT NULL COMMENT '模块类型(本期按自由文本处理,VARCHAR(50);如未来收敛到枚举再加 CHECK 约束)',
`sManageDeptEn` varchar(50) NOT NULL COMMENT '管理部门英文标识',
`bShowPermission` bit(1) NOT NULL DEFAULT b'0' COMMENT '权限是否显示;0 否 / 1 是',
`sModuleNameZh` varchar(100) NOT NULL COMMENT '界面名称(中文,模糊查询用)',
`iParentId` int NULL DEFAULT NULL COMMENT '父模块 ID(自引用,根节点为 NULL)',
`iSortOrder` int NOT NULL DEFAULT 0 COMMENT '同级排序号',
`sCreatedBy` varchar(50) NULL COMMENT '制单人',
`bDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '软删除标记',
`tDeletedDate` datetime NULL DEFAULT NULL COMMENT '软删除时间',
`sDeletedBy` varchar(50) NULL DEFAULT NULL COMMENT '软删除操作人',
PRIMARY KEY (`iIncrement`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='ERP 业务模块元数据树';
-- ============================================================
-- 索引
-- ============================================================
-- tUser
CREATE UNIQUE INDEX `uk_user_no` ON `tUser` (`sUserNo`);
CREATE UNIQUE INDEX `uk_user_name` ON `tUser` (`sUserName`);
CREATE INDEX `idx_staff_id` ON `tUser` (`iStaffId`);
CREATE INDEX `idx_brand_subsidiary` ON `tUser` (`sBrandsId`, `sSubsidiaryId`);
CREATE INDEX `idx_deleted_login` ON `tUser` (`bDeleted`, `tLastLoginDate`);
-- tStaff
CREATE UNIQUE INDEX `uk_staff_no` ON `tStaff` (`sStaffNo`);
CREATE INDEX `idx_staff_name` ON `tStaff` (`sStaffName`);
CREATE INDEX `idx_department` ON `tStaff` (`sDepartment`);
-- tPermissionCategory
CREATE UNIQUE INDEX `uk_category_code` ON `tPermissionCategory` (`sCategoryCode`);
CREATE INDEX `idx_parent` ON `tPermissionCategory` (`iParentId`);
-- tUserPermission
CREATE UNIQUE INDEX `uk_user_category` ON `tUserPermission` (`iUserId`, `iCategoryId`);
CREATE INDEX `idx_category` ON `tUserPermission` (`iCategoryId`);
-- tModule
CREATE UNIQUE INDEX `uk_procedure_name` ON `tModule` (`sProcedureName`);
CREATE INDEX `idx_module_name_zh` ON `tModule` (`sModuleNameZh`);
CREATE INDEX `idx_parent` ON `tModule` (`iParentId`);
CREATE INDEX `idx_display_type` ON `tModule` (`sDisplayType`);
-- ============================================================
-- 外键
-- ============================================================
ALTER TABLE `tUser`
ADD CONSTRAINT `fk_user_staff`
FOREIGN KEY (`iStaffId`) REFERENCES `tStaff` (`iIncrement`)
ON DELETE SET NULL ON UPDATE CASCADE;
ALTER TABLE `tPermissionCategory`
ADD CONSTRAINT `fk_category_parent`
FOREIGN KEY (`iParentId`) REFERENCES `tPermissionCategory` (`iIncrement`)
ON DELETE RESTRICT ON UPDATE CASCADE;
ALTER TABLE `tUserPermission`
ADD CONSTRAINT `fk_up_user`
FOREIGN KEY (`iUserId`) REFERENCES `tUser` (`iIncrement`)
ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `tUserPermission`
ADD CONSTRAINT `fk_up_category`
FOREIGN KEY (`iCategoryId`) REFERENCES `tPermissionCategory` (`iIncrement`)
ON DELETE RESTRICT ON UPDATE CASCADE;
ALTER TABLE `tModule`
ADD CONSTRAINT `fk_module_parent`
FOREIGN KEY (`iParentId`) REFERENCES `tModule` (`iIncrement`)
ON DELETE RESTRICT ON UPDATE CASCADE;