V1__initial_schema.sql
9.84 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
-- Flyway migration V1 — initial schema for 小羚羊
-- Generated: 2026-05-14T01:37:50Z
-- 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.
-- ===========================================================================
-- t_user — 系统用户主表,承载登录认证与基础属性
-- ===========================================================================
CREATE TABLE `t_user` (
`iIncrement` INT NOT NULL AUTO_INCREMENT COMMENT '整数主键 ID(标准列)',
`sId` VARCHAR(100) NULL DEFAULT (UUID()) COMMENT '业务 ID(标准列)',
`sBrandsId` VARCHAR(100) NULL DEFAULT '1111111111' COMMENT '品牌 ID(多租户隔离,标准列)',
`sSubsidiaryId` VARCHAR(100) NULL DEFAULT '1111111111' COMMENT '子公司 ID(组织层级隔离,标准列)',
`tCreateDate` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间(标准列)',
`sUserNo` VARCHAR(50) NOT NULL COMMENT '用户号;关联职员后自动同步员工号;系统内唯一',
`sUserName` VARCHAR(50) NOT NULL COMMENT '登录用户名;系统内唯一;3-50 位',
`iEmployeeId` INT NULL DEFAULT NULL COMMENT '关联职员 t_employee.iIncrement;可空(非员工账号如系统管理员)',
`sPasswordHash` VARCHAR(255) NOT NULL COMMENT '密码哈希(BCrypt / Argon2);禁止明文;初始密码 666666 哈希后存入',
`sUserType` VARCHAR(20) NOT NULL DEFAULT 'NORMAL' COMMENT '用户类型枚举:NORMAL(普通用户)/ SUPER_ADMIN(超级管理员)',
`sLanguage` VARCHAR(10) NOT NULL DEFAULT 'zh-CN' COMMENT '语言枚举:zh-CN(中文)/ en-US(英文)/ zh-TW(繁体)',
`bModifyDoc` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '单据修改权限:0 否 / 1 是',
`bVoid` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '作废标记(软删除):0 启用 / 1 已作废',
`iLoginFailCount` INT NOT NULL DEFAULT 0 COMMENT '连续登录失败次数;达到阈值触发临时锁定;登录成功后清零',
`tLockUntil` DATETIME NULL DEFAULT NULL COMMENT '锁定截止时间;NULL 表示未锁定',
`tLastLoginDate` DATETIME NULL DEFAULT NULL COMMENT '最近一次登录时间',
`sCreator` VARCHAR(100) NULL DEFAULT NULL COMMENT '制单人(创建该账号的操作员用户名)',
PRIMARY KEY (`iIncrement`),
UNIQUE KEY `uk_user_username` (`sUserName`),
UNIQUE KEY `uk_user_userno` (`sUserNo`),
KEY `idx_user_employee` (`iEmployeeId`),
KEY `idx_user_tenant` (`sBrandsId`, `sSubsidiaryId`),
KEY `idx_user_void` (`bVoid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统用户主表,承载登录认证与基础属性';
-- ===========================================================================
-- t_employee — 公司职员主档
-- ===========================================================================
CREATE TABLE `t_employee` (
`iIncrement` INT NOT NULL AUTO_INCREMENT COMMENT '整数主键 ID(标准列)',
`sId` VARCHAR(100) NULL DEFAULT (UUID()) COMMENT '业务 ID(标准列)',
`sBrandsId` VARCHAR(100) NULL DEFAULT '1111111111' COMMENT '品牌 ID(多租户隔离,标准列)',
`sSubsidiaryId` VARCHAR(100) NULL DEFAULT '1111111111' COMMENT '子公司 ID(组织层级隔离,标准列)',
`tCreateDate` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间(标准列)',
`sEmployeeNo` VARCHAR(50) NOT NULL COMMENT '员工号;系统内唯一',
`sName` VARCHAR(100) NOT NULL COMMENT '姓名',
`iDepartmentId` INT NULL DEFAULT NULL COMMENT '部门 ID,关联 t_department.iIncrement',
`sPhone` VARCHAR(20) NULL DEFAULT NULL COMMENT '手机号',
`sEmail` VARCHAR(100) NULL DEFAULT NULL COMMENT '邮箱',
`bDisabled` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否离职:0 在职 / 1 离职',
PRIMARY KEY (`iIncrement`),
UNIQUE KEY `uk_employee_no` (`sEmployeeNo`),
KEY `idx_employee_dept` (`iDepartmentId`),
KEY `idx_employee_name` (`sName`),
KEY `idx_employee_tenant` (`sBrandsId`, `sSubsidiaryId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='公司职员主档';
-- ===========================================================================
-- t_department — 部门组织树
-- ===========================================================================
CREATE TABLE `t_department` (
`iIncrement` INT NOT NULL AUTO_INCREMENT COMMENT '整数主键 ID(标准列)',
`sId` VARCHAR(100) NULL DEFAULT (UUID()) COMMENT '业务 ID(标准列)',
`sBrandsId` VARCHAR(100) NULL DEFAULT '1111111111' COMMENT '品牌 ID(多租户隔离,标准列)',
`sSubsidiaryId` VARCHAR(100) NULL DEFAULT '1111111111' COMMENT '子公司 ID(组织层级隔离,标准列)',
`tCreateDate` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间(标准列)',
`sName` VARCHAR(100) NOT NULL COMMENT '部门名称',
`sCode` VARCHAR(50) NOT NULL COMMENT '部门编码;系统内唯一',
`iParentId` INT NULL DEFAULT NULL COMMENT '上级部门 ID,NULL 表示根部门',
`iSortOrder` INT NOT NULL DEFAULT 0 COMMENT '排序值,小者靠前',
PRIMARY KEY (`iIncrement`),
UNIQUE KEY `uk_department_code` (`sCode`),
KEY `idx_department_parent` (`iParentId`),
KEY `idx_department_tenant` (`sBrandsId`, `sSubsidiaryId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='部门组织树';
-- ===========================================================================
-- t_permission — 权限分类字典
-- ===========================================================================
CREATE TABLE `t_permission` (
`iIncrement` INT NOT NULL AUTO_INCREMENT COMMENT '整数主键 ID(标准列)',
`sId` VARCHAR(100) NULL DEFAULT (UUID()) COMMENT '业务 ID(标准列)',
`sBrandsId` VARCHAR(100) NULL DEFAULT '1111111111' COMMENT '品牌 ID(多租户隔离,标准列)',
`sSubsidiaryId` VARCHAR(100) NULL DEFAULT '1111111111' COMMENT '子公司 ID(组织层级隔离,标准列)',
`tCreateDate` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间(标准列)',
`sCode` VARCHAR(50) NOT NULL COMMENT '权限码,例如 USR:ADD / USR:EDIT;系统内唯一',
`sName` VARCHAR(100) NOT NULL COMMENT '权限分类名称(展示用)',
`iSortOrder` INT NOT NULL DEFAULT 0 COMMENT '同分类内排序',
PRIMARY KEY (`iIncrement`),
UNIQUE KEY `uk_permission_code` (`sCode`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='权限分类字典';
-- ===========================================================================
-- t_user_permission — 用户-权限分类关联表
-- ===========================================================================
CREATE TABLE `t_user_permission` (
`iIncrement` INT NOT NULL AUTO_INCREMENT COMMENT '整数主键 ID(标准列)',
`sId` VARCHAR(100) NULL DEFAULT (UUID()) COMMENT '业务 ID(标准列)',
`sBrandsId` VARCHAR(100) NULL DEFAULT '1111111111' COMMENT '品牌 ID(多租户隔离,标准列)',
`sSubsidiaryId` VARCHAR(100) NULL DEFAULT '1111111111' COMMENT '子公司 ID(组织层级隔离,标准列)',
`tCreateDate` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间(标准列)',
`iUserId` INT NOT NULL COMMENT '用户 ID,关联 t_user.iIncrement',
`iPermissionId` INT NOT NULL COMMENT '权限分类 ID,关联 t_permission.iIncrement',
PRIMARY KEY (`iIncrement`),
UNIQUE KEY `uk_user_perm` (`iUserId`, `iPermissionId`),
KEY `idx_user_perm_perm` (`iPermissionId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户-权限分类关联表';
-- ===========================================================================
-- t_company — 公司 / 版本字典
-- ===========================================================================
CREATE TABLE `t_company` (
`iIncrement` INT NOT NULL AUTO_INCREMENT COMMENT '整数主键 ID(标准列)',
`sId` VARCHAR(100) NULL DEFAULT (UUID()) COMMENT '业务 ID(标准列)',
`sBrandsId` VARCHAR(100) NULL DEFAULT '1111111111' COMMENT '品牌 ID(多租户隔离,标准列)',
`sSubsidiaryId` VARCHAR(100) NULL DEFAULT '1111111111' COMMENT '子公司 ID(组织层级隔离,标准列)',
`tCreateDate` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间(标准列)',
`sCode` VARCHAR(50) NOT NULL COMMENT '公司 / 版本编码;系统内唯一',
`sName` VARCHAR(100) NOT NULL COMMENT '显示名称',
PRIMARY KEY (`iIncrement`),
UNIQUE KEY `uk_company_code` (`sCode`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='公司 / 版本字典';
-- ===========================================================================
-- 外键约束(统一在最后追加,避免建表顺序依赖)
-- ===========================================================================
ALTER TABLE `t_user`
ADD CONSTRAINT `fk_user_employee` FOREIGN KEY (`iEmployeeId`) REFERENCES `t_employee` (`iIncrement`) ON DELETE SET NULL ON UPDATE RESTRICT;
ALTER TABLE `t_employee`
ADD CONSTRAINT `fk_employee_department` FOREIGN KEY (`iDepartmentId`) REFERENCES `t_department` (`iIncrement`) ON DELETE SET NULL ON UPDATE RESTRICT;
ALTER TABLE `t_department`
ADD CONSTRAINT `fk_department_parent` FOREIGN KEY (`iParentId`) REFERENCES `t_department` (`iIncrement`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `t_user_permission`
ADD CONSTRAINT `fk_userperm_user` FOREIGN KEY (`iUserId`) REFERENCES `t_user` (`iIncrement`) ON DELETE CASCADE ON UPDATE RESTRICT;
ALTER TABLE `t_user_permission`
ADD CONSTRAINT `fk_userperm_perm` FOREIGN KEY (`iPermissionId`) REFERENCES `t_permission` (`iIncrement`) ON DELETE RESTRICT ON UPDATE RESTRICT;