Я работаю над проектом, который потребует от меня выполнения календаря. Я пытаюсь придумать систему, которая очень гибкая: может обрабатывать повторяющиеся события, исключения для повторений и т. Д. Я рассмотрел схему для таких приложений, как iCal, Lotus Notes и Mozilla, чтобы получить представление о том, как приступить к внедрению такой системы. В настоящее время у меня возникают проблемы с решением вопроса о том, как лучше всего обрабатывать исключения для повторяющихся событий. Я использовал базы данных совсем немного, но у меня не было много опыта с действительно оптимизацией всего, поэтому я не уверен, какой метод из двух, которые я рассматриваю, был бы оптимальным с точки зрения общей производительности и способности запроса / поиска :
Вот почему я не могу решить. Первый метод приведет к намного большему количеству строк, поскольку для каждого редактирования требуется 2 дополнительных строки, которые могут быть привязаны только к одной строке вторым методом. С другой стороны, я думаю, что запрос на поиск события будет намного проще и, возможно, быстрее (?), Используя первый метод. Второй метод, похоже, потребует большего вычисления на сервере приложений, так как после получения данных вам нужно будет удалить пересечение двух строк. Я знаю, что базы данных часто являются узким местом для веб-сайтов, и, хотя я уверен, что многие из вас думают, что это нормально, потому что ваш проект, вероятно, никогда не станет достаточно большим, чтобы разница в эффективности действительно имела значение, я все равно хотел бы реализовать лучшее решение. Итак, какой метод вы бы выбрали, или вы сделаете что-то совершенно другое?
Кроме того, в качестве дополнительной заметки я буду использовать MySQL и PHP. Если есть еще одна технология, которая, по вашему мнению, будет лучше подходит для этого, особенно в области базы данных, пожалуйста, укажите ее.
Спасибо за совет.
События не являются постоянными, могут быть изменены или прекращены.
Вы должны вставить строку для каждой даты в событии и после редактирования повторного события дать возможность редактировать все экземпляры события или только один.
При этом вам действительно нужно только дополнительное поле, указывающее, активно это событие или нет.
При правильном индексировании это не повлияет на ваши запросы.
Примером может служить:
SELECT * FROM events WHERE event_id = 123 AND active = 1;
В этом случае вам потребуется индексировать event_id и активные столбцы.
Я решил просто ввести строку с исключениями и использовать код, чтобы удалить их из повторяющегося набора. Это будет некоторое время, прежде чем я покончу с этим, но я постараюсь и не забудьте вернуться сюда с некоторыми результатами производительности, когда все будет сделано.