<small>Предыдущие статьи:

- ➡️ [Раздел 05. Принципы работы](/docs/05-principles)
- ➡️ [Раздел 06. Архитектура](/docs/06-architecture)
- ➡️ [Раздел 07. Автолоадер](/docs/07-autoloader)
</small>
# SLOT-H: Соглашение о хранилище данных

В системе приняты строгие соглашения по именованию, которые делают структуру данных предсказуемой и единообразной.

---

## Именование классов

Класс модели и класс DbTable должны иметь **одинаковое имя**.

Пример: Модель `Person` и DbTable `Person`

Имя класса пишется в единственном числе, в стиле CamelCase. Это подразумевает, что результат работы модели - один объект, даже если метод возвращает коллекцию.

---

## Именование таблиц

Имя таблицы в хранилище пишется **строчными буквами во множественном числе**.

Это подразумевает, что в таблице хранится множество сущностей.

Пример: Таблица `persons` для модели `Person`

---

## Именование полей

Имена полей в хранилище всегда содержат префикс - имя сущности в единственном числе, затем через подчёркивание - название значения.

Пример: `person_id`, `person_first_name`, `person_second_name`

### Поля-ссылки

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

Пример: В таблице `persons` поле `country_id` ссылается на таблицу `countries`, где первичный ключ называется `country_id`

---

## Пример полной структуры

- **Модель:** `Person`
- **DbTable:** `Person`
- **Таблица в БД:** `persons`
- **Поля:** `person_id`, `person_first_name`, `person_second_name`, `country_id`, `city_name`, `language_id`
- **Связь:** `country_id` ссылается на `countries.country_id`
- **Связь:** `language_id` ссылается на `languages.language_id`

---

## Зачем это нужно

**Единообразие.** Любой разработчик, открыв проект, сразу понимает структуру данных, не изучая документацию.

**Предсказуемость.** Имя таблицы всегда соответствует имени модели во множественном числе. Имя поля всегда соответствует имени сущности в единственном числе.

**Автоматизация.** Базовые классы ORM используют эти соглашения для автоматического построения запросов и связей между таблицами.

**Связи.** По имени поля, ссылающегося на другую таблицу, ORM определяет связь и автоматически строит JOIN-запросы.

---

## Что дальше?

- ➡️ [Раздел 09. Параметризация](/docs/09-parametrization)
- ➡️ [Раздел 10. Мультипроектность](/docs/10-multiproject)
- ➡️ [Раздел 11. Модуль Base](/docs/11-module-base)
