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. Параметризация
- ➡️ Раздел 10. Мультипроектность
- ➡️ Раздел 11. Модуль Base