В настоящее время я экспериментирую с SabreDAV, сервером WebDAV / CalDAV / CardDAV для PHP.
В рамках загрузки имеется серверная часть PDO, которая хранит события календаря в базе данных, такой как MySQL.
Я заметил, что SabreDAV использует поле BLOB для хранения данных iCal для события в 1 поле, а не в должным образом нормализованных полях в строке.
mysql> select * from calendarobjects \G
*************************** 1. row ***************************
id: 2
calendardata: BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Apple Inc.//Mac OS X 10.10.5//EN
CALSCALE:GREGORIAN
BEGIN:VTIMEZONE
TZID:Europe/Brussels
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
DTSTART:19810329T020000
TZNAME:CEST
TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0200
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
DTSTART:19961027T030000
TZNAME:CET
TZOFFSETTO:+0100
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
CREATED:20150825T141801Z
UID:B26931A6-6F8A-4CB6-95F2-C5567B7D64BA
DTEND;TZID=Europe/Brussels:20150826T151500
TRANSP:OPAQUE
SUMMARY:My meeting
DTSTART;TZID=Europe/Brussels:20150826T143000
DTSTAMP:20150825T141801Z
SEQUENCE:0
END:VEVENT
END:VCALENDAR
uri: B26931A6-6F8A-4CB6-95F2-C5567B7D64BA.ics
calendarid: 1
lastmodified: 1440512292
etag: 969a888bab9c906f0d7f10c23a856341
size: 712
componenttype: VEVENT
firstoccurence: 1440592200
lastoccurence: 1440594900
uid: B26931A6-6F8A-4CB6-95F2-C5567B7D64BA
1 row in set (0.00 sec)
Как видите, есть 1 большое поле «данные календаря», которое содержит все в формате iCal.
Из моего краткого исследования Милтона (Java-аналога SabreDAV) это выглядело так же, как и в случае с SabreDAV. Но я могу ошибаться.
Существует ли конкретная архитектурная причина, по которой можно хранить данные iCal в BLOB вместо хранения проанализированных данных? Могут ли данные iCal быть настолько сложными, что не могут полностью соответствовать норме? Или, как вы думаете, разработчик выбрал это, чтобы сэкономить время?
Я надеялся сохранить данные в столбцах и строках, чтобы я мог легко сгенерировать таблицу на веб-сайте с событиями календаря … но теперь мне нужно разобрать все данные, и я не могу использовать SQL … или я Мне нужно использовать полный клиент CalDAV … но это излишнее.
Одна конкретная проблема, которую я уже обнаружил, состоит в том, что повторяющееся событие — это 1 запись в БД, а не несколько записей. Определить отдельные события сейчас будет очень сложно.
На самом деле очень трудно полностью нормализовать формат в RDMS. Многие свойства могут появляться несколько раз, должны поддерживаться пользовательские свойства, а также настраиваемые параметры.
Eborbob также упоминает, что выигрыш в том, что некоторые из этих данных будут легко доступны для поиска / индексации, и на самом деле это также происходит в нескольких областях, включая UID
,
Других решений пока нет …