跳到主要内容

邮轮穿舱件管理系统后台 - 数据模型文档

概述

本文档详细描述了邮轮穿舱件管理系统后台的完整数据模型结构,包括所有数据库表结构、字段定义、关系映射和业务约束。系统采用混合数据库架构,主要使用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;

字段详细说明:

字段名类型长度是否为空默认值说明约束
idINT-NOT NULLAUTO_INCREMENT用户ID主键
usernameVARCHAR255NOT NULL-用户名唯一约束
passwordVARCHAR511NOT NULL-密码-
emailVARCHAR255NULL-邮箱唯一约束
smsVARCHAR255NULL-手机号码-
statusVARCHAR255NOT NULL'active'用户状态枚举值约束
openidVARCHAR255NULL-微信OpenID-
is_systemBOOL-NOT NULL0是否系统用户-
created_byINT-NULL-1创建人-
updated_byINT-NULL-1更新人-
created_atDATETIME-NOT NULLCURRENT_TIMESTAMP创建时间-
updated_atDATETIME-NOT NULLCURRENT_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;

字段详细说明:

字段名类型长度是否为空默认值说明约束
idINT-NOT NULLAUTO_INCREMENT角色ID主键
user_idINT-NOT NULL-用户ID外键约束
scope_listVARCHAR255NULL''权限列表-
scope_groupVARCHAR255NULL''权限组-
created_byINT-NULL-1创建人-
updated_byINT-NULL-1更新人-
created_atDATETIME-NOT NULLCURRENT_TIMESTAMP创建时间-
updated_atDATETIME-NOT NULLCURRENT_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_idINT-NOT NULLAUTO_INCREMENT工件ID主键
workpiece_statusINT-NULL0工件状态枚举值约束
inspect_referenceINT-NULL0视检参考工单ID外键约束
maintainance_referenceINT-NULL0维护参考工单ID外键约束
created_byINT-NULL-1创建人-
updated_byINT-NULL-1更新人-
created_atDATETIME-NOT NULLCURRENT_TIMESTAMP创建时间-
updated_atDATETIME-NOT NULLCURRENT_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工件IDstring与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_coordinateZ坐标string空间坐标信息
wp_frame_station肋位string结构位置信息
wp_longitudinal_stiffener纵桁string结构加强信息
wp_sap1SAP1stringSAP系统关联字段1
wp_sap2SAP2stringSAP系统关联字段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_idINT-NOT NULLAUTO_INCREMENT工单ID主键
ticket_typeVARCHAR255NOT NULL'任务工单'工单类型枚举值约束
ticket_statusVARCHAR255NOT NULL'未开始'工单状态枚举值约束
target_workpieceINT-NULL-1目标产品ID外键约束
ticket_fromVARCHAR255NOT NULL''工单来源-
ticket_tosVARCHAR255NOT NULL''工单目标-
ticket_contentLONGTEXT-NULL-工单内容-
ticket_titleVARCHAR255NOT NULL''工单标题-
feedback_textLONGTEXT-NULL-工单反馈内容-
image_listVARCHAR1025NOT NULL''工单图片列表-
reference_listVARCHAR1025NOT NULL''工单引用列表-
created_byINT-NULL-1创建人-
updated_byINT-NULL-1更新人-
created_atDATETIME-NOT NULLCURRENT_TIMESTAMP创建时间-
updated_atDATETIME-NOT NULLCURRENT_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;

字段详细说明:

字段名类型长度是否为空默认值说明约束
idINT-NOT NULLAUTO_INCREMENT图片ID主键
keyVARCHAR255NOT NULL-图片OSS Key唯一约束
created_byINT-NULL-1创建人-
updated_byINT-NULL-1更新人-
created_atDATETIME-NOT NULLCURRENT_TIMESTAMP创建时间-
updated_atDATETIME-NOT NULLCURRENT_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;

字段详细说明:

字段名类型长度是否为空默认值说明约束
idINT-NOT NULLAUTO_INCREMENT映射ID主键
workpiece_idINT-NOT NULL-工件ID外键约束
image_idINT-NOT NULL-图片ID外键约束
created_byINT-NULL-1创建人-
updated_byINT-NULL-1更新人-
created_atDATETIME-NOT NULLCURRENT_TIMESTAMP创建时间-
updated_atDATETIME-NOT NULLCURRENT_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_idINT-NOT NULLAUTO_INCREMENT日志ID主键
action_typeVARCHAR255NOT NULL''操作类型-
action_titleVARCHAR255NOT NULL''操作标题-
action_descriptionVARCHAR255NOT NULL''操作描述-
related_usersVARCHAR255NULL-相关用户-
related_ticketsVARCHAR255NULL-相关工单-
related_workpiecesVARCHAR255NULL-相关工件-
created_byINT-NULL-1创建人-
updated_byINT-NULL-1更新人-
created_atDATETIME-NOT NULLCURRENT_TIMESTAMP创建时间-
updated_atDATETIME-NOT NULLCURRENT_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]

业务关系说明

  1. 用户-角色关系:一对多关系,一个用户可以拥有多个角色
  2. 用户-工单关系:一对多关系,用户可以创建多个工单
  3. 工件-工单关系:一对多关系,一个工件可以关联多个工单
  4. 工件-图片关系:多对多关系,通过image_mapping表实现
  5. 操作日志关联:访问日志与用户、工单、工件形成多对多关联

数据模型设计模式

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

参考文件:

索引

本文档详细描述了邮轮穿舱件管理系统后台的完整数据模型架构。系统采用精心设计的数据库结构,支持用户管理、工件跟踪、工单流程、图片管理和操作审计等核心业务功能。通过合理的表结构设计和关系映射,确保了数据的完整性、一致性和可扩展性。

关键设计特点包括:

  • 标准化的审计字段设计
  • 灵活的状态管理机制
  • 混合存储架构支持
  • 完整的关系映射体系
  • 可扩展的业务字段设计

该数据模型为系统提供了稳定可靠的数据存储基础,支持复杂的业务逻辑和未来的功能扩展需求。