2013-06-22 2 views
2

Я разрабатываю календарь доступности. У бронируемых событий может быть доступно 1 или несколько ресурсов для бронирования, и события могут повторяться и иметь некоторые базовые функции, такие как редактирование одного экземпляра повторяющегося события и т. Д. (Например, Google Calendar). Календарь также должен иметь возможность хранить заказы.Бронирование календаря дизайн модели

Пример: Каждый понедельник в 10:00, до конца 2014 года группа А не иметь в своем распоряжении 2 ресурсов, но не в понедельник 24/6. В прошлый понедельник UserX и UserY был забронирован на этом Событии, UserX не появился.

Я рассмотрел несколько шаблонов проектирования для повторяющихся событий, но не могу найти хороший и элегантный способ обработки как повторяющихся событий, так и привязки деталей к отдельному событию.

Я проделал некоторое моделирование ниже, где храню событие и повторение в Event, тогда мне нужно создать экземпляр 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

Обычно с дизайном базы данных вы хотите разделить компоненты и связать их на разных клавишах. Я предполагаю, что вы знаете основы этого.

Так моя первая мысль была бы:

События, стол с деталями событий - и Ид (идентификатор события)

Пользователи, таблица с подробной информацией пользователей - и UID (идентификатор пользователя)

Повторяющаяся таблица с повторяющимися событиями, набирая eid и uid, с другой соответствующей информацией, такой как шаблон повторения (я бы использовал перечисления).

Вы не хотите ставить все на один гигантский стол, так как это будет способствовать возникновению головных болей, разделение проблем позволит вам масштабировать позже.

Ваш поиск будет простым соединением и поместите индексы в поля, которые будут использоваться для поиска данных, таких как дата и пользователь, чтобы поиск выполнялся быстрее, но не сходите с ума, потому что он делает вставки медленными.

Надеюсь, это поможет.

+0

Нет, не совсем то, что я искал. – loddn

+0

Зак вы можете разместить образец sql, я ищу что-то подобное по совету, чтобы работать с DDay – aggie

+0

Попробуйте сначала использовать графический интерфейс, а затем посмотрите на синтаксис show create table. Что такое DDay (Normandy?)? –