Модель данных Cairo
Существует множество способов организации и хранения структурированных данных: от простых фалов до сложных реляционных систем управления базами данных (СУБД). Cairo базируется на реляционной модели данных, адаптируя ее под нужды разработчиков веб-ресурсов.
Объекты Cairo
Базовым понятием, относящимся к универсальной модели данных Cairo, является объект. В виде объектов могут быть представлены новости, категории каталога, товары, отзывы, сообщения в гостевой книге и т.д. Каждый объект характеризуется набором полей. Значения этих полей используются для вывода информации об объектах на сайте.
Информация об одном объекте может быть выведена во множестве мест на сайте. Так, при добавлении новости, она появляется на главной странице, на странице «Все новости», а также на отдельной странице, соответствующей данной новости.
Типы полей объекта
Тип поля можно сравнить с типами данных в языках программирования, либо типами полей в базах данных. Последнее сравнение более уместно, так как, фактически, модель данных Cairo является расширением реляционной модели данных.
В системе предусмотрено более 20 встроенных типов полей. К ним относятся: целое число; вещественное число; строка; текст; логический тип; дата/время; файл; изображение; форматированный текст; URL; e-mail; денежный тип, перечисление, справочник, ссылка на объект и т.д. Несмотря на то, что встроенных типов полей достаточно для решения большинства задач, предусмотрена возможность добавления собственных типов полей.
Важность полей объекта
Существует три степени важности поля: поле может быть обязательным, важным и необязательным. В случае если обязательное или важное поле остается незаполненным, при работе через веб-интерфейс администратора, система выдает предупреждение, текст которого задается разработчиком. В отличие от обязательных, важные поля могут иметь пустые значения.
Ограничения на значения полей
Ограничения на значения полей в первую очередь зависят — от типа поля. Так значение поля типа «строка» не может быть больше 255 символов, а тип поля «изображение» поддерживает только определенные графические форматы.
Кроме того, существует возможность установки дополнительных ограничений на значения полей. Например, длина заголовка новости может быть ограничена 160 символами, другим условием может быть задано, что главное изображение новости должно быть не более 600 пикселей в ширину.
Если введенное значение не соответствует установленным ограничениям, система его не пропустит. В таком случае, при работе через веб-интерфейс администратора, будет выдано предупреждение, текст которого задается при вводе информации о структуре данных.
Значения полей по умолчанию
Значения полей, используемые по умолчанию, применяются при внесении данных через веб-интерфейс администратора Cairo. Например, при создании объекта типа «Новость» в поле «Дата» может автоматически устанавливаться текущая дата, а для поля «Наличие на складе», объекта типа «Товар», значением по умолчанию является «Присутствует на складе».
Служебная информация об объекте
Помимо набора полей, определяемых разработчиком, каждый объект, независимо от типа, имеет стандартные поля, предназначенные для хранения служебной информации. К таким полям относятся:
- идентификатор объекта
- заголовок объекта
- дата создания объекта
- имя пользователя, создавшего объект
- дата изменения объекта
- имя автора последних изменений
- владелец объекта
- группа объекта
- права
Идентификатор представляет собой уникальный номер объекта в системе. Заголовок содержит значения полей, перечень которых определяется для типа объекта. Дата создания и последнего изменения, как и имя пользователя, создавшего объект, а также имя пользователя, изменившего его, фиксируются автоматически и не могут быть отредактированы ни посредством программных, ни визуальных интерфейсов Cairo. Поля «Владелец», «Группа» и «Права» используются системой контроля прав доступа.
Связи между объектами Cairo
Объекты связаны друг с другом при помощи ссылок. В системе используются связи типа «Родитель-ребенок». Дочерний объект называют вложением родительского объекта, также говорят, что родительский объект содержит в себе дочерний. Например, объект типа «Категория каталога» содержит в себе объекты типа «Товар», в таком случае товары выступают вложениями категорий каталога. Новые объекты создаются как вложения существующих объектов. При этом существующие объекты также могут быть связаны друг с другом. Так, одна новость может присутствовать в нескольких лентах новостей, один товар — добавлен в несколько категорий каталога.
В системе существует понятие «Корневой объект». Корневым является объект, который не имеет родительских объектов. Корневые объекты добавляются на этапе создания структуры данных.
Число связей между объектами не ограничено, таким образом, объект может иметь любое количество как дочерних, так и родительских объектов.
Точки вложения
Объекты связываются друг с другом строго в соответствии с правилами, которые устанавливаются для типов объектов. Например, для типа «Категория каталога» задается возможность вкладывать товары в категории каталога; для типа «Товар» определяется возможность прикрепления отзывов к товарам; отзывы, в свою очередь, не могут содержать вложений, что задается для типа «Отзыв».
Возможные связи между объектами определяются путем создания точек вложения. Чтобы объекты типа «Товар» могли содержать объекты типа «Отзыв», для типа «Товар» должна быть создана точка вложения «Отзывы». Точка вложения может содержать объекты только одного типа. При этом для типа объекта может быть определено несколько точек вложения. Так товары помимо отзывов могут содержать дополнительные изображения, а также другие товары в роли сопутствующих.
Порядок вложений
В некоторых случаях бывает необходимо устанавливать порядок вложений, например, для изображений в галерее, или для категорий в каталоге. Возможность регулирования порядка вложений определяется для точки вложения.
Жесткие и символические ссылки
При удалении родительского объекта, все ссылки, которыми он связан с дочерними объектами, удаляются автоматически. Следует различать удаление ссылки на объект и удаление объекта. Так как ссылок на объект может быть несколько, удаление ссылки не всегда влечет за собой удаление объекта. Автоматическое удаление дочернего объекта при удалении одного из родительских объектов зависит от того, какие ссылки используются для связи дочернего объекта с родительскими.
При создании объекта, между ним и родительским объектом возникает жесткая ссылка. Существующие объекты могут быть связаны между собой как жесткими, так и символическими ссылками. Удаление объекта происходит при удалении последней жесткой ссылки на него. При удалении объекта все символические ссылки на данный объект удаляются автоматически. Удаление символической ссылки на объект не влияет на остальные ссылки, относящиеся к данному объекту. Таким образом, если необходимо, чтобы связь между объектами ни при каких обстоятельствах не была разорвана автоматически — достаточно связать эти объекты жесткой ссылкой. Символическая ссылка используется в том случае, когда ее наличие зависит от других ссылок на данный объект.
Только символические ссылки
По умолчанию точка вложения объекта может содержать и жесткие и символические ссылки. Однако существует возможность ограничить точку вложения таким образом, что в нее можно будет добавлять только символические ссылки. В таком случае, вложениями могут выступать лишь уже существующие объекты. Эта возможность может быть использована, например, при организации связей между сопутствующими товарами в каталоге. Если ссылки между сопутствующими товарами всегда будут символическими, в качестве сопутствующих будут использоваться только те товары, которые уже добавлены в каталог. В результате сопутствующий товар всегда будет доступен из каталога. Кроме того, при удалении товара из каталога, он автоматически будет удален из числа сопутствующих, но не наоборот.
Типы и подтипы объектов
Объект всегда относится к определенному типу. Для типа задается набор и порядок полей, а также список точек вложения и их настройки, такие как: возможность устанавливать порядок вложений и ограничение на добавление только символических ссылок. Разработчик самостоятельно решает, какие типы объектов ему нужны в каждом конкретном случае и может легко создавать и редактировать их. Наряду с понятием «Тип объекта», существует понятие «Подтип объекта». Например, для типа «Товар» можно определить подтипы «Телевизор», «Фотоаппарат». Подтипы расширяют набор полей типа и имеют собственные, не зависящие от типа, наборы точек вложения. Механизм подтипов схож с механизмом наследования в ООП. В этом случае тип можно рассматривать как базовый класс, а подтип, как порожденный. Если у типа есть подтипы, то он называется «главным» или «абстрактным». Существование объектов абстрактного типа не допускается.