-- Flyway migration V1 — initial schema for 小羚羊 -- Generated: 2026-06-01T03:43:38Z -- 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__.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. -- ============================================================ -- CREATE TABLE -- ============================================================ CREATE TABLE `usr_user` ( `iIncrement` int NOT NULL AUTO_INCREMENT COMMENT '整数主键 ID(标准列)', `sId` varchar(100) NULL 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 位字母数字下划线)', `sUserNo` varchar(50) NULL COMMENT '用户号,关联职员后可自动带出员工编号/姓名', `sPassword` varchar(100) NOT NULL COMMENT '登录密码,BCrypt 哈希存储(初始密码 666666)', `iEmployeeId` int NULL COMMENT '关联职员 ID(可选),外键 -> usr_employee.iIncrement', `sUserType` varchar(20) NOT NULL DEFAULT '普通用户' COMMENT '用户类型:普通用户 / 超级管理员', `sLanguage` varchar(20) NOT NULL DEFAULT '中文' COMMENT '界面语言:中文 / 英文 / 繁体', `iCanModifyBill` tinyint(1) NOT NULL DEFAULT 0 COMMENT '单据修改权限:0 否 / 1 是', `iIsVoid` tinyint(1) NOT NULL DEFAULT 0 COMMENT '作废/禁用标志:0 正常 / 1 已作废(禁用后不可登录)', `tLastLoginDate` datetime NULL COMMENT '最后登录时间,登录成功时更新', `sCreator` varchar(50) NULL COMMENT '制单人(创建该用户的操作员)', PRIMARY KEY (`iIncrement`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表:登录账号与用户属性核心表'; CREATE TABLE `usr_employee` ( `iIncrement` int NOT NULL AUTO_INCREMENT COMMENT '整数主键 ID(标准列)', `sId` varchar(100) NULL 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 '职员/员工姓名(用户员工名下拉来源)', `sEmployeeNo` varchar(50) NULL COMMENT '员工编号', `sDepartment` varchar(100) NULL COMMENT '所属部门(用户查询输出部门来源)', PRIMARY KEY (`iIncrement`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='职员表:员工名/部门等支撑信息'; CREATE TABLE `usr_company` ( `iIncrement` int NOT NULL AUTO_INCREMENT COMMENT '整数主键 ID(标准列)', `sId` varchar(100) NULL 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 '公司名称(登录页版本下拉的显示来源)', `sVersion` varchar(50) NULL COMMENT '版本/账套标识', PRIMARY KEY (`iIncrement`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='公司表:登录版本下拉数据来源'; CREATE TABLE `usr_permission` ( `iIncrement` int NOT NULL AUTO_INCREMENT COMMENT '整数主键 ID(标准列)', `sId` varchar(100) NULL 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 '创建时间(标准列)', `sPermissionName` varchar(100) NOT NULL COMMENT '权限名称', `sPermissionCode` varchar(100) NOT NULL COMMENT '权限编码(程序判定用,系统内唯一)', `sPermissionCategory` varchar(100) NULL COMMENT '权限分类(权限组的权限分类)', PRIMARY KEY (`iIncrement`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='权限表:可分配权限项定义'; CREATE TABLE `usr_user_permission` ( `iIncrement` int NOT NULL AUTO_INCREMENT COMMENT '整数主键 ID(标准列)', `sId` varchar(100) NULL 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,外键 -> usr_user.iIncrement', `iPermissionId` int NOT NULL COMMENT '权限 ID,外键 -> usr_permission.iIncrement', PRIMARY KEY (`iIncrement`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户权限关联表:用户↔权限多对多授权'; -- ============================================================ -- CREATE INDEX -- ============================================================ CREATE UNIQUE INDEX `uk_usr_user_username` ON `usr_user` (`sUserName`); CREATE INDEX `idx_usr_user_employee` ON `usr_user` (`iEmployeeId`); CREATE INDEX `idx_usr_user_type` ON `usr_user` (`sUserType`); CREATE INDEX `idx_usr_user_tenant` ON `usr_user` (`sBrandsId`, `sSubsidiaryId`); CREATE INDEX `idx_usr_employee_name` ON `usr_employee` (`sEmployeeName`); CREATE INDEX `idx_usr_employee_tenant` ON `usr_employee` (`sBrandsId`, `sSubsidiaryId`); CREATE UNIQUE INDEX `uk_usr_company_name` ON `usr_company` (`sCompanyName`); CREATE UNIQUE INDEX `uk_usr_permission_code` ON `usr_permission` (`sPermissionCode`); CREATE INDEX `idx_usr_permission_category` ON `usr_permission` (`sPermissionCategory`); CREATE UNIQUE INDEX `uk_usr_user_permission` ON `usr_user_permission` (`iUserId`, `iPermissionId`); CREATE INDEX `idx_usr_user_permission_perm` ON `usr_user_permission` (`iPermissionId`); -- ============================================================ -- ADD FOREIGN KEY -- ============================================================ ALTER TABLE `usr_user` ADD CONSTRAINT `fk_usr_user_employee` FOREIGN KEY (`iEmployeeId`) REFERENCES `usr_employee` (`iIncrement`) ON DELETE SET NULL ON UPDATE CASCADE; ALTER TABLE `usr_user_permission` ADD CONSTRAINT `fk_usr_up_user` FOREIGN KEY (`iUserId`) REFERENCES `usr_user` (`iIncrement`) ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE `usr_user_permission` ADD CONSTRAINT `fk_usr_up_permission` FOREIGN KEY (`iPermissionId`) REFERENCES `usr_permission` (`iIncrement`) ON DELETE CASCADE ON UPDATE CASCADE;