SabreDAV - Почему события календаря хранятся как BLOB в бэкэнде PDO?

В настоящее время я экспериментирую с 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 запись в БД, а не несколько записей. Определить отдельные события сейчас будет очень сложно.

1 ответ

На самом деле очень трудно полностью нормализовать формат в RDMS. Многие свойства могут появляться несколько раз, должны поддерживаться пользовательские свойства, а также настраиваемые параметры.

Eborbob также упоминает, что выигрыш в том, что некоторые из этих данных будут легко доступны для поиска / индексации, и это также происходит в некоторых областях, включая UID,

Другие вопросы по тегам