Когда мы решаем некую учетную задачу, то можно сказать, что мы “моделируем реальность», то есть создаем некую “модель мира” для решения учетной задачи.
(!) Что такое «модель»? Возможно, что в детстве у вас были «модели автомобилей и самолетов”? Модель - это уменьшенная копия, повторяющая свой «реальный прототип». Модель – это не сам "объект", но это нечто похожее на прототип, что отражает его основные особенности.
Можно привести еще один пример модели. Карта местности – это тоже модель, только модель не предмета, а участка поверхности земли. И хотя карта не есть сама местность ни по размеру, ни по свойствам, но она позволяет полностью ориентироваться на местности. В данном курсе мы будем использовать инструменты, позволяющие построить на разных уровнях модель, своего рода карту, которая даст возможность увидеть “всю область учета” целиком. Это будут ER-модель и “схема журнал-операция”.
ER-модель, “модель сущность-связь” (entity - relationship model, ER - model), является одним из инструментов моделирования реальности. ER-модель позволяет построить модель чего угодно, при этом часто используется при проектировании реляционной базы данных.
“Модель сущность-связь” (ER-модель) использует три элемента: сущности, связи и атрибуты.
Сущность это реальный, либо воображаемый объект, информация о котором должна быть учтена в модели. Примеры сущностей: сотрудники, номенклатура, накладные, расчетные счета, здания, станки, склады, подразделения и т.д.
Связь это некоторая ассоциация между сущностями. Связь каким-то образом “связывает” сущности между собой (отсюда и слово “связь”). Например, расчетный счет связан с банком, в котором он открыт. Сотрудник связан с подразделением, в котором он работает. Здание связано с собственником, которому принадлежит.
Атрибуты сущности это некие характеристики, параметры, являющиеся некоторыми свойствами сущности. Примеры:
- Атрибутами для сотрудника это могут быть: ФИО, паспорт, адрес проживания, год рождения, пол, образование, семейное положение и т.д.
- Атрибутами для номенклатуры: группа товаров, единица измерения, цвет, артикул, размеры и т.д.
- Атрибутами для здания: тип строения, назначение, этажность и т.д.
- Атрибутами для подразделения: месторасположения, подчиненное подразделение, руководитель, принадлежность филиалу и т.д.
Для того, чтобы легче осознать, что такое "сущность-связь-атрибут", можно использовать следующие две аналогии из грамматики русского языка.
Первая аналогия - из морфологии языка. Можно представить, что Сущность – это имя существительное. Связь - это глагол. А Атрибут - это прилагательное.
Вторая аналогия - из синтаксиса языка. Можно представить, что Сущность – это подлежащее или дополнение. Связь - это сказуемое. Атрибут - это дополнение или обстоятельство. См. рисунок ниже.
(!) Мы не претендуем на академичность, наша главная задача в кратчайшие сроки получить практический результат, получить навыки в настройке учетных систем.
Тогда связи в ER-модели можно представить в виде предложений. См. рисунок ниже.
Приведем другие примеры. Все можно представить в виде синтаксического анализа предложения.
3) Товар А (сущность_1) поставлен (связь) поставщиком (сущность_2) на склад (сущность_3) в количестве 100 штук (атрибут).
4) Рабочий (сущность_1) взял деталь (сущность_2) совершил (связь) операцию (сущность_3) и получилась новая деталь (сущность_4), длинной 10 см, шириной 15 см (атрибут).
Далее нам потребуются характеристики Связи:
- тип связи
- обязательность связи
- степень связи
(1) Тип связи: 1:1, 1:n, n:n. Это очень важное понятие. Тип связи определяет очень многое в структурах таблиц, и в действиях над ними.
Связь 1:1 (читается “один-к-одному”) означает, что связь между сущностям такова, что экземпляру одной сущности всегда соответствует один экземпляр другой сущности. Пример, муж и жена. У мужа всегда одна жена, а у жены – один муж. Говорим о Фросе Ивановой и всегда понимаем, что ее муж Поликарп Иванов. И не может быть иначе. А говорим о Поликарпе Ивановом, и всегда понимаем, что его жена, Фрося Иванова.
Связь типа 1:n (читается, как “один-к-многим”). Пример, ребенок и отец. У ребенка всегда один отец, но у отца может быть множество детей.
Связь типа n:1 (читается, как “многие-к-одному”). Фактически, это предыдущий тип связи, только “взгляд с противоположной стороны”. Много детей может быть у одного отца, но для них он (биологический отец) может быть только один.
Связь типа n:n (читается “многие-ко-многим”). Пример: друзья. Можно сказать: “У меня много друзей, и каждый из моих друзей имеет много друзей. Я дружу со многими и каждый из моих друзей дружит со многими, а не только со мной”.
(!) Тип связи крайне важное понятие. Так как во-многом именно тип связи во многом и определяет архитектуру таблиц. В главе 5 это будет подробно объяснено.
(2) Обязательность (кардинальность) связи: Другими словами, “должна или может”. Женщина может иметь ребенка, а может и не иметь. Такая связь “не обязательна”, “не кардинальна”. А у ребенка должна быть мать (должна в биологическом смысле), без матери он не мог появиться на свет. Такая связь “обязательна” или “каринальна”.
(3) Степень связи: бинарная/небинарная связь. Часто связи связывают две сущности (это бинарные связи). Но иногда связь имеет смысл, только если связаны много сущностей в одну связь. Например, футбольные чемпионаты. Нельзя сказать, игра Бразилии:Германии. Не понятно о чем речь. Можно сказать: Чемпионат мира 2014, 1/2 финала, Бразилия:Германия (1:7). То есть смысл имеет только ОДНОВРЕМЕННАЯ связь четырёх сущностей:
чемпионат … ↔ игра…↔ команда №1 ↔ команда №2
Чемпионата не достаточно, так как команды теоретически могут встретиться два раза (в группе и в финале)
Теперь примем следующие обозначения:
Теперь давайте нарисуем какую-нибудь схему для примера. В схемах ER-моделей часто в значке для Связи (внутри ромба) пишут глагол, которым можно определить Связь. См. рисунок ниже.
“Прочесть” это можно так: “Каждый сотрудник может быть быть руководителем нескольких подразделений. Может но не обязан, то есть могут быть такие сотрудники, которые — не руководители. Но при этом сотрудник может занимать более одной руководящей должности (по совместительству).
А у каждого Подразделения должен (именно должен) быть один руководитель из числа сотрудников”.
Теперь попробуем сформулировать то же самое, но используя специальные термины.
Сущность “Сотрудник” связана с сущностью “Подразделения” связью “один-к-многим”, при этом связь подразделения с сотрудниками кардинальна, (должен) а сотрудника с подразделениями не кардинальна (может, но не должен).
Единственное, что что в этой схеме может быть непонятно, почему Сотрудник “может”, а возле него значок “должен”. См. рисунок ниже.
На самом деле читается не значок который ближе к Сущности, а значок дальний от Сущности. Смотрите как это "читается" на рисунке ниже.
Потренируемся на других примерах. См. рисунок ниже.
Здание может принадлежать населенному пункту (а может и не принадлежать, если это сруб староверов). А населенного пункта без зданий не бывает. При этом Здание всегда принадлежит одному Населенному пункту, а Населенный пункт может иметь много Зданий.
Рассмотрим следующую схему “сущность-связь”.
И армия может быть без танков (партизанская армия), и танк может быть без армии (в музее, например). Но уж если и есть танки в армии, то танков в армии может быть много, но армия у танка только одна (не может танк служить двум армиям одновременно).
Рассмотрим следующую схему “сущность-связь”.
Женщина может быть мамой многих детей. Хотя может и не иметь ни одного. Но если уж ребенок есть, то у него только одна мама и она у него обязательно есть (биологическая мама, без которой ребенок не мог бы появиться на свет).
Рассмотрим следующую схему “сущность-связь”.
У каждого может быть много друзей. И каждый “мой друг” может сам дружить с бесконечным количеством друзей, Хотя может случится и так, что у кого-то может и не быть ни одного друга.
(!) Стоит отметить, что не существует общих правил, что считать связью, а что сущностью. В рассмотренном выше примере мы приняли, что “Сотрудник - руководит (является руководителем) подразделения”. Здесь “руководит – это связь.
Однако, можно эту ситуацию выразить по-другому. Ввести сущность "руководитель" (как должность). Тогда можно сказать, что сущность Сотрудник занял должность Руководитель. А Руководитель связан с сущностью Подразделение. То есть “руководит” было связью, а стало сущностью.
Мы познакомились с тем, как Сущности и Связи изображаются на схеме. Перейдем к отображению на схеме Атрибутов.
Атрибуты изображаются на схеме - эллипсом. Эллипс связывается линией с той сущностью, чьим атрибутом он является. Ранее мы говорили, что используя синтаксис языка, атрибуты можно представить, как определения и обстоятельства. Тогда, глядя на схему можно сказать, что “образованный (атрибут), женатый (атрибут) сотрудник, возглавляет московское (атрибут) подразделение…”. См. рисунок ниже. См. рисунок ниже.
(!) Иногда в схемах подчеркивают уникальный атрибут, который называют ключом. Это нужно для того, чтобы как-то идентифицировать (то есть отличать сущности). Например, ФИО для сотрудника, в общем случае, не может быть идентификатором, так как могут быть полные тезки. Но мы этот вопрос не рассматриваем подробно, так как эта задача проектирования решена в www.HubCloud.io.
Кстати, иногда ключи называют “идентификатор”, то есть такой атрибут, по которому всегда однозначно можно понять о каком конкретном элементе (экземпляре) сущности идет речь.
Но атрибуты могут быть не только у Сущностей, но и у Связей. Атрибуты связи отображаются также эллипсами, их соединяют с теми Связями, к которым они относятся. См. рисунок ниже.
(!) Ранее в статье про “плоские таблицы” Что может сводная таблица в Excel. Часть 1 мы вводили понятия «данные-измеряемые величины-ресурсы-цифры-показатели»”. Где их место в ER-модели? Числовые данные - это чаще всего атрибуты Связи.
Подведем итоги главы: мы познакомились с ER-моделью и изучили ее инструменты на примере одной связи (сотрудник↔подразделение). Очевидно, что нам в учете будут нужны таблицы, а не схемы. Существует специальный алгоритм по переходу от схем ER-модели к таблицам и через две главы мы его рассмотрим. А пока мы немного забежим вперед и познакомимся каким образом осуществляется переход от ER-модели к таблицам на одном примере, на примере ER-модель связи сотрудник↔подразделение, которую мы рассмотрели.