postgres中具有重复间隔功能的日历数据库查询

时间:2013-08-27 10:49:04

标签: sql database postgresql

我有三个日历功能表。 说event表格有event_iddescription等。

event_schedule表格包含event_idevent_start_date以及event_end_date

event_repeat表格包含event_Schedule_idevent_start_date以及

repeats(可以是每周,每月,每天,每年)和repeat_every(1,2,3这是间隔)

repeat_on(星期一,星期二,星期三,等等,有时空白)和 starts_on(开始日期与event_schedule表中的相同日期)和ends_never(继续进行) end_occurences(没有出现), ends_on是结束日期, event_schedule_id映射到事件计划表和 repeated_by_month是(如果每月这将有助于确定本月的开始是本周结束) 请找到表结构

CREATE TABLE events
(
  event_id serial NOT NULL,
  event_name text,
  city text,
  description text,
  active_status text,
  discount text,
  user_id integer,
  inserted_date timestamp without time zone,
  modified_date timestamp without time zone,
  state text,
  CONSTRAINT event_pkey PRIMARY KEY (event_id ),
  CONSTRAINT event_user_id_fkey FOREIGN KEY (user_id)
      REFERENCES users (user_id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE CASCADE
)

CREATE TABLE event_schedules
(
  schedule_id serial NOT NULL,
  schedule_mode text,
  start_date date,
  end_date date,
  start_time time without time zone,
  end_time time without time zone,
  repeat text,
  activity_id integer,
  business_hours text,
  modified_date timestamp without time zone,
  CONSTRAINT event_schedules_pkey PRIMARY KEY (schedule_id ),
  CONSTRAINT event_schedules_event_id_fkey FOREIGN KEY (event_id)
      REFERENCES events (event_id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE CASCADE
)


CREATE TABLE event_repeats
(
  repeat_id serial NOT NULL,
  repeats text,
  repeat_every text,
  repeat_on text,
  starts_on date,
  ends_never boolean,
  end_occurences text,
  ends_on date,
  event_schedule_id integer,
  modified_date timestamp without time zone,
  repeated_by_month boolean,
  repeat_week text,
  CONSTRAINT event_repeats_pkey PRIMARY KEY (repeat_id ),
  CONSTRAINT event_repeats_event_schedule_id_fkey FOREIGN KEY (event_schedule_id)
      REFERENCES event_schedules (schedule_id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE CASCADE
)

1 个答案:

答案 0 :(得分:0)

我认为你将不得不使用“重复”时间表仅用于初始调度。事情可能会被重新安排,所以你不想依赖它作为权威。定期(可能每月一次?)您可能想要通过并使用该逻辑来创建新事件。要完成这项工作,您必须在调度表中添加“most_recent_repeat”字段等,这可以是日期或自联接。无论如何,每个事件都应该为每次事件都有自己的调度条目。

如果这不能回答你的问题,你不清楚你在问什么。也许你可以澄清一下?