2010-10-21 1 views
6

Пример того, что я говорю, похож на Календарь Google. Когда создается новая повторяющаяся задача.Лучший способ разработки/управления/проектирования повторяющихся задач/календаря

После создания шаблона повторяющейся задачи, на основе которого созданы все отдельные задачи, вы создаете все отдельные задачи и сохраняете их в базе данных? или вы просто сохраняете повторяющиеся события «шаблона» и их исключения?

Если пользователь запрашивает представление «месяц», и вы хотите отображать все события/задачи, это похоже на создание результата в реальном времени из шаблона и включение всех исключений будет намного больше ресурс, тогда, если каждая отдельная повторяющаяся задача была создана из шаблона и вставлена ​​в базу данных.

Это сделает поиск/сортировку и т. Д. Намного проще.

Кто-нибудь создавал что-то подобное раньше? идеи?

ответ

4

Сохраните все это в базе данных.

Вы хотите иметь таблицу «Шаблон задачи» и таблицу «Задача», где есть одно-> много отношений.

Когда пользователь указывает, что они хотят повторить задачу, создайте запись «Шаблон задачи», а затем создайте столько «Заданий», сколько пользователь указал (не позволяйте пользователю создавать задачи слишком далеко в будущем). Каждая задача связана с шаблоном задачи с помощью внешнего ключа. Идея заключается в том, что SQL будет эффективнее управлять этими записями, чем пытаться сделать все это в коде на основе одного шаблона. Таким образом, у вас будет больше возможностей при сортировке и фильтрации ваших данных. В конце концов, писать SQL-запрос проще, чем писать, тестировать и поддерживать функцию PHP, которая манипулирует данными.

Некоторые другие советы, я хотел бы дать вам это:

  • Try, чтобы получить много информации в вашей записи «Шаблон задачи». Сохраняйте количество задач, на которые распространяется шаблон, дата окончания последней задачи, время, прошедшее между первой задачей и последним, и т. Д. Эти «метаданные» могут помочь вам сэкономить время запроса, когда вы хотите сортировать и фильтровать задания.
  • Поместите индекс в поле «Дата» и «FK», это также поможет запросить время.
  • Я просто создал два приложения для работы с календарем на работе, которые были очень хорошо приняты начальниками. Я использовал плагин JQuery «FullCalendar» (http://arshaw.com/fullcalendar/). Я использовал JQuery AJAX для обработки большинства моих событий, и он был встроен в поддержку просмотра месяца, дня и недели.
+0

Хорошие пункты. И спасибо за идею плагина jQuery, я собираюсь использовать это. – Andre

0

Если пользователь запрашивает представление «месяц», и вы хотите отображать все события/задачи, создается впечатление, что создание результата в реальном времени из шаблона и включение всех исключений было бы более ресурсоемкий, тогда, если каждая отдельная повторяющаяся задача была создана из шаблона и вставлена ​​в базу данных.

Я бы не согласился с этим. Что делать, если задача повторяется каждую субботу в течение следующих 7 лет ... И что, если бы было много этих повторяющихся задач? Это будет стоить вам много места для отходов. Поэтому я считаю, что лучше сохранить повторяющуюся задачу как одну запись + одну запись для каждого исключения (так как есть меньше исключений, чем повторений).

Ну, единственная проблема, которая возникает в том, как создать запрос для выбора каждой задачи (все еще думая Abou что)

1

я прошел такой же проблемой некоторое время назад, и вместо того, чтобы изобретать колесо, я использовал Google API календаря. (http://code.google.com/apis/calendar/data/2.0/developers_guide.html)

Вы создаете учетную запись Google и получаете доступ к календарной информации. Существуют API для создания/редактирования/удаления повторяющейся записи. Кроме того, вы можете указать информацию о дате/времени и запрос для сопоставления событий.

При создании события в Календаре Google вы получите маркер/идентификатор, который вы можете сохранить в своей собственной базе данных и ссылаться на него в контексте приложения.

2

Для повторяющихся событий я сделал следующее некоторое время назад:

  1. Когда пользователь вошел событие я хранимую дата шаблон стиля даты ГНУ мероприятия - ключевое слово для PHP является relative date formats.

  2. Затем я начал с создания событий, например. в следующем году. И создали фактические записи, где я преобразовал относительную дату в фактическую - например, «каждый первый понедельник» до «mm-dd-YYYY». Это позволило мне отобразить их, а также разрешить пользователю, например, переместить одно событие или отменить его и т. д.

  3. Затем выясните, как далеко продвинуться в будущем - моя идея состояла в том, чтобы создавать события, когда просматривались фактические страницы. Например. если бы я создал события до июня 2011 года, и кто-то пропустил весь путь до июля 2011 года, я бы перебирал свои события и настраивал их прозрачно.

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

Смежные вопросы