2013-06-22 60 views
2

我正在开发可用性日历。可预订的事件可能有一个或多个可用于预订的资源,并且事件可以反复出现并具有一些基本功能,例如编辑循环事件的一个实例等(例如Google Calendar)。日历还应该能够存储预订。预订日历模型设计

示例:每个星期一在10:00,直到2014年底,单元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. 
} 

我确定有更好的方法来做到这一点,你能帮我吗?

回答

1

通常,在数据库设计中,要分离出组件并将它们与不同的键关联起来。我假设你知道这方面的基础知识。

所以,我最初的想法是:

活动,与事件细节表 - 和EID(事件ID)

用户,与用户信息表 - 和UID(用户ID)

重复出现,一个包含循环事件的表格,其中包含eid和uid,以及其他相关信息,例如重复模式(我会使用枚举)。

你不想把所有东西放在一张巨大的桌子上,因为它会让人头疼,分离关注点可以让你稍后进行缩放。

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

希望这会有所帮助。

+0

没有不是真的我在找什么。 – loddn

+0

Zach你可以发布一个SQL示例,我正在寻找类似的东西,沿着你的建议来使用DDay – aggie

+0

先尝试使用GUI,然后看看show create table语法。什么是DDay(诺曼底?)? –