Научимся Проектировать Диаграммы Entity Relations.

Привет. Данная статья посвящена одной из самых популярных, а также знакомых многим конструктивных моделей – ER( Отношения с сущностями ), который был предложен ученым-компьютерщиком Питером Ченом в 1976 году.



Научимся проектировать диаграммы Entity Relations.

По ходу статьи простым языком на простых примерах из жизни мы будем разрабатывать разные варианты схем, которые будут зависеть от типа их подключения.

Давай начнем!



Объектно-ориентированный дизайн

Прежде всего хотелось бы сказать несколько слов об ООП (Объектно-ориентированном программировании/проектировании), чтобы не возникло проблем с пониманием парадигмы самой диаграммы.

Мне удобнее абстрагировать эту модель принципом ООП, где сущность — это объект, атрибуты — его характеристики, а связи — это что-то вроде посредника (в некоторых случаях — типа метода).



Быстрый старт

Основным преимуществом модели проектирования Entity Relationship является ее универсальность.

Вы можете спроектировать базу данных (Database), работу программы, принципы взаимодействия и т.д. Что нужно знать, начиная учиться? — Вам нужно знать на старте, что основная работа ведется над соотношением сущности и связи.

Для более легкого восприятия стоит помнить, что суть существительное , который находится в прямоугольнике, и соединение глагол , который находится в ромбе.

Приведем пример:

Научимся проектировать диаграммы Entity Relations.

Я думаю, вы понимаете, что к чему.

Наш программист преподает Python. Кажется, все логично.

Но что это за единицы в примере? - это показатель тип связи! В этом примере используется тип соединения «Один к одному»:

Научимся проектировать диаграммы Entity Relations.

К видам связи мы вернемся, но чуть позже, а сейчас нужно посмотреть еще на одно НО: — Диаграмму следует читать в обе стороны.

Если читать слева направо, то все логично, как было сказано ранее, а если наоборот. то еще несколько раз подумаем, что такое логика.

Действительно, так написано и это правильно! Это лишь одна из некоторых особенностей этой модели, которая иногда может сбить с толку.

Однако ничто не мешает вам, как и многим со стороны юнитов, добавить стрелку, как в примере ниже:

Научимся проектировать диаграммы Entity Relations.

P.S. Надеюсь, вам интересно.

Создать такие диаграммы можно в редакторе диаграмм Dia.

Атрибуты

Итак, у нас есть программист, но мы ничего о нем не знаем.

Без чего программист не программист? - Без всяких атрибутов! Добавим к нашему примеру:

Научимся проектировать диаграммы Entity Relations.

Да, атрибуты не особо отличают нашего программиста от обычного человека.

но в будущем мы исправим это новыми атрибутами! На мой взгляд, атрибут — это COLUMN (столбец) в таблице базы данных.

Атрибуты также могут быть пустыми Если в таблице вашей базы не обязательно указывать фамилию (тогда атрибут будет необязательным), то атрибут должен состоять из двух овалов: внешнего и внутреннего (внутри которого находится имя атрибута).

Идентификация атрибутов На схеме имя атрибута может быть подчеркнуто — это нормально.

Этого не нужно бояться, так как это просто идентифицирующий признак.

То есть это атрибут, который необходимо всегда заполнять, который является обязательным (первичный ключ).

В качестве примера известный id. Окей, теперь нужно дать программисту знания (какие языки, технологии он знает).

- А не будем ли мы сразу перечислять составляющие его знаний с каждым отдельным признаком? Правильно, мы будем использовать составной атрибут( атрибут, состоящий из атрибутов компонента )! Хотелось бы отметить, что атрибуты компонента также могут быть составными.

Вопрос только в том, как вы это будете реализовывать.



Научимся проектировать диаграммы Entity Relations.



Виды связи

Большой.

Мы смогли это выяснить.

Теперь давайте посмотрим на остальные виды общения! Продолжим тип подключения — Один ко многим:

Научимся проектировать диаграммы Entity Relations.

Я покажу вам на примере:

Научимся проектировать диаграммы Entity Relations.

Теперь наш программист еще и изучает Perl. Неплохо.

Однако хотелось бы отметить, что приведенный выше пример является лишь исключением, чтобы наглядно показать, куда идет связь, ведь ответвлений может быть тысяча, рисовать которые было бы глупо.

В дальнейшем мы вернемся к сокращенным и правильным обозначениям, но эту хилую закономерность просто стоит запомнить, чтобы иметь общее представление о том, что к чему.

Надеюсь, мне удалось объяснить вам, что представляет собой тип отношений «Один ко многим».

*Связь одного объекта с несколькими и наоборот* Прежде чем продолжить изучение типов общения, следует знать, что соединения также имеют атрибуты .

На примере показывать не буду — потому что это без проблем можно понять, на словах.

Представьте себе, что у вас есть подключение «Транзакции».

Допустим, в вашем проекте вам необходимо сохранить всю информацию о сохраненных транзакциях, сохраняется ли она в файле или в базе данных, не имеет значения.

Вам нужно экономить время, исключения (возникшие ошибки) и что-то еще.

В нашем случае все вышеперечисленное — атрибуты, которые будут принадлежать соединению.

Такие атрибуты также могут быть составными, идентифицирующими или необязательными.

Вопрос только в реализации.

Давай продолжим.

Остается последний тип связи — Многие ко многим:

Научимся проектировать диаграммы Entity Relations.

Как обычно покажу пример, но не с Программистом, а на примере связи Зрителя и Фильма, на каком-то сервисе для просмотра Фильмов:

Научимся проектировать диаграммы Entity Relations.

Здесь есть два спорных момента.

Давайте начнём разбираться.

Первый: - Почему связь больше похожа на суть?

Чтобы упростить отношения «многие ко многим», мы используем промежуточные сущности .

- Почему здесь нет филиалов?
— Зритель может подписаться на многие фильмы.

— У фильмов может быть много зрителей, которые на них подписываются.

Теперь давайте рассмотрим другой способ реализации связи «Многие ко многим», который будет немного сложнее написать, но, возможно, более понятен для тех, кто не знает о промежуточных сущностях:

Научимся проектировать диаграммы Entity Relations.

Как вы могли заметить, в данном примере присутствует связь типа «Один ко многим», а то и несколько.

Это правда и это легко объяснить.

Дело в том, что тип отношений «Многие ко многим» равен двум «Один ко многим».



Научимся проектировать диаграммы Entity Relations.

Вам, вероятно, интересно, почему между соединением и сущностью есть два ребра.

Это немного сложнее объяснить.

Внимательно прочитайте.

Дело в том, что существуют необязательный И обязательные соединения .

Запомните личность:

Необязательные подключения создают частичное участие, а обязательные подключения создают полное участие.

— Что такое частичное и полное участие? Частичное участие также является одним из исключений, чем-то похожее на необязательный атрибут, но зависит от сущности.

Представьте себе картину.

Есть две сущности: Покупатель и продукция.

Тип отношений – Один ко многим.

У них общая связь – Покупки.

Но нам нужно понять кое-что еще.

Без чего покупатель не покупатель? - Без хотя бы одной покупки! Данный случай является представителем частичного подключения, так как мы даем выбор «Купить и стать покупателем или отказаться».

В этом случае у нас будет одно ребро между отношением «Покупки» и сущностью «Продукты».

Теперь рассмотрим полное участие.

Полное участие – это тот случай, когда выбора нет. Наш программист останется программистом, даже если он ничему не научится, благодаря тому, что мы записываем на схеме, что он должен чему-то научиться, и исключений быть не может. Фиксируем это дело двумя ребрами.

Тип участия зависит от того, как вы планируете, нужна ли выборка на этапе коммуникации.

Мы закончили с этим.

Давай продолжим.

Вспомните пример «Один ко многим», где после подключения «Обучает» шли названия языков программирования, что приводило к большому количеству ветвей, потому что это было не корректно с точки зрения записи.

Подумайте только, нам не обязательно делать ветки для каждого языка.

Мы можем просто создать сущность «Язык программирования», в которую поместим атрибуты, которые будут отвечать за ее имя, возраст, мощность и многое другое.

Я думаю, ты понимаешь.

Советую использовать аббревиатуру «Многие ко многим».



Слабые сущности

Давайте посмотрим на окончательную концепцию.

Представьте, что у вас есть таблица «Родитель» и «Дочерний» соответственно, одни и те же сущности на диаграмме.

Может ли одно существовать без другого? Я думаю нет. И биологически, и вообще логически.

Слабая сущность: не может быть яблока без яблони
.

В этом примере сущность «Ребенок» является слабой сущностью.

Слабые сущности — это те сущности, которые не могут существовать без другой сущности.

Создаем сущность «Дочерняя» в надежде, что у Родителя/Родителей нет дочерних элементов с такими же именами, иначе нашу сущность, которая может быть таблицей в базе данных, будет сложно назвать Нормализованный (таблица, в которой соблюдены правила Автономии Данных и есть Идентификатор Первичного Ключа), потому что мы просто не можем отличить детей.

Однако такие случаи случаются, но это можно исправить, добавив дополнительный атрибут. В данном случае именно атрибут «Имя» создает такую ситуацию, и он называется ключевой компонент слабой организации .

Названия таких атрибутов в овалах подчеркнуты пунктиром, а сущность и связь помещены в дополнительных рисунках, в которых они состоят. Позволь мне привести пример:

Научимся проектировать диаграммы Entity Relations.



Заключение

В заключение хотелось бы сказать, что одна из основ грамотной совместной работы – это хорошее объяснение поставленных задач, хорошая презентация продукта, который необходимо разработать, в этом и помогают проектные модели.

Entity Relationship — это модель проектирования, популярная на протяжении десятилетий.

Он позволяет строить изящные диаграммы, которые при правильном подходе можно дополнять и модифицировать в будущем.

Не ленитесь учиться.

Спасибо за внимание!

Источники

— Книга «Руководство по MySQL» Авторы: Сейед М.

М.

«Саид» Тахагоги, Хью ?.

Уильямс — ru.wikipedia.org/wiki/Entity –relationship_model Теги: #ИТ-стандарты #отношения между организациями

Вместе с данным постом часто просматривают: