diff --git a/docs/03-数据库设计文档.md b/docs/03-数据库设计文档.md index fe53b37..e497740 100644 --- a/docs/03-数据库设计文档.md +++ b/docs/03-数据库设计文档.md @@ -56,11 +56,11 @@ Migration 清单: `sql/migrations/V*.sql`(由 Flyway 顺序 apply) | `iStaffId` | int | 是 | NULL | 关联职员 ID(可选,外键 → `tStaff.iIncrement`) | | `sUserType` | varchar(20) | 否 | `普通用户` | 用户类型;枚举:`普通用户` / `超级管理员` | | `sLanguage` | varchar(10) | 否 | `zh` | 语言偏好;枚举:`zh` / `en` / `zh-TW` | -| `bCanModifyDocs` | tinyint(1) | 否 | 0 | 单据修改权限;0 否 / 1 是 | +| `bCanModifyDocs` | bit(1) | 否 | 0 | 单据修改权限;0 否 / 1 是 | | `sPasswordHash` | varchar(255) | 否 | — | 密码哈希值(BCrypt 等强哈希算法),新增默认初始密码 `666666` 的哈希 | | `tLastLoginDate` | datetime | 是 | NULL | 最后登录时间 | | `sCreatedBy` | varchar(50) | 是 | — | 制单人(创建用户的操作员用户号) | -| `bDeleted` | tinyint(1) | 否 | 0 | 软删除标记;0 有效 / 1 已作废 | +| `bDeleted` | bit(1) | 否 | 0 | 软删除标记;0 有效 / 1 已作废 | | `tDeletedDate` | datetime | 是 | NULL | 软删除时间 | | `sDeletedBy` | varchar(50) | 是 | NULL | 软删除操作人 | @@ -100,7 +100,7 @@ Migration 清单: `sql/migrations/V*.sql`(由 Flyway 顺序 apply) | `sStaffName` | varchar(50) | 否 | — | 职员姓名 | | `sDepartment` | varchar(100) | 是 | NULL | 所属部门(本期暂用字符串,未来如需独立 `tDepartment` 字典表再另行重构) | | `sCreatedBy` | varchar(50) | 是 | — | 制单人 | -| `bDeleted` | tinyint(1) | 否 | 0 | 软删除标记 | +| `bDeleted` | bit(1) | 否 | 0 | 软删除标记 | | `tDeletedDate` | datetime | 是 | NULL | 软删除时间 | | `sDeletedBy` | varchar(50) | 是 | NULL | 软删除操作人 | @@ -137,7 +137,7 @@ Migration 清单: `sql/migrations/V*.sql`(由 Flyway 顺序 apply) | `iParentId` | int | 是 | NULL | 父分类 ID(自引用,根节点为 NULL) | | `iSortOrder` | int | 否 | 0 | 同级排序号 | | `sCreatedBy` | varchar(50) | 是 | — | 制单人 | -| `bDeleted` | tinyint(1) | 否 | 0 | 软删除标记 | +| `bDeleted` | bit(1) | 否 | 0 | 软删除标记 | | `tDeletedDate` | datetime | 是 | NULL | 软删除时间 | | `sDeletedBy` | varchar(50) | 是 | NULL | 软删除操作人 | @@ -204,12 +204,12 @@ Migration 清单: `sql/migrations/V*.sql`(由 Flyway 顺序 apply) | `sProcedureName` | varchar(100) | 否 | — | 存储过程(审核)名称;系统内唯一 | | `sModuleType` | varchar(50) | 否 | — | 模块类型(本期按自由文本处理,VARCHAR(50);如未来收敛到枚举再加 CHECK 约束) | | `sManageDeptEn` | varchar(50) | 否 | — | 管理部门英文标识 | -| `bShowPermission` | tinyint(1) | 否 | 0 | 权限是否显示;0 否 / 1 是 | +| `bShowPermission` | bit(1) | 否 | 0 | 权限是否显示;0 否 / 1 是 | | `sModuleNameZh` | varchar(100) | 否 | — | 界面名称(中文,模糊查询用) | | `iParentId` | int | 是 | NULL | 父模块 ID(自引用,根节点为 NULL) | | `iSortOrder` | int | 否 | 0 | 同级排序号 | | `sCreatedBy` | varchar(50) | 是 | — | 制单人 | -| `bDeleted` | tinyint(1) | 否 | 0 | 软删除标记 | +| `bDeleted` | bit(1) | 否 | 0 | 软删除标记 | | `tDeletedDate` | datetime | 是 | NULL | 软删除时间 | | `sDeletedBy` | varchar(50) | 是 | NULL | 软删除操作人 | diff --git a/sql/migrations/V2__bool_columns_to_bit.sql b/sql/migrations/V2__bool_columns_to_bit.sql new file mode 100644 index 0000000..5da81b2 --- /dev/null +++ b/sql/migrations/V2__bool_columns_to_bit.sql @@ -0,0 +1,24 @@ +-- Flyway migration V2 — switch boolean flag columns from TINYINT(1) to BIT(1). +-- +-- Why: BIT(1) gives strict 0/1 storage at the type level. MySQL Connector/J 8.x +-- maps BIT(1) ↔ Boolean automatically (no driver param needed). MyBatis-Plus +-- entity fields stay `Boolean`, no Java code changes required. Existing queries +-- like `WHERE bDeleted = 0` continue to work because MySQL implicitly converts +-- integer literals to bit values. +-- +-- ALTER TABLE on a populated table preserves data: TINYINT 0 → BIT b'0', +-- TINYINT 1 → BIT b'1'. Indexes (e.g. idx_deleted_login) survive the modify. + +ALTER TABLE `tUser` + MODIFY COLUMN `bCanModifyDocs` BIT(1) NOT NULL DEFAULT b'0' COMMENT '单据修改权限;0 否 / 1 是', + MODIFY COLUMN `bDeleted` BIT(1) NOT NULL DEFAULT b'0' COMMENT '软删除标记;0 有效 / 1 已作废'; + +ALTER TABLE `tStaff` + MODIFY COLUMN `bDeleted` BIT(1) NOT NULL DEFAULT b'0' COMMENT '软删除标记'; + +ALTER TABLE `tPermissionCategory` + MODIFY COLUMN `bDeleted` BIT(1) NOT NULL DEFAULT b'0' COMMENT '软删除标记'; + +ALTER TABLE `tModule` + MODIFY COLUMN `bShowPermission` BIT(1) NOT NULL DEFAULT b'0' COMMENT '权限是否显示;0 否 / 1 是', + MODIFY COLUMN `bDeleted` BIT(1) NOT NULL DEFAULT b'0' COMMENT '软删除标记';