首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

會議日程系統後端設計:多天多時段的靈活數據結構

     編輯:程式設計綜合問答

需求分析

開發「會議通」移動項目,會議可能持續 N 天,每天包含 N 個時間段。客戶端需以列表形式動態展示,例如:

2013年5月7日 展覽館
9:00--10:00 簽到
10:00--12:00 開幕式
14:00--16:00 展覽

2013年5月8日
9:00--10:00 Xxxx
10:00--12:00 xxx

數據庫設計方案

方案一:扁平化表結構(推薦)

單表存儲所有日程項目,通過字段關聯天與時段:

CREATE TABLE conference_schedule (
    id INT PRIMARY KEY AUTO_INCREMENT,
    conference_id INT NOT NULL,          -- 會議ID
    date DATE NOT NULL,                  -- 日期
    location VARCHAR(255),               -- 地點(可為空,繼承當天首個地點)
    start_time TIME NOT NULL,            -- 開始時間
    end_time TIME NOT NULL,              -- 結束時間
    title VARCHAR(255) NOT NULL,         -- 議程標題
    description TEXT,                    -- 詳細描述
    sort_order INT DEFAULT 0,            -- 同一時段多項目的排序
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

優點:查詢簡單、易於分頁、支持任意粒度的時間段、擴展性強。

方案二:JSON 字段存儲(適用於結構固定)

若日程結構相對固定,可將每天日程序列化為 JSON:

CREATE TABLE conference_daily_schedule (
    id INT PRIMARY KEY AUTO_INCREMENT,
    conference_id INT NOT NULL,
    schedule_date DATE NOT NULL,
    location VARCHAR(255),
    schedule_json JSON NOT NULL,  -- 存儲 [{start, end, title, ...}, ...]
    UNIQUE KEY uk_conf_date (conference_id, schedule_date)
);

優點:減少關聯查詢、適合整天日程整體讀取。缺點:難以針對單個時段查詢、修改需整體覆寫。

API 設計建議

提供按會議 ID 獲取日程的接口,返回按日期分組的結構:

GET /api/conferences/{id}/schedule

Response:
{
  "schedule": [
    {
      "date": "2013-05-07",
      "location": "展覽館",
      "sessions": [
        {"start": "09:00", "end": "10:00", "title": "簽到"},
        {"start": "10:00", "end": "12:00", "title": "開幕式"},
        {"start": "14:00", "end": "16:00", "title": "展覽"}
      ]
    },
    {
      "date": "2013-05-08",
      "location": "",
      "sessions": [
        {"start": "09:00", "end": "10:00", "title": "Xxxx"},
        {"start": "10:00", "end": "12:00", "title": "xxx"}
      ]
    }
  ]
}

服務端實現要點

  1. 數據驗證:確保時間段不重疊、日期連續性。
  2. 批量導入:支持 Excel/CSV 導入,後端解析後批量寫入。
  3. 緩存策略:日程數據變動較少,建議使用 Redis 緩存完整結構。
  4. 版本控制:重要會議日程修改需記錄操作日誌,支持回滾。

總結

採用扁平化表結構配合按日期分組的 API 輸出,兼顧了查詢效率、擴展性與客戶端渲染便利性,是會議日程系統的推薦做法。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved