邮轮穿舱件管理系统后台 - 数据模型文档
概述
本文档详细描述了邮轮穿舱件管理系统后台的完整数据模型结构,包括所有数据库表结构、字段定义、关系映射和业务约束。系统采用混合数据库架构,主要使用MySQL关系型数据库存储核心业务数据,同时使用MongoDB存储工件详细信息。
数据模型架构
数据库架构概览
系统采用分层架构设计,主要包含以下核心数据模型:
- 用户管理模块:用户认证、权限管理
- 工件管理模块:工件基本信息、状态跟踪
- 工单管理模块:任务分配、流程管理
- 图片管理模块:文件存储、关联映射
- 日志管理模块:操作审计、行为追踪
实体关系图
erDiagram
USERS ||--o{ ROLES : "has"
USERS ||--o{ TICKET : "creates"
USERS ||--o{ IMAGE : "uploads"
USERS ||--o{ ACCESS_LOG : "performs"
WORKPIECES ||--o{ IMAGE_MAPPING : "has_images"
WORKPIECES ||--o{ TICKET : "targeted_by"
IMAGE ||--o{ IMAGE_MAPPING : "mapped_to"
TICKET ||--o{ ACCESS_LOG : "related_to"
USERS {
int id PK
string username
string password
string email
string sms
string status
string openid
boolean is_system
int created_by
int updated_by
datetime created_at
datetime updated_at
}
ROLES {
int id PK
int user_id FK
string scope_list
string scope_group
int created_by
int updated_by
datetime created_at
datetime updated_at
}
WORKPIECES {
int workpiece_id PK
int workpiece_status
int inspect_reference
int maintainance_reference
int created_by
int updated_by
datetime created_at
datetime updated_at
}
TICKET {
int ticket_id PK
string ticket_type
string ticket_status
int target_workpiece FK
string ticket_from
string ticket_tos
text ticket_content
string ticket_title
text feedback_text
string image_list
string reference_list
int created_by
int updated_by
datetime created_at
datetime updated_at
}
IMAGE {
int id PK
string key
int created_by
int updated_by
datetime created_at
datetime updated_at
}
IMAGE_MAPPING {
int id PK
int workpiece_id FK
int image_id FK
int created_by
int updated_by
datetime created_at
datetime updated_at
}
ACCESS_LOG {
int log_id PK
string action_type
string action_title
string action_description
string related_users
string related_tickets
string related_workpieces
int created_by
int updated_by
datetime created_at
datetime updated_at
}
详细数据模型定义
1. 用户管理模块
1.1 用户表 (users)
表结构定义:
CREATE TABLE IF NOT EXISTS `users` (
`id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
`username` VARCHAR(255) NOT NULL UNIQUE COMMENT '用户名',
`password` VARCHAR(511) NOT NULL COMMENT '密码',
`email` VARCHAR(255) UNIQUE COMMENT '邮箱',
`sms` VARCHAR(255) COMMENT '手机号码',
`status` VARCHAR(255) NOT NULL COMMENT '用户状态' DEFAULT 'active',
`openid` VARCHAR(255) COMMENT '微信OpenID',
`is_system` BOOL NOT NULL COMMENT '是否系统用户' DEFAULT 0,
`created_by` INT COMMENT '创建人' DEFAULT -1,
`updated_by` INT COMMENT '更新人' DEFAULT -1,
`created_at` DATETIME(6) NOT NULL COMMENT '创建时间' DEFAULT CURRENT_TIMESTAMP(6),
`updated_at` DATETIME(6) NOT NULL COMMENT '更新时间' DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)
) CHARACTER SET utf8mb4;
字段详细说明:
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 | 约束 |
|---|---|---|---|---|---|---|
| id | INT | - | NOT NULL | AUTO_INCREMENT | 用户ID | 主键 |
| username | VARCHAR | 255 | NOT NULL | - | 用户名 | 唯一约束 |
| password | VARCHAR | 511 | NOT NULL | - | 密码 | - |
| VARCHAR | 255 | NULL | - | 邮箱 | 唯一约束 | |
| sms | VARCHAR | 255 | NULL | - | 手机号码 | - |
| status | VARCHAR | 255 | NOT NULL | 'active' | 用户状态 | 枚举值约束 |
| openid | VARCHAR | 255 | NULL | - | 微信OpenID | - |
| is_system | BOOL | - | NOT NULL | 0 | 是否系统用户 | - |
| created_by | INT | - | NULL | -1 | 创建人 | - |
| updated_by | INT | - | NULL | -1 | 更新人 | - |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 | - |
| updated_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 更新时间 | 自动更新 |
业务约束:
- 用户状态枚举值:active(活跃), inactive(非活跃), suspended(暂停), deleted(删除)
- 系统用户标识用于区分普通用户和管理员用户
- 支持微信OpenID绑定,实现微信登录功能
参考文件:
1.2 角色权限表 (roles)
表结构定义:
CREATE TABLE IF NOT EXISTS `roles` (
`id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
`user_id` INT NOT NULL COMMENT '用户ID',
`scope_list` VARCHAR(255) COMMENT '权限列表' DEFAULT '',
`scope_group` VARCHAR(255) COMMENT '权限组' DEFAULT '',
`created_by` INT COMMENT '创建人' DEFAULT -1,
`updated_by` INT COMMENT '更新人' DEFAULT -1,
`created_at` DATETIME(6) NOT NULL COMMENT '创建时间' DEFAULT CURRENT_TIMESTAMP(6),
`updated_at` DATETIME(6) NOT NULL COMMENT '更新时间' DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)
) CHARACTER SET utf8mb4;
字段详细说明:
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 | 约束 |
|---|---|---|---|---|---|---|
| id | INT | - | NOT NULL | AUTO_INCREMENT | 角色ID | 主键 |
| user_id | INT | - | NOT NULL | - | 用户ID | 外键约束 |
| scope_list | VARCHAR | 255 | NULL | '' | 权限列表 | - |
| scope_group | VARCHAR | 255 | NULL | '' | 权限组 | - |
| created_by | INT | - | NULL | -1 | 创建人 | - |
| updated_by | INT | - | NULL | -1 | 更新人 | - |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 | - |
| updated_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 更新时间 | 自动更新 |
业务约束:
- 每个用户可以拥有多个角色权限
- 权限列表存储具体的权限标识符
- 权限组用于权限分组管理
参考文件:
2. 工件管理模块
2.1 工件基本信息表 (workpieces)
表结构定义:
CREATE TABLE IF NOT EXISTS `workpieces` (
`workpiece_id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '工件ID',
`workpiece_status` INT COMMENT '工件状态' DEFAULT 0,
`inspect_reference` INT COMMENT '视检参考工单ID' DEFAULT 0,
`maintainance_reference` INT COMMENT '维护参考工单ID' DEFAULT 0,
`created_by` INT COMMENT '创建人' DEFAULT -1,
`updated_by` INT COMMENT '更新人' DEFAULT -1,
`created_at` DATETIME(6) NOT NULL COMMENT '创建时间' DEFAULT CURRENT_TIMESTAMP(6),
`updated_at` DATETIME(6) NOT NULL COMMENT '更新时间' DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)
) CHARACTER SET utf8mb4;
字段详细说明:
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 | 约束 |
|---|---|---|---|---|---|---|
| workpiece_id | INT | - | NOT NULL | AUTO_INCREMENT | 工件ID | 主键 |
| workpiece_status | INT | - | NULL | 0 | 工件状态 | 枚举值约束 |
| inspect_reference | INT | - | NULL | 0 | 视检参考工单ID | 外键约束 |
| maintainance_reference | INT | - | NULL | 0 | 维护参考工单ID | 外键约束 |
| created_by | INT | - | NULL | -1 | 创建人 | - |
| updated_by | INT | - | NULL | -1 | 更新人 | - |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 | - |
| updated_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 更新时间 | 自动更新 |
业务约束:
- 工件状态用于跟踪工件的生命周期状态
- 支持与工单系统的双向引用关系
参考文件:
2.2 工件详细信息 (MongoDB Collection)
集合结构定义:
class WorkpieceInfo(Document):
wp_id: str
wp_firestop_code: str
wp_matrial: str
wp_size: str
wp_fire_rating: str
wp_watertightness: str
wp_main_vertical_zone: str
wp_installation_location: str
wp_z_coordinate: str
wp_frame_station: str
wp_longitudinal_stiffener: str
wp_sap1: str
wp_sap2: str
wp_standard_drawing_catalogue: str
wp_extra: str
字段映射关系:
| 字段名 | 中文说明 | 数据类型 | 说明 |
|---|---|---|---|
| wp_id | 工件ID | string | 与MySQL中workpiece_id对应 |
| wp_firestop_code | 防火板代号 | string | 防火板标识代码 |
| wp_matrial | 材料 | string | 工件材料信息 |
| wp_size | 规格 | string | 工件尺寸规格 |
| wp_fire_rating | 防火等级 | string | 防火性能等级 |
| wp_watertightness | 水密等级 | string | 防水性能等级 |
| wp_main_vertical_zone | 主竖区 | string | 安装区域信息 |
| wp_installation_location | 安装位置 | string | 具体安装位置 |
| wp_z_coordinate | Z坐标 | string | 空间坐标信息 |
| wp_frame_station | 肋位 | string | 结构位置信息 |
| wp_longitudinal_stiffener | 纵桁 | string | 结构加强信息 |
| wp_sap1 | SAP1 | string | SAP系统关联字段1 |
| wp_sap2 | SAP2 | string | SAP系统关联字段2 |
| wp_standard_drawing_catalogue | 图册章节 | string | 标准图纸信息 |
| wp_extra | 额外信息 | string | 扩展信息字段 |
业务约束:
- 使用MongoDB存储非结构化扩展信息
- 支持灵活的业务字段扩展
- 与MySQL中的工件基本信息形成互补关系
参考文件:
3. 工单管理模块
3.1 工单表 (ticket)
表结构定义:
CREATE TABLE IF NOT EXISTS `ticket` (
`ticket_id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '工单ID',
`ticket_type` VARCHAR(255) NOT NULL COMMENT '工单类型' DEFAULT '任务工单',
`ticket_status` VARCHAR(255) NOT NULL COMMENT '工单状态' DEFAULT '未开始',
`target_workpiece` INT COMMENT '目标产品ID' DEFAULT -1,
`ticket_from` VARCHAR(255) NOT NULL COMMENT '工单来源' DEFAULT '',
`ticket_tos` VARCHAR(255) NOT NULL COMMENT '工单目标' DEFAULT '',
`ticket_content` LONGTEXT COMMENT '工单内容',
`ticket_title` VARCHAR(255) NOT NULL COMMENT '工单标题' DEFAULT '',
`feedback_text` LONGTEXT COMMENT '工单反馈内容',
`image_list` VARCHAR(1025) NOT NULL COMMENT '工单图片列表' DEFAULT '',
`reference_list` VARCHAR(1025) NOT NULL COMMENT '工单引用列表' DEFAULT '',
`created_by` INT COMMENT '创建人' DEFAULT -1,
`updated_by` INT COMMENT '更新人' DEFAULT -1,
`created_at` DATETIME(6) NOT NULL COMMENT '创建时间' DEFAULT CURRENT_TIMESTAMP(6),
`updated_at` DATETIME(6) NOT NULL COMMENT '更新时间' DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)
) CHARACTER SET utf8mb4;
字段详细说明:
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 | 约束 |
|---|---|---|---|---|---|---|
| ticket_id | INT | - | NOT NULL | AUTO_INCREMENT | 工单ID | 主键 |
| ticket_type | VARCHAR | 255 | NOT NULL | '任务工单' | 工单类型 | 枚举值约束 |
| ticket_status | VARCHAR | 255 | NOT NULL | '未开始' | 工单状态 | 枚举值约束 |
| target_workpiece | INT | - | NULL | -1 | 目标产品ID | 外键约束 |
| ticket_from | VARCHAR | 255 | NOT NULL | '' | 工单来源 | - |
| ticket_tos | VARCHAR | 255 | NOT NULL | '' | 工单目标 | - |
| ticket_content | LONGTEXT | - | NULL | - | 工单内容 | - |
| ticket_title | VARCHAR | 255 | NOT NULL | '' | 工单标题 | - |
| feedback_text | LONGTEXT | - | NULL | - | 工单反馈内容 | - |
| image_list | VARCHAR | 1025 | NOT NULL | '' | 工单图片列表 | - |
| reference_list | VARCHAR | 1025 | NOT NULL | '' | 工单引用列表 | - |
| created_by | INT | - | NULL | -1 | 创建人 | - |
| updated_by | INT | - | NULL | -1 | 更新人 | - |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 | - |
| updated_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 更新时间 | 自动更新 |
业务约束:
- 支持多种工单类型和状态管理
- 工单与工件、图片、引用等多重关联
- 支持工单流程的完整生命周期管理
参考文件:
4. 图片管理模块
4.1 图片表 (image)
表结构定义:
CREATE TABLE IF NOT EXISTS `image` (
`id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '图片ID',
`key` VARCHAR(255) NOT NULL COMMENT '图片OSS Key',
`created_by` INT COMMENT '创建人' DEFAULT -1,
`updated_by` INT COMMENT '更新人' DEFAULT -1,
`created_at` DATETIME(6) NOT NULL COMMENT '创建时间' DEFAULT CURRENT_TIMESTAMP(6),
`updated_at` DATETIME(6) NOT NULL COMMENT '更新时间' DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)
) CHARACTER SET utf8mb4;
字段详细说明:
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 | 约束 |
|---|---|---|---|---|---|---|
| id | INT | - | NOT NULL | AUTO_INCREMENT | 图片ID | 主键 |
| key | VARCHAR | 255 | NOT NULL | - | 图片OSS Key | 唯一约束 |
| created_by | INT | - | NULL | -1 | 创建人 | - |
| updated_by | INT | - | NULL | -1 | 更新人 | - |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 | - |
| updated_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 更新时间 | 自动更新 |
业务约束:
- 图片实际存储在OSS对象存储中
- key字段存储OSS中的对象标识符
参考文件:
4.2 图片映射表 (image_mapping)
表结构定义:
CREATE TABLE IF NOT EXISTS `image_mapping` (
`id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
`workpiece_id` INT NOT NULL COMMENT '工件ID AKA Product ID',
`image_id` INT NOT NULL COMMENT '图片ID AKA Image ID',
`created_by` INT COMMENT '创建人' DEFAULT -1,
`updated_by` INT COMMENT '更新人' DEFAULT -1,
`created_at` DATETIME(6) NOT NULL COMMENT '创建时间' DEFAULT CURRENT_TIMESTAMP(6),
`updated_at` DATETIME(6) NOT NULL COMMENT '更新时间' DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)
) CHARACTER SET utf8mb4;
字段详细说明:
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 | 约束 |
|---|---|---|---|---|---|---|
| id | INT | - | NOT NULL | AUTO_INCREMENT | 映射ID | 主键 |
| workpiece_id | INT | - | NOT NULL | - | 工件ID | 外键约束 |
| image_id | INT | - | NOT NULL | - | 图片ID | 外键约束 |
| created_by | INT | - | NULL | -1 | 创建人 | - |
| updated_by | INT | - | NULL | -1 | 更新人 | - |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 | - |
| updated_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 更新时间 | 自动更新 |
业务约束:
- 支持多对多的图片-工件映射关系
- 一个工件可以关联多张图片
- 一张图片可以关联多个工件
参考文件:
5. 日志管理模块
5.1 访问日志表 (access_log)
表结构定义:
CREATE TABLE IF NOT EXISTS `access_log` (
`log_id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '日志ID',
`action_type` VARCHAR(255) NOT NULL COMMENT '操作类型' DEFAULT '',
`action_title` VARCHAR(255) NOT NULL COMMENT '操作标题' DEFAULT '',
`action_description` VARCHAR(255) NOT NULL COMMENT '操作描述' DEFAULT '',
`related_users` VARCHAR(255) COMMENT '相关用户',
`related_tickets` VARCHAR(255) COMMENT '相关工单',
`related_workpieces` VARCHAR(255) COMMENT '相关工件',
`created_by` INT COMMENT '创建人' DEFAULT -1,
`updated_by` INT COMMENT '更新人' DEFAULT -1,
`created_at` DATETIME(6) NOT NULL COMMENT '创建时间' DEFAULT CURRENT_TIMESTAMP(6),
`updated_at` DATETIME(6) NOT NULL COMMENT '更新时间' DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)
) CHARACTER SET utf8mb4;
字段详细说明:
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 | 约束 |
|---|---|---|---|---|---|---|
| log_id | INT | - | NOT NULL | AUTO_INCREMENT | 日志ID | 主键 |
| action_type | VARCHAR | 255 | NOT NULL | '' | 操作类型 | - |
| action_title | VARCHAR | 255 | NOT NULL | '' | 操作标题 | - |
| action_description | VARCHAR | 255 | NOT NULL | '' | 操作描述 | - |
| related_users | VARCHAR | 255 | NULL | - | 相关用户 | - |
| related_tickets | VARCHAR | 255 | NULL | - | 相关工单 | - |
| related_workpieces | VARCHAR | 255 | NULL | - | 相关工件 | - |
| created_by | INT | - | NULL | -1 | 创建人 | - |
| updated_by | INT | - | NULL | -1 | 更新人 | - |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 | - |
| updated_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 更新时间 | 自动更新 |
业务约束:
- 记录系统所有关键操作行为
- 支持操作审计和故障排查
- 关联用户、工单、工件等多维度信息
参考文件:
数据关系映射
主外键关系映射
flowchart TD
A[users.id] --> B[roles.user_id]
A --> C[ticket.created_by]
A --> D[image.created_by]
A --> E[access_log.created_by]
F[workpieces.workpiece_id] --> G[ticket.target_workpiece]
F --> H[image_mapping.workpiece_id]
I[image.id] --> J[image_mapping.image_id]
业务关系说明
- 用户-角色关系:一对多关系,一个用户可以拥有多个角色
- 用户-工单关系:一对多关系,用户可以创建多个工单
- 工件-工单关系:一对多关系,一个工件可以关联多个工单
- 工件-图片关系:多对多关系,通过image_mapping表实现
- 操作日志关联:访问日志与用户、工单、工件形成多对多关联
数据模型设计模式
1. 审计字段模式
所有业务表都包含标准的审计字段:
- created_by: 创建人
- updated_by: 更新人
- created_at: 创建时间
- updated_at: 更新时间
2. 状态管理模式
使用枚举字段管理业务状态:
- 用户状态:active/inactive/suspended/deleted
- 工单状态:未开始/进行中/已完成等
- 工件状态:数值型状态码
3. 混合存储模式
- 结构化数据:MySQL关系型存储
- 非结构化扩展数据:MongoDB文档存储
4. 关联映射模式
- 一对多关系:直接外键关联
- 多对多关系:通过中间映射表实现
数据库迁移管理
系统使用Aerich进行数据库迁移管理:
# 空数据库初始化
aerich init-db
# 模型更新
aerich migrate
aerich upgrade
参考文件:
索引
本文档详细描述了邮轮穿舱件管理系统后台的完整数据模型架构。系统采用精心设计的数据库结构,支持用户管理、工件跟踪、工单流程、图片管理和操作审计等核心业务功能。通过合理的表结构设计和关系映射,确保了数据的完整性、一致性和可扩展性。
关键设计特点包括:
- 标准化的审计字段设计
- 灵活的状态管理机制
- 混合存储架构支持
- 完整的关系映射体系
- 可扩展的业务字段设计
该数据模型为系统提供了稳定可靠的数据存储基础,支持复杂的业务逻辑和未来的功能扩展需求。