Модель базы данных
Pimcore старается поддерживать чистую и оптимизированную модель базы данных для управления данными. Тем не менее, существует довольно много таблиц, и поначалу поиск нужных данных может оказаться немного сложной задачей.
В общем, существуют два типа таблиц
- Таблицы по умолчанию, которые создаются при установке — для различных типов данных, таких как ассеты, документы, логи, версии, ...
- Динамически создаваемые таблицы, которые создаются во время конфигурации модели данных объектов — в основном для всех данных, связанных с объектами.
Таблицы по умолчанию
Эти таблицы создаются при установке Pimcore и всегда одинаковы.
| Таблица | Описание |
|---|---|
| application_logs | хранит все логи приложения. Для дополнительной информации см. Application Logger. Кроме того, могут существовать таблицы application_logs_archive* для старых записей логов |
| assets | ассеты (изображения и т. п.) с системными метаданными |
| assets_metadata | дополнительные пользовательские метаданные (вкладка Metadata в панели ассета) |
| classes | список всех классов объектов с ID и названием. Всё остальное хранится в PHP-конфигурационных файлах |
| classificationstore_collectionrelations | Relation Collection — группа для Classification Store |
| classificationstore_collections | коллекции Classification Store |
| classificationstore_groups | группы Classification Store |
| classificationstore_keys | ключи Classification Store |
| classificationstore_relations | Relation 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)
| Имя | Тип данных | По умолчанию | Комментарий |
|---|---|---|---|
| Input | varchar(255) | NULL | / |
| Textarea | longtext | NULL | / |
| wysiwyg | longtext | NULL | текст с HTML-тегами |
| password | varchar(255) | NULL | пароль — как хеш |
Число
Таблица: object_store_(id)
| Имя | Тип данных | По умолчанию | Комментарий |
|---|---|---|---|
| Number | double/decimal(64,3) | NULL | тип зависит от выбранной точности |
| Slider | double | NULL | / |
Дата и время
Table: object_store_(id)
| Имя | Тип данных | По умолчанию | Комментарий |
|---|---|---|---|
| Date | bigint(20) | NULL | меньше 1970 = отрицательный Timestamp |
| Date & Time | bigint(20) | NULL | меньше 1970 = отрицательный Timestamp |
| Time | varchar(5) | NULL | строка, например "12:00" |
Варианты выбора (Select)
Table: object_store_(id)
| Имя | Тип данных | По умолчанию | Комментарий |
|---|---|---|---|
| Select | varchar(255) | NULL | выбранное значение |
| User | varchar(255) | NULL | ID пользователя Pimcore |
| Country | varchar(255) | NULL | код страны |
| Language | varchar(255) | NULL | код языка |
| Multiselection | text | NULL | строка, выбранные значения, разделённые "," |
| Countries (Multiselect) | text | NULL | строка, выбранные коды стран, разделённые "," |
| Languages (Multiselect) | text | NULL | строка, выбранные коды языков, разделённые "," |
Связи
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 Point | double | NULL | создаёт две колонки: `(name)longitude' и '(name)latitude' |
| Geographic Bounds | double | NULL | создаёт четыре колонки: '(name)NElongitude', '(name)NElatitude', '(name)SWlongitude' и '(name)SWlatitude' |
| Geographic Polygon | longtext | NULL | сериализованные геоданные |
Прочие
| Имя | Тип данных | По умолчанию | Комментарий |
|---|---|---|---|
| Image | int(11) | NULL | ID ассета изображения |
| Image Advanced | int(11), text | NULL | создаёт колонку '(name)image' (int) для id ассета изображения и колонку '(name)hotspots' (text) для hotspot’ов; hotspots хранятся сериализованно. |
| Video | text | NULL | сериализованные данные |
| Checkbox | tinyint(1) | NULL | булево значение: 1 = true |
| Link | text | NULL | сериализованные данные |
Специальные поля данных
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 и их порядок (индекс) |
Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.