2

我正在开发一个可用性日历。可预订活动可能有 1 个或多个可用于预订的资源,并且这些活动可以重复发生并具有一些基本功能,例如编辑重复活动的一个实例等(例如 Google 日历)。日历还应该能够存储预订。

示例:每周一 10:00,直到 2014 年底 Unit A 有 2 个可用资源,但周一 24/6 没有。上周一,UserX 和 UserY 被预订了该活动,但 UserX 没有出现。

我已经查看了一些用于重复事件的设计模式,但找不到一种很好且优雅的方式来处理重复事件和将细节附加到单个事件。

我已经做了一些建模,我将事件和重复存储在事件中,然后我必须为每个单独的事件创建一个 EventDetails 实例。

class Event {

    Date start
    Date end

    boolean isRecurring
    EventRecurType recurType // DAILY, WEEKLY ...
    Integer recurInterval = 1
    Date recurEnd
    Integer recurCount
    List<EventDetails> eventDetails // Id, start, end, BookingDetails et.c.
}

我相信有更好的方法可以做到这一点,你能帮我吗?

4

1 回答 1

1

通常对于数据库设计,您希望分离出组件并将它们与不同的键相关联。我假设你知道这方面的基础知识。

所以我最初的想法是:

事件,包含事件详细信息的表格 - 和 eid(事件 id)

用户,一个包含用户详细信息的表 - 和一个 uid(用户 ID)

Recurring,包含重复事件的表,键入 eid 和 uid,以及其他相关信息,例如重复模式(我会使用枚举)。

你不想把所有东西都放在一张大桌子上,因为这会让人头疼,关注点分离可以让你以后扩展。

您的查找将是简单的连接,并将索引放在将用于查找数据(例如日期和用户)的字段上,以便搜索更快,但不要发疯,因为它会使插入变慢。

希望这会有所帮助。

于 2013-06-22T15:14:16.123 回答