| Предыдущая лекция | Следующая лекция | |
|---|---|---|
| Группировка, агрегатные функции, JOIN-ы | Содержание | Создание базы данных. Импорт данных. |
Статья похоже переводная, встречаются "кривые" выражения.
Давайте теперь поработаем с системой MyFlix Video Library, чтобы помочь понять концепцию ER-диаграмм. Мы будем использовать эту базу данных для всей практической работы в оставшейся части этого урока.
MyFlix — это юридическое лицо, которое сдает в аренду фильмы своим членам. MyFlix хранит свои записи вручную. Теперь руководство хочет перейти на СУБД
Вспомним шаги по разработке ER диаграммы для базы данных:
Участники — эта сущность будет хранить информацию об участниках.
Фильмы — эта сущность будет содержать информацию о фильмах
Категории — эта сущность будет содержать информацию, которая помещает фильмы в различные категории, такие как «Драма», «Действие», «Эпический» и т. Д.
Прокат фильмов — эта сущность будет хранить информацию о фильмах, сдаваемых в аренду ее членам.
Платежи — эта сущность будет хранить информацию о платежах, произведенных участниками.
Участники и фильмы
Из приведенного выше сценария мы можем видеть, что нужно использовать отношение «многие ко многим». Реляционные базы данных не поддерживают отношения «многие ко многим». Нам нужно ввести новую сущность - таблицу связей. Она имеет отношение один-ко-многим с таблицей участников и отношение один-ко-многим с таблицей фильмов.
Фильмы и категории лиц
Из этого можно сделать вывод, что характер отношений между категориями и таблицей фильмов один-ко-многим.
Участники и платежные организации
Из этого можно сделать вывод, что характер взаимоотношений между участниками и платежными организациями один-ко-многим.
Диаграмму будем делать в программе MySQL Workbench.
Запустите MySQL Workbench, откройте вкладку Модели и создайте новую модель (иконка с плюсом)
Переименуйте модель. Название модели будет использоваться в DDL-скрипте как название базы данных, поэтому название должно соответствовать задаче: например, ekolesnikov_test для лабораторных работ и user01 при выполнени демо-экзамена (если у вас еще нет аккаунта для подключения к БД, то можете этот шаг пропустить).
двойной клик по названию модели откроет окно редактирования
Кнопку "Rename References" нужно жать, если у вас уже есть диаграмма или таблицы
Добавьте диаграмму
Левую и правую панели можно скрыть, чтобы было больше места для диаграммы
Для добавления таблиц и связей используется панель или быстрые клавиши (можно посмотреть, наведя курсор на иконку)
Участники организации будет иметь следующие атрибуты
Кликните по иконке "Новая таблица" (или нажмите быструю клавишу T)
В верхней панели появятся настройки таблицы, можно там ничего не менять и кликнуть мышкой в том месте диаграммы, куда вы хотите поместить новую таблицу
Двойным кликом по таблице можно открыть окно свойств, где задать название таблицы (Member), добавить поля и их свойства
Двойной клик по свободному месту в конце списка полей добавляет новое поле
Добавьте атрибуты
Должно получиться примерно такое:
Обратите внимание:
Для создания связей нам нужно иметь сущности, создадим еще сущности Movie (Фильм) и Genre (Словарь жанров для фильмов)
Добавим поля цена и продолжительность (жанр пока не добавляем, он будет внешним ключём к справочнику жанров)
Таблицу для сущности "Платежи" нарисуйте сами, по аналогии с жанрами.
Связь один-ко-многим между сущностями Фильмы и Жанры (проговариваем для себя: у фильма может быть один жанр, один и тот же жанр может быть у нескольких фильмов)
Вообще у фильма может быть и несколько жанров, но мы в своей предметной области решили сделать так
Кликаем сначала по иконке связи один-ко-многим, затем по таблице у которой "много" и в конце по таблице где "один"
Система автоматически добавит поле для внешнего ключа (Genre_id), вот только название не соответствует соглашению CamelCase - переименуем его в genreId (двумя кликами по сущности входим в режим редктирования и там правим название поля)
Если присмотреться к интерфейсу, то можно заметить, что для связей есть по две иконки: с пунктиром и сплошная. Глубоко в теорию я не полезу, уточню только что при использовании идентифицирующей связи в связь включаются все ключи (т.е. если в таблице есть внешние ключи, то они тоже попадут в связь), поэтому всегда используйте неидентифицирующую связь (которая пунктирная)
Связь многие-ко-многим между участниками и фильмами
Кликаем по иконке связи многие-ко-многим, затем по связываемым таблицам (порядок в этом случае не важен)
Система автоматически создаст дополнительную таблицу связи, которая в реляционных СУБД и реализует связь многие-ко-многим.
Приведите названия таблиц и полей к соглашению CamelCase
Чтобы постоянно не переименовывать таблицы и поля можно в настройках Workbench задать шаблоны
Это исходный вариант (я подчеркнул поля, которые буду менять):
А это измененный
Теперь, если откатить изменения в диаграмме и заново создать связь, то получим такой результат:
Обратите внимание на типы ключей в таблице связи (MySQL Workbench использует не буквенное обозначение, а символьное: первичный ключ помечается ключиком, а внешний - оранжевым ромбиком). Для таблицы связи оба поля входят в первичный ключ (составной ключ)
Подробнее на созданные ключи можно посмотреть в соответствующих закладках:
Реализуйте ER-диаграмму по предметной области из лекции в программе MySQL Workbench
В репозитории опубликовать и файл диаграммы и экспорт этой диагрыммы в PDF.
| Предыдущая лекция | Следующая лекция | |
|---|---|---|
| Группировка, агрегатные функции, JOIN-ы | Содержание | Создание базы данных. Импорт данных. |