优秀的编程知识分享平台

网站首页 > 技术文章 正文

微信小程序云开发教室预约系统的数据库设计

nanyue 2025-05-25 14:29:09 技术文章 10 ℃

为了满足教学楼、楼层和教室数量不固定的条件,同时实现教室使用状态的时间段管理,我采用了一种灵活且可扩展的数据库设计方案。

1. 数据库表结构设计

基于微信小程序云开发的特点,我这里使用 MongoDB 文档型数据库来存储数据。以下是针对教室预约功能的核心表结构设计。

(1)USERS集合 - 用户信息

用于存储用户的基本信息和权限。

{
    "_id": "user_001", // 唯一标识符
    "openid": "oxxxxxxxxxxxxxxx", // 微信用户的唯一标识
    "name": "张三", // 用户姓名
    "role": "student" // 用户角色(学生、教师或其他)
}

(2)BUILDINGS集合 - 教学楼信息

记录所有教学楼的相关信息。

{
    "_id": "building_A", // 唯一标识符
    "name": "A栋教学楼", // 教学楼名称
    "floors_count": 5, // 楼层数量
    "description": "位于校园东侧的教学楼" // 描述信息
}

(3)FLOORS集合 - 楼层信息

记录每层楼的具体信息。

{
    "_id": "floor_A1", // 唯一标识符
    "number": 1, // 楼层数字编号
    "building_id": "building_A", // 所属教学楼ID
    "classrooms_count": 10 // 该楼层教室总数
}
  

(4)CLASSROOMS集合 - 教室信息

详细记录每个教室的情况,包括容量、设备配置以及时间安排。

{
    "_id": "room_A101", // 唯一标识符
    "name": "多媒体教室101", // 教室名称
    "capacity": 50, // 容纳人数
    "equipment": ["投影仪", "音响"], // 设备清单
    "floor_id": "floor_A1", // 所属楼层ID
    "schedule": [ // 时间段安排
        {
            "date": "2023-11-01", // 使用日期
            "time_slots": [ // 时间段列表
                {"start_time": "08:00", "end_time": "09:00", "status": "available"}, // 可用
                {"start_time": "09:00", "end_time": "10:00", "status": "booked"}     // 已预订
            ]
        },
        {
            "date": "2023-11-02",
            "time_slots": [
                {"start_time": "10:00", "end_time": "11:00", "status": "booked"},
                {"start_time": "11:00", "end_time": "12:00", "status": "available"}
            ]
        }
    ]
}
       

(5)RESERVATIONS集合 - 预约记录

保存每次预约的历史记录。

{
    "_id": "reservation_001", // 唯一标识符
    "user_id": "user_001", // 预约用户ID
    "classroom_id": "room_A101", // 教室ID
    "date": "2023-11-01", // 预约日期
    "time_slot": { // 预约时间段
        "start_time": "09:00",
        "end_time": "10:00"
    },
    "purpose": "课程考试", // 预约用途
    "created_at": "2023-10-25T14:30:00Z" // 创建时间
}
 

2. 数据完善策略

为了使数据库更加实用和完善,可以从以下几个方面入手:

(1)初始化基础数据

在项目启动阶段,预先录入一些必要的基础数据,例如教学楼、楼层和教室的基础信息。这些数据可以通过批量导入脚本完成。

// 初始化教学楼数据
const buildingsData = [
    { _id: "building_A", name: "A栋教学楼", floors_count: 5, description: "..." },
    { _id: "building_B", name: "B栋教学楼", floors_count: 7, description: "..." }
];

db.collection('buildings').add(buildingsData);

(2)动态更新时间安排

每天定时运行任务,清理过期的时间段状态,并重新设置默认为空闲状态。

// 清理过期时间段
db.collection('classrooms').updateMany({}, {
    $pull: {
        schedule: { date: { $lt: new Date().toISOString().split('T')[0] } }
    }
});

// 添加新日期,默认状态为可用
db.collection('classrooms').updateMany({}, {
    $push: {
        schedule: {
            date: new Date().toISOString().split('T')[0],
            time_slots: [
                { start_time: "08:00", end_time: "09:00", status: "available" },
                { start_time: "09:00", end_time: "10:00", status: "available" }
            ]
        }
    }
});   

(3)用户反馈机制

允许用户提交关于教室设施或预约过程中的问题反馈,以便及时改进系统。

{
    "_id": "feedback_001",
    "user_id": "user_001",
    "content": "多媒体教室101的投影仪无法正常使用。",
    "created_at": "2023-10-26T10:00:00Z"
} 

3. 功能实现的关键点

  • 用户认证:通过 wx.login 接口获取用户的 OpenID,并将其与用户信息绑定。
  • 教室查询:提供按条件筛选的功能,例如按照教学楼、楼层、容纳人数等过滤教室。
  • 时间选择:利用 <picker> 组件让用户选择具体的日期和时间段,并验证所选时间段是否冲突。


最近发表
标签列表