V1__initial_schema.sql
11.9 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
-- Flyway migration V1 — initial schema for 小羚羊
-- Generated: 2026-05-14T15:46:57Z
-- 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.
-- =============================================================================
-- Table: sys_company — 公司 / 版本字典,登录页下拉选择来源
-- =============================================================================
CREATE TABLE `sys_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 '创建时间(标准列)',
`sCompanyName` VARCHAR(100) NOT NULL COMMENT '公司 / 版本名称(登录页下拉显示文本)',
`sCompanyCode` VARCHAR(50) NOT NULL COMMENT '公司编码(前端唯一识别)',
`iSortOrder` INT NOT NULL DEFAULT 0 COMMENT '下拉列表排序权重,升序',
`iIsDeleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '软删除标记,0=正常 1=已删',
PRIMARY KEY (`iIncrement`),
UNIQUE KEY `uk_sys_company_code` (`sCompanyCode`),
KEY `idx_sys_company_is_deleted` (`iIsDeleted`, `iSortOrder`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='公司 / 版本字典,登录页下拉选择来源';
-- =============================================================================
-- Table: sys_department — 部门字典,职员归属
-- =============================================================================
CREATE TABLE `sys_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 '创建时间(标准列)',
`sDepartmentName` VARCHAR(100) NOT NULL COMMENT '部门名称',
`sDepartmentCode` VARCHAR(50) NOT NULL COMMENT '部门编码',
`iIsDeleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '软删除标记',
PRIMARY KEY (`iIncrement`),
UNIQUE KEY `uk_sys_department_code` (`sDepartmentCode`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='部门字典,职员归属';
-- =============================================================================
-- Table: sys_employee — 职员档案,员工基础信息
-- =============================================================================
CREATE TABLE `sys_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 '创建时间(标准列)',
`sEmployeeName` VARCHAR(50) NOT NULL COMMENT '员工姓名(2-50 字符)',
`sEmployeeCode` VARCHAR(50) NOT NULL COMMENT '员工工号(系统内唯一)',
`iDepartmentId` INT NOT NULL COMMENT '所属部门 ID(FK → sys_department.iIncrement)',
`sPhone` VARCHAR(20) NULL DEFAULT NULL COMMENT '手机号',
`sEmail` VARCHAR(100) NULL DEFAULT NULL COMMENT '邮箱',
`iIsDeleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '软删除标记',
PRIMARY KEY (`iIncrement`),
UNIQUE KEY `uk_sys_employee_code` (`sEmployeeCode`),
KEY `idx_sys_employee_department` (`iDepartmentId`),
KEY `idx_sys_employee_name` (`sEmployeeName`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='职员档案,员工基础信息';
-- =============================================================================
-- Table: sys_user — 用户账号(登录认证 + 类型 + 语言 + 状态 + 登录追踪)
-- =============================================================================
CREATE TABLE `sys_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 '创建时间(标准列)',
`sUsername` VARCHAR(50) NOT NULL COMMENT '用户名(登录凭据,系统内全局唯一,3-20 位字母数字下划线)',
`sUserCode` VARCHAR(50) NOT NULL COMMENT '用户号(业务展示用编码,系统内唯一)',
`sPasswordHash` VARCHAR(255) NOT NULL COMMENT '密码哈希(BCrypt / Argon2,禁明文)',
`iEmployeeId` INT NULL DEFAULT NULL COMMENT '关联职员 ID(可选;FK → sys_employee.iIncrement)',
`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=繁体',
`iCanEditDocument` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '单据修改权限:0=否 1=是',
`iIsDeleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否作废:0=启用 1=作废(停用)',
`iFailedLoginCount` INT NOT NULL DEFAULT 0 COMMENT '累计登录失败次数,达阈值锁定,登录成功清零',
`tLockUntil` DATETIME NULL DEFAULT NULL COMMENT '锁定截止时间,NULL=未锁定,过期自动解锁',
`tLastLoginDate` DATETIME NULL DEFAULT NULL COMMENT '最后一次成功登录时间,REQ-USR-004 登录日期来源',
`sCreatedBy` VARCHAR(50) NULL DEFAULT NULL COMMENT '制单人(创建该用户的用户名),REQ-USR-002 制单人',
`sUpdatedBy` VARCHAR(50) NULL DEFAULT NULL COMMENT '最后修改人用户名',
`tUpdatedDate` DATETIME NULL DEFAULT NULL COMMENT '最后修改时间',
PRIMARY KEY (`iIncrement`),
UNIQUE KEY `uk_sys_user_username` (`sUsername`),
UNIQUE KEY `uk_sys_user_code` (`sUserCode`),
KEY `idx_sys_user_employee` (`iEmployeeId`),
KEY `idx_sys_user_type` (`sUserType`),
KEY `idx_sys_user_is_deleted` (`iIsDeleted`),
KEY `idx_sys_user_created_by` (`sCreatedBy`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户账号(登录认证 + 类型 + 语言 + 状态 + 登录追踪)';
-- =============================================================================
-- Table: sys_permission_category — 权限分类字典
-- =============================================================================
CREATE TABLE `sys_permission_category` (
`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 '创建时间(标准列)',
`sCategoryName` VARCHAR(100) NOT NULL COMMENT '权限分类名称(如 采购管理 / 销售管理)',
`sCategoryCode` VARCHAR(50) NOT NULL COMMENT '权限分类编码(系统内唯一,代码层引用)',
`sCategoryDesc` VARCHAR(255) NULL DEFAULT NULL COMMENT '分类说明',
`iSortOrder` INT NOT NULL DEFAULT 0 COMMENT '列表展示顺序',
`iIsDeleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '软删除标记',
PRIMARY KEY (`iIncrement`),
UNIQUE KEY `uk_sys_permission_category_code` (`sCategoryCode`),
KEY `idx_sys_permission_category_sort` (`iIsDeleted`, `iSortOrder`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='权限分类字典';
-- =============================================================================
-- Table: sys_user_permission_category — 用户 × 权限分类授权关系
-- =============================================================================
CREATE TABLE `sys_user_permission_category` (
`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(FK → sys_user.iIncrement)',
`iPermissionCategoryId` INT NOT NULL COMMENT '权限分类 ID(FK → sys_permission_category.iIncrement)',
`sGrantedBy` VARCHAR(50) NULL DEFAULT NULL COMMENT '授予人用户名',
PRIMARY KEY (`iIncrement`),
UNIQUE KEY `uk_sys_user_permission_category` (`iUserId`, `iPermissionCategoryId`),
KEY `idx_sys_user_permission_category_category` (`iPermissionCategoryId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户 × 权限分类授权关系';
-- =============================================================================
-- Foreign keys
-- =============================================================================
ALTER TABLE `sys_employee`
ADD CONSTRAINT `fk_sys_employee_department`
FOREIGN KEY (`iDepartmentId`) REFERENCES `sys_department` (`iIncrement`)
ON DELETE RESTRICT ON UPDATE CASCADE;
ALTER TABLE `sys_user`
ADD CONSTRAINT `fk_sys_user_employee`
FOREIGN KEY (`iEmployeeId`) REFERENCES `sys_employee` (`iIncrement`)
ON DELETE SET NULL ON UPDATE CASCADE;
ALTER TABLE `sys_user_permission_category`
ADD CONSTRAINT `fk_sys_upc_user`
FOREIGN KEY (`iUserId`) REFERENCES `sys_user` (`iIncrement`)
ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `sys_user_permission_category`
ADD CONSTRAINT `fk_sys_upc_permission_category`
FOREIGN KEY (`iPermissionCategoryId`) REFERENCES `sys_permission_category` (`iIncrement`)
ON DELETE CASCADE ON UPDATE CASCADE;