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

0

Решение

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

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]