|
|
@@ -6,7 +6,7 @@
|
|
|
<a href="../articles/sql_for_beginner.md">Основы SQL
|
|
|
</a></td><tr></table>
|
|
|
|
|
|
-# Создание ER-диаграммы в среде MySQL Workbench
|
|
|
+# Создание ER-диаграммы
|
|
|
|
|
|
## Предметная область
|
|
|
|
|
|
@@ -14,7 +14,7 @@
|
|
|
|
|
|
MyFlix — это юридическое лицо, которое сдает в аренду фильмы своим членам. MyFlix хранит свои записи вручную. Теперь руководство хочет перейти на СУБД
|
|
|
|
|
|
-Вспомним шаги по разработке диаграммы EER для базы данных:
|
|
|
+Вспомним шаги по разработке ER диаграммы для базы данных:
|
|
|
|
|
|
* Определить сущности и отношения, которые существуют между ними.
|
|
|
* Каждая сущность, атрибут и отношение должны иметь соответствующие имена, которые могут быть легко понятны и нетехническим людям.
|
|
|
@@ -54,25 +54,13 @@ MyFlix — это юридическое лицо, которое сдает в
|
|
|
|
|
|
Из этого можно сделать вывод, что характер взаимоотношений между участниками и платежными организациями один-ко-многим.
|
|
|
|
|
|
-## Теперь давайте создадим модель EER, используя MySQL Workbench
|
|
|
+## Теперь давайте создадим ER диаграмму
|
|
|
|
|
|
->Модель улучшенного отношения сущностей (EER)
|
|
|
->
|
|
|
->Модель Enhanced Entity Relationship (EER) — это модель данных высокого уровня, которая предоставляет расширения для исходной модели Entity Relationship (ER). EER Models поддерживает более детальный дизайн. EER Modeling появилась как решение для моделирования очень сложных баз данных.
|
|
|
+
|
|
|
|
|
|
-В рабочей среде *MySQL Workbench* перейдите в режим моделирования и нажмите кнопку «+»
|
|
|
+Давайте посмотрим на два типа объектов, с которыми мы будем работать (на примере программы *draw.io*).
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-Дважды щелкните кнопку *Добавить диаграмму*, чтобы открыть рабочее пространство для диаграмм ER.
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-Появляется окно *EER Diagram*
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-Давайте посмотрим на два типа объектов, с которыми мы будем работать.
|
|
|
+
|
|
|
|
|
|
* Объект таблицы позволяет нам создавать объекты и определять атрибуты, связанные с конкретным объектом.
|
|
|
* Кнопки отношений позволяет нам определять отношения между объектами.
|
|
|
@@ -88,61 +76,47 @@ MyFlix — это юридическое лицо, которое сдает в
|
|
|
|
|
|
### Создадим таблицу участников:
|
|
|
|
|
|
-1. Кликните по кнопке "Таблица"
|
|
|
-
|
|
|
- В верхней части окна диаграммы появится запрос параметров для создаваемой таблицы:
|
|
|
+1. Перетащите на форму объект "таблица"
|
|
|
|
|
|
- 
|
|
|
+ 
|
|
|
|
|
|
- В поле *Collation* Выбираем **utf8mb4_0900_ai_ci** и кликаем по области диаграммы - появится сущность с названием *table1* (остальные параметры не меняем)
|
|
|
+1. Задайте название сущности и добавьте атрибуты
|
|
|
|
|
|
- >Что такое *Collation* и зачем их так много?
|
|
|
- >
|
|
|
- >Параметр *Collation* указывает серверу, как нужно сортировать и сравнивать строки. Вот, например, строки “Apple” и “apple”. Они разные или нет? Это зависит от указанного *Collation*. Если с регистром всё более менее понятно, то что делать с примером “елка” и “ёлка”? Считать их как одинаковые или как разные? Это все тоже в *Collation*.
|
|
|
+ >Добавление нового атрибута:
|
|
|
>
|
|
|
- >В *Collation* есть несколько частей:
|
|
|
- >
|
|
|
- >* **CI** — Case Insensitive — без учета регистра;
|
|
|
- >* **CS** — Case Sensitive — c учетом регистра;
|
|
|
- >* **AS** — Accent Sensitive — с учетом аксонов или диакритических знаков, проще говоря 'a' не считается равным 'ấ'.
|
|
|
- >* **AI** — Accent Insensitive — без учета аксонов или диакритических знаков, проще говоря 'е' считается равным 'ё'.
|
|
|
- >* **UTF8** — позволяет хранить данные в UTF8.
|
|
|
- >* **mb4** — минимальное количество байт для хранения символа utf (**utf8** без суффикса **mb4** использует 3 байта на символ, и в этот набор не входят, например, *emoji*)
|
|
|
- >* **bin** — простое побитовое сравнение
|
|
|
-
|
|
|
-2. Дважды кликните мышкой по этой сущности. Появится окно свойств, показанное ниже:
|
|
|
-
|
|
|
- 
|
|
|
-
|
|
|
-3. Задайте название сущности (поле **Table Name**) и добавьте атрибуты (**Column Name**)
|
|
|
+ >
|
|
|
|
|
|
Должно получиться примерно такое:
|
|
|
|
|
|
- 
|
|
|
+ 
|
|
|
+
|
|
|
+ >При наведении курсора мышки на объект, показывается информация о типе объекта
|
|
|
+ >
|
|
|
+ >
|
|
|
|
|
|
Повторите эти действия для всех сущностей, в итоге должно получиться примерно так:
|
|
|
|
|
|
-
|
|
|
+
|
|
|
|
|
|
Обратите внимание:
|
|
|
|
|
|
* Таблица связей названа по именам связываемых сущностей
|
|
|
* В названиях сущностей и атрибутов используем CamelCase и единственное число
|
|
|
-* сразу создаем атрибуты для связей (PaymentId, MemberId, MovieId? CategoryId). В принципе *MySQL Workbench* может автоматически созавать эти атрибуты при создании связей, но при этом он называет их не по нашему стандарту.
|
|
|
+* сразу создаем атрибуты для связей: *paymentId*, *memberId*, *movieId*, *categoryId*. Для определения направления связи проговариваем про себя "у одного участника может быть несколько покупок" и, соответственно создаём аттрибут *paymentId* в сущности, которой **много**
|
|
|
|
|
|
### Создадим связи
|
|
|
|
|
|
-1. Кликаем по иконке создания связи "один-ко-многим"
|
|
|
+1. Используем тип связи "один-ко-многим"
|
|
|
|
|
|
- 
|
|
|
+ 
|
|
|
|
|
|
-2. Затем последовательно кликаем по внешнему ключу MemberMovie.MemberId и Member.id (нужные поля подсвечиваются под курсором)
|
|
|
+1. Соединяем нужные аттрибуты сущностей соответствующими сторонами связи (проговариваем для себя: "в одной категории может быть много фильмов")
|
|
|
|
|
|
- 
|
|
|
+ 
|
|
|
|
|
|
Повторяем эти действия для всех связей, в итоге получится примерно следующее:
|
|
|
|
|
|
-
|
|
|
+
|
|
|
|
|
|
<table style="width: 100%;"><tr><td style="width: 40%;">
|
|
|
<a href="../articles/5_1_1_1_data_dictionary.md">Словарь данных
|