Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 重复事件考勤数据库设计_Sql_Postgresql_Database Design - Fatal编程技术网

Sql 重复事件考勤数据库设计

Sql 重复事件考勤数据库设计,sql,postgresql,database-design,Sql,Postgresql,Database Design,我正在尝试建立一种管理活动和活动出席率的方法 我有一个events表,其中包含以下相关字段: id BIGINT NOT NULL UNIQUE starts_at TIMESTAMPTZ NOT NULL ends_at TIMESTAMPTZ recurrence_days INT recurrence_months INT PRIMARY KEY(id) 有了它,我就能够获得“今天”或任意日期发生的单一事件或重复事件 不幸的是,我正在努力解决如何处理活动出席问题。我有一个事件出席表,其中

我正在尝试建立一种管理活动和活动出席率的方法

我有一个
events
表,其中包含以下相关字段:

id BIGINT NOT NULL UNIQUE
starts_at TIMESTAMPTZ NOT NULL
ends_at TIMESTAMPTZ
recurrence_days INT
recurrence_months INT
PRIMARY KEY(id)
有了它,我就能够获得“今天”或任意日期发生的单一事件或重复事件

不幸的是,我正在努力解决如何处理活动出席问题。我有一个
事件出席
表,其中有
事件id
事件
表中的
id
)和
用户id
,但我不确定如何处理重复事件


是否有一种设计方法,使我不需要“复制”事件

您不应该试图避免记录重复事件的实例。这就是数据库的用途

您需要一个
recurringevent
表,其中每个定期事件都有一条记录,其中包含定期规则。一个非常简单的例子如下:

id
event_name
start_date
end_date
DaysBetween
RecordCreateDateTime
RecordCreatedBy
请注意,根据日历对重复事件进行建模非常复杂。。。每周一次,每月一次,每月第二个星期二

您需要另一个记录重复事件的“实例”的表,例如
事件
。它有每个实际事件的记录,并引用回
recurringevent
。创建、编辑、删除父记录会自动生成这些记录

此表中的记录可能由周期性事件生成,也可能不由周期性事件生成。您可能只有一个一次性事件,在这种情况下,您有一个
events
记录,没有父
recurringevent

id
recurringevent_id   (null if this is a once off)
date
event_name
RecordCreateDateTime
RecordCreatedBy
然后,您需要一个
eventAttention
表,每个出席者一行,该表引用
events

id
event_id
user_id
event_feedback
RecordCreateDateTime
RecordCreatedBy    

现在,您的
events
表正在尝试两件事。它应该只代表一个实际的“事件”,而不应该保存定期信息。

您不应该试图避免记录定期事件的实例。这就是数据库的用途

您需要一个
recurringevent
表,其中每个定期事件都有一条记录,其中包含定期规则。一个非常简单的例子如下:

id
event_name
start_date
end_date
DaysBetween
RecordCreateDateTime
RecordCreatedBy
请注意,根据日历对重复事件进行建模非常复杂。。。每周一次,每月一次,每月第二个星期二

您需要另一个记录重复事件的“实例”的表,例如
事件
。它有每个实际事件的记录,并引用回
recurringevent
。创建、编辑、删除父记录会自动生成这些记录

此表中的记录可能由周期性事件生成,也可能不由周期性事件生成。您可能只有一个一次性事件,在这种情况下,您有一个
events
记录,没有父
recurringevent

id
recurringevent_id   (null if this is a once off)
date
event_name
RecordCreateDateTime
RecordCreatedBy
然后,您需要一个
eventAttention
表,每个出席者一行,该表引用
events

id
event_id
user_id
event_feedback
RecordCreateDateTime
RecordCreatedBy    

现在,您的
events
表正在尝试两件事。它应该只代表一个实际的“事件”,不应该保存定期信息。

您的
事件表中没有
事件id
,那么
事件表中的
事件id
指的是什么?我猜您是在捕获单个与会者,而不是计数?events\u Attention有一个
event\u id
,这就是events.id更新了问题。谢谢如果events\u Attention正在跟踪出勤情况,为什么不根据日期和时间戳跟踪文字出勤情况呢?您可以根据日期、月份、时间等分组定义和跟踪重复出现。但是根据用户和日期时间戳,记录本身总是唯一的。关于重复事件,您需要另一个表来模拟重复事件。鉴于您必须涵盖日历的规则,周期性日程安排可能会很困难。当您由此生成
事件
记录时,您将引用包含回
重复事件
表。您的
事件
表中没有
事件id
,那么
事件
表中的
事件id
指的是什么?我猜您是在捕获单个与会者,而不是计数?events\u Attention有一个
event\u id
,这就是events.id更新了问题。谢谢如果events\u Attention正在跟踪出勤情况,为什么不根据日期和时间戳跟踪文字出勤情况呢?您可以根据日期、月份、时间等分组定义和跟踪重复出现。但是根据用户和日期时间戳,记录本身总是唯一的。关于重复事件,您需要另一个表来模拟重复事件。鉴于您必须涵盖日历的规则,周期性日程安排可能会很困难。当您由此生成
事件
记录时,您将引用回
recurringevent
表。