Дизайнер модели данных
Создание базы данных с использованием дизайнера модели данных
Создание базы данных
Пришло время спроектировать собственную базу данных. Для этого нужно перейти во вкладку Database (База данных) на левой панели.
Модели данных
Данные в базе хранятся в виде специальных таблиц (моделей). И вы можете заметить, что одна модель у нас уже есть. Она является частью модуля авторизации и включена в каждый проект по умолчанию. Благодаря ей осуществляется создание новых пользователей приложения и управление уже существующими. Но мы сейчас не будем останавливаться на ее изучении, а создадим собственную модель.
Представим, что мы разрабатываем картографический сервис. Создадим модель, которая содержит информацию о странах. Для ее создания нужно нажать правой кнопкой мыши в пустом месте холста и выбрать Create empty model (Создать пустую модель).
Для создания нам достаточно указать только название модели. С автогенерацией эндпойнтов и элементов пользовательского интерфейса мы будем разбираться в дальнейших модулях курса.
Поля модели
Обратите внимание на то, что сразу после создания модель уже содержит 4 поля. Это системные поля, наличие которых значительно упрощает начальное создание и дальнейшее использование модели.
ID (integer) - Уникальный идентификатор, первичный ключ (primary key). Автоматически создается для каждой новой записи в таблице и предназначен для того, чтобы гарантировать отсутствие дублей. Именно по ID можно однозначно идентифицировать запись в таблице. Его значение начинается с 1 и автоматически увеличивается на 1 для каждой новой записи.
CreatedAt (datetime) - Время создания записи в таблице.
UpdatedAt (datetime) - Время последнего внесения изменений в запись.
DeletedAt (datetime) - Время удаления записи. Конечно, только в том случае, если было использовано soft-удаление. То есть такое удаление, когда запись только помечается удаленной и фильтруется запросами на доступ к ней, но при этом физически остается в таблице. В этом отличие от bulk-удаления, которое действительно полностью удаляет данные.
Помимо системных будет разумно добавить в созданную модель и пользовательские поля. Предположим, что мы хотим видеть название страны и какое-то описание с информацией о ней.
Выбор типа поля не должен составить проблем. Для названия подойдет String, а для информационного описания Text.
Помимо этого доступны еще четыре переключателя:
Multiple values (Array) - использование массивов вместо одиночных записей.
Not null - указанное поле не может быть пустым, всегда должно содержать в себе данные.
Unique - значение поля должно быть уникальным, в данной модели не может быть двух записей, чьи значения данного поля совпадают.
Index - говорит о том, что будет создан специальный индекс для этого поля с целью ускорения поиска.
В целом, правильным будет ставить отметки только в том случае, если это действительно необходимо. Например, мы могли бы отметить Not null и Unique для названий стран, предположив, что не может быть страны без названия, или двух стран с одинаковым названием. Тем не менее хорошей идеей будет контролировать это на этапе создания логики работы приложения, а не закладывать ограничения в саму базу данных.
Аналогичным образом создайте таблицу с информацией о городах. Подумайте, какие поля данных могут в ней содержаться, какой тип этих полей.
Связи моделей данных
Данные в базе существуют не сами по себе, а в виде разрозненных таблиц. Они определенным образом связаны друг с другом. Ключевым моментом разработки модели данных является определение этих отношений и построение связей.
Для установления таких связей необходимо провести мышкой линию от границы одной модели, до другой. В нашем примере мы точно знаем, что каждый город находится в какой-то стране, соответственно можем создать связь от страны к городу.
Существует 3 различных типа связей:
Один-к-одному (has one). Каждой записи в таблице сопоставляется одна запись из связанной таблицы (это верно и в обратную сторону). Простой пример - человек и его паспорт. Мы всегда можем быть уверены, что эта связь уникальна. У паспорта может быть только один владелец, а у каждого человека может быть только один действительный паспорт.
Один-ко-многим (has many). Каждой записи одной таблицы может соответствовать множество записей другой таблицы. Наша база данных является подобным примером. В стране может быть множество различных городов, но при этом каждый город может принадлежать только одной стране. Именно такую связь мы и установим.
Многие-ко-многим (many to many). Связь при которой множественным записям из одной таблицы могут соответствовать множественные записи из другой. Простой пример - связь преподавателей и студентов. Каждый преподаватель может обучать множество студентов, равно как и каждый студент может обучаться у множества различных преподавателей.