我正在尝试建立一种管理事件和事件出勤的方法。
我有一个events
表,该表具有以下相关字段:
id BIGINT NOT NULL UNIQUE
starts_at TIMESTAMPTZ NOT NULL
ends_at TIMESTAMPTZ
recurrence_days INT
recurrence_months INT
PRIMARY KEY(id)
有了这个,我就能得到“今天”或任意日期发生的单次或重复发生的事件。
不幸的是,我正在努力应对活动出席率。我有一个events_attendance
表,其中有event_id
(来自id
表的events
)和user_id
,但是我不确定如何处理重复事件
有没有一种设计方法,这样我就不需要“复制”事件了?
答案 0 :(得分:2)
您不应该避免避免记录重复事件的实例。那就是数据库的用途。
您需要一个recurringevent
表,每个表具有一个包含重复规则的每个重复事件记录。一个非常简单的方法如下:
id
event_name
start_date
end_date
DaysBetween
RecordCreateDateTime
RecordCreatedBy
请注意,根据日历对重复事件进行建模非常复杂……每周一次,每月一次,每月第二个星期二。
您需要另一个记录该重复事件的“实例”的表,例如events
。它具有每个实际事件的记录,并带有对recurringevent
的引用。创建,编辑,删除父recurringevent
记录会自动生成这些记录。
此表中的记录可能是也可能不是由重复事件生成的。您可能只发生了一次事件,在这种情况下,您只有一个events
条记录,而没有父级recurringevent
。
id
recurringevent_id (null if this is a once off)
date
event_name
RecordCreateDateTime
RecordCreatedBy
然后,您需要一个eventattendance
表,每个参会人员一行,这将返回到events
id
event_id
user_id
event_feedback
RecordCreateDateTime
RecordCreatedBy
现在,您的events
表正试图成为两件事。它只能代表一个实际的“事件”,而不能保存重复发生的信息。