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

日程类JSON请求的数据库表设计方案咨询

1、针对该JSON请求可设计的数据库表数量

建议设计4张数据库表,完全覆盖JSON所有字段且满足数据库范式要求,各表对应存储内容如下:

  • event_basic(事件基础主表):存储JSON第一层的通用公共字段,包括standard、section、subject、type、startTime、allDayEvent、startTimezone、endTimezone、endTime,新增主键event_id作为所有关联表的外键关联依据
  • event_recurrence_rule(重复规则表):存储repeat对象下除周重复多值字段外的所有规则字段,包括frequency、interval,以及月度、年度重复的专属字段:monthlydayOfMonth、monthlyIndex、monthlydayOfWeek、month、yearlydayOfMonth、yearlyIndex、yearlydayOfWeek,通过event_id关联主表
  • event_recurrence_end(重复终止规则表):存储until对象下的所有字段,包括neverFlag、occurrence、endDate,通过event_id关联主表
  • event_weekly_weekday(周重复星期映射表):专门存储多值的weeklydaysOfWeek字段,通过event_id关联主表

2、多值weeklydaysOfWeek字段的单独存储方案

weeklydaysOfWeek是典型的一对多关联字段,单个事件会对应多个星期值,所以单独用event_weekly_weekday映射表存储,设计逻辑如下:

  • 表仅保留两个核心字段:关联主表的外键event_id,以及存储单个星期值的weekday_value(比如用数字1-7对应周一到周日)
  • 用event_id + weekday_value作为联合主键,避免同一个事件重复存储相同的星期值

举个实际场景例子:如果某个周重复事件需要每周一、周三、周五触发,那么该表会生成3条同event_id的记录,weekday_value分别为1、3、5。

3、基于until对象endDate字段返回内容的实现方案

分存储和查询返回两个环节实现:

存储环节

将endDate以DATETIME类型存入event_recurrence_end表的对应字段,没有传值时存NULL即可,每条endDate记录和对应事件的event_id绑定关联。

查询返回环节

  • 过滤查询时如果需要按时间范围筛选事件,可直接加条件:event_recurrence_end.endDate BETWEEN 【查询起始时间】 AND 【查询结束时间】,如果是neverFlag为true的永久重复事件,可根据业务需求决定是否返回全量符合规则的记录
  • 接口组装返回值时,直接从event_recurrence_end表取出对应event_id的endDate值,拼装到until对象的对应属性中返回即可

内容的提问来源于stack exchange,提问作者Teja sree

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:36:03