Перейти к основному содержимому

Модель базы данных

Pimcore старается поддерживать чистую и оптимизированную модель базы данных для управления данными. Тем не менее, существует довольно много таблиц, и поначалу поиск нужных данных может оказаться немного сложной задачей.

В общем, существуют два типа таблиц

  • Таблицы по умолчанию, которые создаются при установке — для различных типов данных, таких как ассеты, документы, логи, версии, ...
  • Динамически создаваемые таблицы, которые создаются во время конфигурации модели данных объектов — в основном для всех данных, связанных с объектами.

Таблицы по умолчанию

Эти таблицы создаются при установке Pimcore и всегда одинаковы.

ТаблицаОписание
application_logsхранит все логи приложения. Для дополнительной информации см. Application Logger. Кроме того, могут существовать таблицы application_logs_archive* для старых записей логов
assetsассеты (изображения и т. п.) с системными метаданными
assets_metadataдополнительные пользовательские метаданные (вкладка Metadata в панели ассета)
classesсписок всех классов объектов с ID и названием. Всё остальное хранится в PHP-конфигурационных файлах
classificationstore_collectionrelationsRelation Collection — группа для Classification Store
classificationstore_collectionsколлекции Classification Store
classificationstore_groupsгруппы Classification Store
classificationstore_keysключи Classification Store
classificationstore_relationsRelation Group — ключ для Classification Store
classificationstore_storesхранилища Classification Store
custom_layoutsопределение custom layouts для классов объектов
dependenciesхранит зависимости между элементами, такими как объекты, ассеты, документы
documentsсписок всех документов, папок, ссылок, hardlinks, писем и сниппетов в области документов вместе с мета- и конфигурационными данными, связями
documents_editablesредактируемые поля документов (данные), в сериализованной форме
documents_emailдополнительные конфигурационные данные
documents_hardlinkдополнительные конфигурационные данные
documents_linkдополнительные конфигурационные данные
documents_pageдополнительные конфигурационные данные
documents_printpageдополнительные конфигурационные данные
documents_snippetдополнительные конфигурационные данные
documents_translationsсвязь между одинаковыми документами для разных языков
edit_lockотслеживает, какой пользователь открыл какой ресурс в бэкенде
element_workflow_stateотслеживает состояние workflow для всех элементов
email_blocklistблоклист e-mail адресов
email_logлог отправленных писем
glossaryслова для авто-ссылок в текстах. См. раздел Glossary
http_error_logлог HTTP-ошибок
lock_keysхранилище для функциональности блокировок
notesзаметки для элементов
notes_dataдополнительные данные для заметок
objectsсписок всех объектов с метаданными, такими как id, имя класса, путь, родитель, ...
object_url_slugsданные URL Slug
propertiesданные из вкладки properties
quantityvalue_unitsдоступные единицы измерения для типа данных quantity value
recyclebinхранит метаданные удалённых элементов
redirectsхранит переадресации
schedule_tasksхранит запланированные задачи
search_backend_dataхранит индекс для backend-поиска — таблица InnoDB с поддержкой fulltext
sitesхранит данные сайтов
tagsхранит доступные теги
tags_assignmentхранит привязку тегов к элементам
tmp_storeвнутреннее временное хранилище Pimcore
tracking_events
translations_adminпереводы для бэкенда
translations_messagesпереводы для фронтенда
tree_locksблокировки в дереве интерфейса бэкенда Pimcore
usersпользователи бэкенд
users_permission_definitionsсписок глобально назначаемых разрешений пользователей
users_workspaces_assetхранит права доступа пользователей к папкам ассетов
users_workspaces_documentхранит права доступа пользователей к папкам документов
users_workspaces_objectхранит права доступа пользователей к папкам объектов
uuidsхранит уникальные идентификаторы, если включены
versionsсписок версий объектов/ассетов/документов. Фактические данные сериализуются и записываются на диск

Таблицы для объектов

Эти таблицы создаются и изменяются динамически в процессе конфигурации модели данных объектов. В результате их структура и набор будут отличаться в каждой установке Pimcore в зависимости от модели данных.

Объекты

Как только в Pimcore создаётся новый класс объекта, в базу данных добавляются по меньшей мере три таблицы. Таблицы имеют числовой суффикс, обозначающий номер (id) класса объекта: object_query_(id), object_relations_(id), object_store_(id), а также создаётся дополнительное представление object_(id), которое комбинирует object_query_(id) и objects.

Таблица / ПредставлениеОписание
object_(id) ПредставлениеПредставление базы данных, соединяющее object_query_(id) и таблицу objects.
object_query_(id) ТаблицаИспользуйте эту таблицу для получения данных, включая унаследованные значения. Типы данных, содержащие связи, обычно тоже хранятся в сериализованной форме здесь. Pimcore Object-Lists работают с этой таблицей.
object_relations_(id) ТаблицаСодержит данные полей с отношениями к объектам, ассетам и т.д.
object_store_(id) ТаблицаОсновная таблица хранения данных для класса объектов. Содержит все «плоские» данные без отношений или внешних зависимостей.
objects Таблицасодержит запись для каждого объекта в системе. Поле id — auto_increment и источник первичного ключа для объекта. В этой таблице также хранятся метаданные об объекте.

Если необходимо восстановить таблицы запросов по какой-либо причине, вызов DataObject\Concrete::disableDirtyDetection(); и последующее сохранение всех объектов данного класса решит проблему. Если не отключать dirty detection, в таблице query могут отсутствовать некоторые данные.

Типы простых полей данных

Ниже приведён обзор того, как разные типы полей объектов хранятся в базе данных. Этот обзор может быть не полным, но служит отправной точкой при выборке данных объектов с помощью object lists.

Текст

Таблица: object_store_(id)

ИмяТип данныхПо умолчаниюКомментарий
Inputvarchar(255)NULL/
TextarealongtextNULL/
wysiwyglongtextNULLтекст с HTML-тегами
passwordvarchar(255)NULLпароль — как хеш
Число

Таблица: object_store_(id)

ИмяТип данныхПо умолчаниюКомментарий
Numberdouble/decimal(64,3)NULLтип зависит от выбранной точности
SliderdoubleNULL/
Дата и время

Table: object_store_(id)

ИмяТип данныхПо умолчаниюКомментарий
Datebigint(20)NULLменьше 1970 = отрицательный Timestamp
Date & Timebigint(20)NULLменьше 1970 = отрицательный Timestamp
Timevarchar(5)NULLстрока, например "12:00"
Варианты выбора (Select)

Table: object_store_(id)

ИмяТип данныхПо умолчаниюКомментарий
Selectvarchar(255)NULLвыбранное значение
Uservarchar(255)NULLID пользователя Pimcore
Countryvarchar(255)NULLкод страны
Languagevarchar(255)NULLкод языка
MultiselectiontextNULLстрока, выбранные значения, разделённые ","
Countries (Multiselect)textNULLстрока, выбранные коды стран, разделённые ","
Languages (Multiselect)textNULLстрока, выбранные коды языков, разделённые ","
Связи

Table: object_relations_(id) & object_meta_data_(id)

  • Поля типов relation хранятся в отдельных таблицах
  • Данные не хранятся в отдельных колонках, а как строки, где имя поля указывается в дополнительном столбце fieldname
  • Столбец type указывает тип связанного ресурса (Object, Document, Asset)
  • Столбцы src_id и dest_id определяют отношение / ссылку между объектами
  • Столбец index используется для указания порядка связей
  • Столбцы ownertype, ownername и position используются, когда связи находятся внутри field collections, локализованных полей, object bricks и т. п.
  • Тип данных Advanced Many-To-One Object Relation хранит дополнительные данные в таблице object_meta_data_(id) - столбец column указывает имя мета-элемента, а data хранит его значение
Структурированные
ИмяКомментарий
TableДанные таблицы хранятся как строка — сериализованно.
Structured TableКаждая ячейка таблицы хранится отдельно; схема: (fieldname)__(row key)#(column key)
Field-Collectionsсм. описание специальных полей ниже
Objectbricksсм. описание специальных полей ниже
Localized Fieldsсм. описание специальных полей ниже
Географические

Table: object_store_(id)

ИмяТип данныхПо умолчаниюКомментарий
Geographic PointdoubleNULLсоздаёт две колонки: `(name)longitude' и '(name)latitude'
Geographic BoundsdoubleNULLсоздаёт четыре колонки: '(name)NElongitude', '(name)NElatitude', '(name)SWlongitude' и '(name)SWlatitude'™
Geographic PolygonlongtextNULLсериализованные геоданные
Прочие
ИмяТип данныхПо умолчаниюКомментарий
Imageint(11)NULLID ассета изображения
Image Advancedint(11), textNULLсоздаёт колонку '(name)image' (int) для id ассета изображения и колонку '(name)hotspots' (text) для hotspot’ов; hotspots хранятся сериализованно.
VideotextNULLсериализованные данные
Checkboxtinyint(1)NULLбулево значение: 1 = true
LinktextNULLсериализованные данные

Специальные поля данных

Objectbricks
Таблица / ПредставлениеНазначение
object_brick_query_(id) Таблицааналогично object_query_(id) для object bricks
object_brick_store_(id) Таблицаосновное хранилище данных
Локализованные поля
Таблица / ПредставлениеНазначение
object_localized_(id)_(language-code) Представлениепредставление базы данных для каждого языка, объединяющее обычные и локализованные поля
object_localized_data_(id) Таблицахранит данные локализованных полей
object_localized_query_(id)_(language-code) Таблицааналогично object_query_(id)
Field Collections
Таблица / ПредставлениеНазначение
object_collection_(collection-name)_(object-id)хранит данные полей field collection и их порядок (индекс)

Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.