Я работаю над проектом, который потребует от меня реализации календаря. Я пытаюсь создать систему, которая будет очень гибкой: она может обрабатывать повторяющиеся события, исключения для повторов и т. Д. Я рассмотрел схему для таких приложений, как iCal, Lotus Notes и Mozilla, чтобы получить представление о том, как пойти о реализации такой системы. В настоящее время у меня возникают проблемы с выбором наилучшего способа обработки исключений для повторяющихся событий. Я использовал немного баз данных, но у меня нет большого опыта в оптимизации всего, поэтому я не уверен, какой из этих двух методов будет оптимальным с точки зрения общей производительности и возможности запроса / поиска. :
- Прерывание повторяющегося события. Таким образом, берется изменение даты окончания текущей строки для повторяющегося события, вставка новой строки с исключением и добавление еще одной строки, продолжая старую последовательность.
- Просто добавление исключения. Таким образом, добавление новой строки с некоторым полем, которое указывает, что это переопределение.
Так вот почему я не могу решить. Первый метод приведет к гораздо большему количеству строк, так как каждое редактирование требует 2 дополнительных строки, которые добавляются только к одной строке вторым методом. С другой стороны, я думаю, что запрос на поиск события будет намного проще, и, возможно, быстрее (?) С использованием первого метода. Похоже, что второй метод потребует дополнительных вычислений на сервере приложений, поскольку после получения данных вам придется удалить пересечение двух строк. Я знаю, что базы данных часто являются узким местом для веб-сайтов, и, хотя я уверен, что многие из вас думают, что либо хорошо, потому что ваш проект, вероятно, никогда не станет достаточно большим, чтобы разница в эффективности действительно имела значение, я все же хотел бы реализовать лучшее решение. Так какой метод вы бы выбрали, ребята, или вы бы сделали что-то совершенно другое?
Кроме того, в качестве примечания я буду использовать MySQL и PHP. Если есть другая технология, которая, по вашему мнению, лучше подходит для этого, особенно в области базы данных, пожалуйста, укажите это.
Спасибо за совет.