Files
hzdyjs/docs/业务模块/学工管理-宿舍管理/数据库设计/宿舍管理数据库设计.md
T
2025-07-20 13:21:33 +08:00

17 KiB

宿舍管理数据库设计文档

📋 文档信息

项目 信息
项目名称 校园管理系统 - 宿舍管理模块
数据库版本 MySQL 8.0+
文档版本 V1.0.0
创建时间 2025-01-14
创建人员 数据库设计团队
审核状态 待审核

🎯 设计目标

核心目标

  • 支持多维度宿舍管理人员分配(全校、校区、宿舍区、宿舍楼、二级学院)
  • 实现多级向下授权功能(5级权限体系)
  • 支持权限的动态配置和调整
  • 提供完整的管理效果评估功能
  • 确保数据安全和审计追踪

设计原则

  • 分层设计:按权限层级进行数据分层
  • 维度扩展:支持管理维度的灵活扩展
  • 权限控制:严格的数据权限控制机制
  • 审计追踪:完整的操作日志和变更记录
  • 性能优化:针对多维度查询的性能优化

🗄️ 数据库表设计

1. 宿舍管理维度表

1.1 宿舍管理维度定义表 (dorm_management_dimension)

表说明:定义宿舍管理的各个维度,支持维度的灵活扩展


1.2 校区信息表 (dorm_campus)

表说明:存储校区基本信息

DROP TABLE IF EXISTS `xg_dorm_campus`;
CREATE TABLE `xg_dorm_campus` (
  `id` bigint(20) NOT NULL COMMENT '主键ID',
  `campus_code` varchar(50) NOT NULL COMMENT '校区编码',
  `campus_name` varchar(100) NOT NULL COMMENT '校区名称',
  `campus_description` varchar(500) DEFAULT NULL COMMENT '校区描述',
  `sort_order` int(11) DEFAULT '0' COMMENT '排序号',
  `deleted` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
  `tenant_id` bigint(20) DEFAULT '0' COMMENT '租户编号',
  `create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_campus_code` (`campus_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='校区信息表';

1.3 宿舍区信息表 (dorm_area)

表说明:存储宿舍区基本信息,关联校区

DROP TABLE IF EXISTS `xg_dorm_building`;
CREATE TABLE `xg_dorm_building` (
  `id` bigint(20) NOT NULL COMMENT '主键ID',
  `building_code` varchar(50) NOT NULL COMMENT '宿舍楼编码',
  `building_name` varchar(100) NOT NULL COMMENT '宿舍楼名称',
  `area_id` bigint(20) NOT NULL COMMENT '所属宿舍区ID',
  `campus_id` bigint(20) NOT NULL COMMENT '所属校区ID',
  `building_type` char(1) DEFAULT '1' COMMENT '宿舍楼类型(1男生楼 2女生楼 3混合楼)',
  `building_description` varchar(500) DEFAULT NULL COMMENT '宿舍楼描述',
  `sort_order` int(11) DEFAULT '0' COMMENT '排序号',
  `deleted` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
  `tenant_id` bigint(20) DEFAULT '0' COMMENT '租户编号',
  `create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_building_code` (`building_code`),
  KEY `idx_area_id` (`area_id`),
  KEY `idx_campus_id` (`campus_id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='宿舍楼信息表';

1.4 宿舍楼信息表 (dorm_building)

表说明:存储宿舍楼基本信息,关联宿舍区

DROP TABLE IF EXISTS `xg_dorm_area`;
CREATE TABLE `xg_dorm_area` (
  `id` bigint(20) NOT NULL COMMENT '主键ID',
  `area_code` varchar(50) NOT NULL COMMENT '宿舍区编码',
  `area_name` varchar(100) NOT NULL COMMENT '宿舍区名称',
  `campus_id` bigint(20) NOT NULL COMMENT '所属校区ID',
  `area_description` varchar(500) DEFAULT NULL COMMENT '宿舍区描述',
  `sort_order` int(11) DEFAULT '0' COMMENT '排序号',
  `deleted` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
  `tenant_id` bigint(20) DEFAULT '0' COMMENT '租户编号',
  `create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_area_code` (`area_code`),
  KEY `idx_campus_id` (`campus_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='宿舍区信息表';

1.5 宿舍房间表 (dorm_room)

表说明:存储宿舍房间基本信息,关联宿舍楼,包含楼层属性

DROP TABLE IF EXISTS `xg_dorm_room`;
CREATE TABLE `xg_dorm_room` (
  `id` bigint(20) NOT NULL COMMENT '主键ID',
  `room_code` varchar(50) NOT NULL COMMENT '房间编号',
  `room_name` varchar(100) NOT NULL COMMENT '房间名称',
  `building_id` bigint(20) NOT NULL COMMENT '所属宿舍楼ID',
  `floor_num` int(11) NOT NULL COMMENT '楼层',
  `room_type` char(1) DEFAULT '1' COMMENT '房间类型(1学生宿舍 3教师宿舍)',
  `actual_beds` int(11) DEFAULT 4 COMMENT '实际床位数',
  `room_area` decimal(10,2) DEFAULT NULL COMMENT '房间面积(平方米)',
  `room_status` char(1) DEFAULT '0' COMMENT '房间状态(0可用 1维修中 2已报废)',
  `deleted` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
  `tenant_id` bigint(20) DEFAULT '0' COMMENT '租户编号',
  `create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_room_code` (`room_code`),
  KEY `idx_building_id` (`building_id`),
  KEY `idx_floor_num` (`floor_num`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='宿舍房间信息表';

1.6 宿舍床位表 (dorm_bed)

表说明:存储宿舍床位基本信息,关联宿舍房间

DROP TABLE IF EXISTS `xg_dorm_bed`;
CREATE TABLE `xg_dorm_bed` (
  `id` bigint(20) NOT NULL COMMENT '主键ID',
  `bed_code` varchar(50) NOT NULL COMMENT '床位编号',
  `bed_name` varchar(100) NOT NULL COMMENT '床位名称',
  `room_id` bigint(20) NOT NULL COMMENT '所属房间ID',
  `bed_type` char(1) DEFAULT '1' COMMENT '床位类型(1下铺 2上铺 3中铺 4独立床)',
  `bed_status` char(1) DEFAULT '0' COMMENT '床位状态(0空闲 1已分配 2维修中)',
  `deleted` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
  `tenant_id` bigint(20) DEFAULT '0' COMMENT '租户编号',
  `create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_bed_code` (`bed_code`),
  KEY `idx_room_id` (`room_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='宿舍床位信息表';

DROP TABLE IF EXISTS `xg_dorm_bed_student`;
CREATE TABLE `xg_dorm_bed_student` (
  `id` bigint(20) NOT NULL COMMENT '主键ID',
  `college_id` bigint(20) NOT NULL COMMENT '分配学院ID',
  `student_id` bigint(20) NOT NULL COMMENT '分配学生ID',
  `bed_id` bigint(20) NOT NULL COMMENT '床位ID',
  `room_id` bigint(20) NOT NULL COMMENT '房间ID',
  `building_id` bigint(20) NOT NULL COMMENT '宿舍楼ID',
  `area_id` bigint(20) NOT NULL COMMENT '宿舍区ID',
  `campus_id` bigint(20) NOT NULL COMMENT '校区ID',
  `status` char(1) DEFAULT '0' COMMENT '状态(0正常 1已退宿)',
  `assign_time` datetime NOT NULL COMMENT '分配时间',
  `checkout_time` datetime DEFAULT NULL COMMENT '退宿时间',
  `deleted` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
  `tenant_id` bigint(20) DEFAULT '0' COMMENT '租户编号',
  `create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_student_bed` (`student_id`, `bed_id`),
  KEY `idx_college_id` (`college_id`),
  KEY `idx_student_id` (`student_id`),
  KEY `idx_bed_id` (`bed_id`),
  KEY `idx_room_id` (`room_id`),
  KEY `idx_building_id` (`building_id`),
  KEY `idx_area_id` (`area_id`),
  KEY `idx_campus_id` (`campus_id`),
  KEY `idx_assign_time` (`assign_time`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='床位学生分配关系表';

2. 宿舍管理人员相关表

2.1 宿舍管理员表 (dorm_manager)

表说明:存储全校、校区、宿舍区、宿舍楼管理员的基本信息

DROP TABLE IF EXISTS `xg_dorm_manager`;
CREATE TABLE `xg_dorm_manager` (
  `id` bigint(20) NOT NULL COMMENT '主键ID',
  `manager_name` varchar(100) NOT NULL COMMENT '管理员姓名',
  `manager_type` char(1) NOT NULL COMMENT '管理员类型(1全校管理员 2校区管理员 3宿舍区管理员 4宿舍楼管理员)',
  `manager_level` int(11) DEFAULT 1 COMMENT '管理级别(1-5,1为最高)',
  `user_id` bigint(20) DEFAULT NULL COMMENT '关联用户ID',
  `phone` varchar(20) DEFAULT NULL COMMENT '联系电话',
  `gender` char(1) DEFAULT '0' COMMENT '性别(0男 1女 2未知)',
  `status` char(1) DEFAULT '0' COMMENT '状态(0正常 1停用)',
  `deleted` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
  `tenant_id` bigint(20) DEFAULT '0' COMMENT '租户编号',
  `create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_manager_type` (`manager_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='宿舍管理员信息表';

DROP TABLE IF EXISTS `xg_dorm_manager_source`;
CREATE TABLE `xg_dorm_manager_source` (
  `id` bigint(20) NOT NULL COMMENT '主键ID',
  `manager_id` bigint(20) NOT NULL COMMENT '管理员ID',
  `permission_type` char(1) DEFAULT '1' COMMENT '权限类型(1查看 2编辑 3完全管理)',
  `auth_type` char(1) NOT NULL COMMENT '授权类型(1全校级 2校区级 3宿舍区级 4楼栋级)',
  `auth_source` bigint(20) DEFAULT NULL COMMENT '授权来源ID(对应校区ID或宿舍区ID或楼栋ID)',
  `status` char(1) DEFAULT '0' COMMENT '状态(0有效 1已撤销)',
  `deleted` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
  `tenant_id` bigint(20) DEFAULT '0' COMMENT '租户编号',
  `create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`),
  KEY `idx_manager_id` (`manager_id`),
  KEY `idx_auth_source` (`auth_source`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='管理员授权关系表';

2.2 管理员宿舍楼权限关系表 (dorm_manager_building)

表说明:存储管理员与宿舍楼的权限绑定关系



DROP TABLE IF EXISTS `xg_dorm_manager_building`;
CREATE TABLE `xg_dorm_manager_building` (
  `id` bigint(20) NOT NULL COMMENT '主键ID',
  `manager_id` bigint(20) NOT NULL COMMENT '管理员ID',
  `building_id` bigint(20) NOT NULL COMMENT '宿舍楼ID',
  `status` char(1) DEFAULT '0' COMMENT '状态(0有效 1已撤销)',
  `deleted` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
  `tenant_id` bigint(20) DEFAULT '0' COMMENT '租户编号',
  `create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_manager_building` (`manager_id`, `building_id`),
  KEY `idx_manager_id` (`manager_id`),
  KEY `idx_building_id` (`building_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='管理员宿舍楼权限关系表';

2.3 二级学院宿舍管理员表 (dorm_college_manager)

表说明:存储二级学院宿舍管理员的基本信息

DROP TABLE IF EXISTS `xg_dorm_college_manager`;
CREATE TABLE `xg_dorm_college_manager` (
  `id` bigint(20) NOT NULL COMMENT '主键ID',
  `manager_name` varchar(100) NOT NULL COMMENT '管理员姓名',
  `college_id` bigint(20) NOT NULL COMMENT '所属学院ID',
  `user_id` bigint(20) DEFAULT NULL COMMENT '关联用户ID',
  `phone` varchar(20) DEFAULT NULL COMMENT '联系电话',
  `gender` char(1) DEFAULT '0' COMMENT '性别(0男 1女 2未知)',
  `status` char(1) DEFAULT '0' COMMENT '状态(0正常 1停用)',
  `deleted` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
  `tenant_id` bigint(20) DEFAULT '0' COMMENT '租户编号',
  `create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`),
  KEY `idx_college_id` (`college_id`),
  KEY `idx_user_id` (`user_id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='二级学院宿舍管理员信息表';

2.4 二级学院床位绑定关系表 (dorm_college_bed)

表说明:存储二级学院与床位的绑定关系

DROP TABLE IF EXISTS `xg_dorm_college_bed`;
CREATE TABLE `xg_dorm_college_bed` (
  `id` bigint(20) NOT NULL COMMENT '主键ID',
  `college_id` bigint(20) NOT NULL COMMENT '学院ID',
  `bed_id` bigint(20) NOT NULL COMMENT '床位ID',
  `building_id` bigint(20) NOT NULL COMMENT '宿舍楼ID',
  `room_id` bigint(20) NOT NULL COMMENT '房间ID',
  `status` char(1) DEFAULT '0' COMMENT '状态(0正常 1已解除)',
  `assign_time` datetime DEFAULT NULL COMMENT '分配时间',
  `release_time` datetime DEFAULT NULL COMMENT '到期解除时间',
  `deleted` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
  `tenant_id` bigint(20) DEFAULT '0' COMMENT '租户编号',
  `create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_college_bed` (`college_id`, `bed_id`),
  KEY `idx_college_id` (`college_id`),
  KEY `idx_bed_id` (`bed_id`),
  KEY `idx_building_id` (`building_id`),
  KEY `idx_room_id` (`room_id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='二级学院床位绑定关系表';

🔗 表关系设计

1. 维度关系图

dorm_campus (校区)
├── dorm_area (宿舍区)
│   └── dorm_building (宿舍楼)
└── dorm_college (二级学院)

2. 权限层级关系图

dorm_permission_level (权限层级)
├── Level 1: 学生处宿舍管理负责人
├── Level 2: 校区宿舍管理负责人
├── Level 3: 宿舍区主管
├── Level 4: 宿舍楼管理员
└── Level 5: 二级学院宿舍管理负责人

📊 索引设计

1. 主键索引

  • 所有表都使用 bigint(20) 类型的自增主键
  • 主键命名统一为 id

2. 唯一索引

  • 编码字段:manager_code, campus_code, area_code, building_code, college_code
  • 身份证号:id_card
  • 权限层级值:level_value

3. 复合索引

  • 管理人员分配:(manager_id, dimension_type, dimension_id)
  • 权限配置:(manager_id, permission_level_id, dimension_type)
  • 统计数据:(manager_id, dimension_type, dimension_id, stats_date)

4. 普通索引

  • 状态字段:status, approval_status, permission_status
  • 时间字段:create_time, update_time, operation_time
  • 关联字段:campus_id, area_id, position_id

🔒 数据安全设计

1. 敏感信息加密

  • 身份证号:使用AES加密存储
  • 手机号码:部分脱敏显示
  • 邮箱地址:部分脱敏显示

2. 权限控制

  • 数据权限:基于维度的数据访问控制
  • 功能权限:基于角色的功能访问控制
  • 操作权限:基于权限层级的操作控制

3. 审计日志

  • 权限变更:完整的权限变更记录
  • 操作日志:详细的操作行为记录
  • 数据变更:重要数据的变更追踪

📈 性能优化设计

1. 分区策略

  • 按时间分区:dorm_permission_usage 表按月份分区
  • 按维度分区:dorm_management_stats 表按维度分区

2. 缓存策略

  • 权限缓存:管理人员权限信息缓存
  • 维度缓存:维度信息缓存
  • 统计缓存:统计数据缓存

3. 查询优化

  • 索引优化:针对多维度查询的复合索引
  • SQL优化:避免全表扫描的查询语句
  • 分页优化:大数据量的分页查询优化

📝 变更记录

版本 日期 变更内容 变更人
V1.0.0 2025-01-14 初始版本创建 数据库设计团队