You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

日程规划网站日历数据库设计及关联实现技术咨询

嘿,很高兴看到你已经搞定了用户注册登录和基础用户表!针对日历模块的数据库设计和关联逻辑,我结合类似Google Calendar的核心功能,给你梳理一套实用的方案,应该能帮你理清思路:

核心数据库表设计与关联逻辑

首先,你的初步思路(用户拥有唯一ID)是完全正确的,我们以此为核心,向外扩展日历、事件、截止事项等模块的关联关系:

1. 基础用户表(你已完成,这里做补充确认)

你的users表应该已经包含了用户唯一标识,推荐字段:

CREATE TABLE users (
    user_id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) UNIQUE NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL,
    password_hash VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

user_id将作为所有其他表关联用户的核心外键。

2. 日历表(calendars)

一个用户通常会有多个日历(比如个人、工作、家庭),单独抽离日历表能让功能更灵活:

  • 字段:calendar_id(主键)、user_id(外键关联users.user_id)、calendar_name、color(日历显示颜色)、is_default(是否为用户默认日历)、created_at
  • 关联逻辑:用户 ↔ 日历 是一对多关系(一个用户可拥有多个日历)
  • 创建SQL:
CREATE TABLE calendars (
    calendar_id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    calendar_name VARCHAR(100) NOT NULL,
    color VARCHAR(7) DEFAULT '#3366CC', -- 十六进制颜色码
    is_default BOOLEAN DEFAULT FALSE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE
);

ON DELETE CASCADE表示当用户被删除时,其下所有日历也会被自动删除,避免数据冗余。

3. 事件表(events)

对应日历中的活动/会议等时间区间型事项:

  • 字段:event_id(主键)、calendar_id(外键关联calendars.calendar_id)、title、description、start_time、end_time、is_all_day(是否为全天事件)、location、reminder_time(提前提醒分钟数)、created_at、updated_at
  • 关联逻辑:日历 ↔ 事件 是一对多关系(一个日历下可创建多个事件)
  • 创建SQL:
CREATE TABLE events (
    event_id INT AUTO_INCREMENT PRIMARY KEY,
    calendar_id INT NOT NULL,
    title VARCHAR(255) NOT NULL,
    description TEXT,
    start_time DATETIME NOT NULL,
    end_time DATETIME NOT NULL,
    is_all_day BOOLEAN DEFAULT FALSE,
    location VARCHAR(255),
    reminder_time INT, -- 比如30表示提前30分钟提醒
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (calendar_id) REFERENCES calendars(calendar_id) ON DELETE CASCADE
);

4. 截止事项表(deadlines)

对应任务、待办等有明确截止时间的事项(和事件的区别是没有开始时间,重点在截止点):

  • 字段:deadline_id(主键)、calendar_id(外键关联calendars.calendar_id)、title、description、due_time、is_completed(是否完成)、priority(优先级:低/中/高)、reminder_time、created_at、updated_at
  • 关联逻辑:日历 ↔ 截止事项 是一对多关系(一个日历下可创建多个截止事项)
  • 创建SQL:
CREATE TABLE deadlines (
    deadline_id INT AUTO_INCREMENT PRIMARY KEY,
    calendar_id INT NOT NULL,
    title VARCHAR(255) NOT NULL,
    description TEXT,
    due_time DATETIME NOT NULL,
    is_completed BOOLEAN DEFAULT FALSE,
    priority ENUM('low', 'medium', 'high') DEFAULT 'medium',
    reminder_time INT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (calendar_id) REFERENCES calendars(calendar_id) ON DELETE CASCADE
);

5. 可选扩展:重复事件表(event_recurrences)

如果要支持重复事件(比如每周一的例会),单独抽离重复规则表会更清晰:

CREATE TABLE event_recurrences (
    recurrence_id INT AUTO_INCREMENT PRIMARY KEY,
    event_id INT NOT NULL,
    recurrence_type ENUM('daily', 'weekly', 'monthly', 'yearly') NOT NULL,
    interval INT DEFAULT 1, -- 比如interval=2表示每2周重复
    end_date DATE, -- 重复结束日期
    FOREIGN KEY (event_id) REFERENCES events(event_id) ON DELETE CASCADE
);
整体关联链路总结

用户 → 多个日历 → 每个日历下包含多个事件/截止事项
这种设计的好处是:

  • 逻辑清晰,各模块职责明确
  • 支持用户管理多日历(比如工作和个人日程分离)
  • 方便后续扩展共享日历、权限控制等功能

内容的提问来源于stack exchange,提问作者Dino Paolo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:14:19