Построение ER диаграммы

ER – entity relation. Сущности и связи между ними.

Выбранные/назначенные подпроекты

1 incubation 1997г
2 anno 1404, 2009г
3 sims 2000г
4 HoMM3 1999г
5 tycoon 1994г
6 Рейнджеры 2002г
7 WC2 1995г
8 l2 с4
9 baldurs gate 1998г

С чего начать

Начать выполнение построение er-модели следует с:
1 найти по игре либо вики, либо подробную статью описывающую объекты в игре и взаимосвязи между ними. Ознакомиться с этими материалами.
(если с этим трудности – пишите скину ссылку)
2 выбрать инструмент для построения er-диаграмм (er – entity relation, сущности(зачастую это объекты) и связи между ними)
3 выписать имена классов объектов
4 определить свойства характерные для каждой сущности.

Онлайн редакторы диаграмм

Все они предназначены для одной и той же цели.
Выбирайте одни – тот, который вам будет удобнее.

1 Гграфический с drag-and-drop управлением и с вменяемым save/load (рекомендую именно этот)
https://nosqldbm.ru/#/

Управляемые через код + графическое представление
2 Показывал в классе
https://app.quickdatabasediagrams.com/#/
3 У этого вменяемый импорт экспорт
https://databasediagram.com/app
4 Тут есть более развёрнутый базовый пример
https://dbdiagram.io/d

Для 2 и 4 сохранение и загрузку выполняйте просто копированием кода диаграммы. И записывайте текст этого кода к себе в текстовый файл. (где то есть сохранение после логина)

Сущности, экземпляры, свойства

На примере проекта tycoon.

В игре есть транспорт, например грузовики. Жёлтый Mercedes или красная Scania или синий Renault – это не сущности, это экземпляры класса(сущности), все они относятся к одной сущности – автомобили.
грузовик, легковой, седан, хечбек – это не сущности и не свойства, это значения свойства. Все они относятся к одному свойству(полю) которое можно условно назвать type, и поставить у него тип enum или string, но предпочтительнее enum.

соответственно создаёте сущность:
transport
и прописываете те свойства которые важны для написания вики. Например:
id name type capacity description power accelerate max_speed
и не забывайте указать у свойств тип id – всегда int с флагом autoincrement(A).

String, enum или отдельная таблица-справочник

Продолжим разбирать предыдущий пример. Какой тип поставить у поля type для сущности transport.
Работать можно с любым из предложенных трёх. Но у них разная масштабируемость и защита от случайных ошибок.

  • string: Создавая новую запись в таблице транспорта, вы просто вносите значение поля с клавиатуры, например, паровоз, вагон, фура, тягач, автобус. Но при таком вводе всегда есть веротность опечататься и написать например вместо фУра – фАра. Плюс вводя значение вы должны помнить: какие значения являются допустимыми.
  • enum: допустимые значения вы создаёте один раз а при добавлении или редактированни записей – выбираете из выпадающего списка. В этом случае вам уже не придётся помнить доступные и значения и вы не сможете опечататься. Однако изменение enum будет требовать либо лезть в бд либо писать доп функционал в админке.
  • Отдельная таблица справочник transport_category. В этом случае вы выносите все значения в отдельную сущность: категории транспорта. И связываете поля transport.type -> transport_category.id. При необходимости создать новый тип транспорта, вы просто создаёте новую запись в таблице transport_category также, как добавляете новую запись в таблицу самого транспорта transport.

Однако если вы будете создавать не вики, а саму игру, вам понадобится для транспорта ещё одна таблица transport_instance, которая будет ссылаться на таблицу transport таким образом, transport_instance.type -> transport.id.

Связи между таблицами БД. Простой пример.

Пусть у нас есть две простые таблицы:
gender – где всего два значения id name:
1 м
2 ж
user – тоже с простой структурой id name gender.
Как будет построена связь в на уровне таблиц mysql? Ответ – через запись gender.id в user.gender. Пример:
1 Алексей 1
2 Борис 1
3 Вера 2
4 Глеб 1
5 Денис 1
6 Елена 2

Работа с редакторами ER -схем

создать новую таблицу сущности

добавить новое поле свойства в таблицу

редактировать свойство

установить новую свзяь между полями двух таблиц

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *