Приклад розробки простої ЕR-діаграми

Деяка оптова торгова фірма повинна виконувати наступні дії:

· зберігати інформацію про покупців;

· друкувати накладні на відпущені товари;

· стежити за наявністю товарів на складі.

Виділимо всі іменники в цих пропозиціях — це будуть потенційні кандидати на сутності і атрибути, і проаналізуємо їх (незрозумілі терміни будемо виділяти знаком питання):

· Покупець — явний кандидат на сутність.

· Накладна — явний кандидат на сутність.

· Товар — явний кандидат на сутність

· (?)Склад — постає питання, скільки складів має фірма? Якщо декілька, то це буде кандидатом на нову сутність.

· (?)Наявність товару — це, швидше за все, атрибут, але атрибут якої сутності?

Відразу виникає очевидний зв'язок між сутністю — «покупці можуть купувати багато товарів» і «товари можуть продаватися багатьом покупцям». Перший варіант діаграми виглядає, як показано на рис. 10.5.

 

Рисунок 10.5 – перший варіант ER-діаграми

Задавши додаткові питання менеджерові, ми вияснили, що фірма має декілька складів. Причому кожен товар може зберігатися на декількох складах і бути проданим з будь-якого складу.

Куди помістити сутність «Накладна» і «Склад» і з чим їх зв'язати? Запитаємо себе, як связані ці сутності між собою і з суттю «Покупець» і «Товар»? Покупці купують товари, отримуючи при цьому накладні, в які внесені дані про кількість і ціну купленого товару. Кожен покупець може отримати декілька накладних. Кожна накладна повинна виписуватися на одного покупця. Кожна накладна повинна містити декілька товарів (не буває пустих накладних). Кожен товар, у свою чергу, може бути проданий декільком покупцям по декільком накладним. Крім того, кожна накладна повинна бути виписана з певного складу, і з будь-якого складу може бити виписано багато накладних. Таким чином, після уточнення діаграма буде виглядати наступним чином (рис. 10.6).

Рисунок 10.6 – Проміжний варіант ER-діаграми

Пора подумати про атрибути сутності. Розмовляючи з співробітниками фірми, ми вияснили наступне:

• кожен покупець є юридичною особою і має ім’я, адресу, банківські реквізити;

• кожен товар має назву, ціну, а також характеризується одиницями вимірювання;

• кожна накладна має унікальний номер, дату виписки, список товарів з кількостями і цінами, а також загальну суму накладної. Накладна виписується з певного складу і на певного покупця;

• кожен склад має свою назву.

Знову запишемо всі іменники, які будуть потенційними атрибутами, і проаналізуємо їх:

Юридична особа — термін риторичний, ми не працюємо з фізичними особами. Не звертаємо уваги;

Найменування покупця — явна характеристика покупця;

Адреса — явна характеристика покупця;

Банківські реквізити — явна характеристика покупця;

Найменування товару — явна характеристика товару;

(?)Ціна товару — схоже, що це характеристика товару. Чи відрізняється ця характеристика від ціни в накладній?

Одиниця вимірювання — явна характеристика товару;

Номер накладної — явна унікальна характеристика накладної;

Дата накладної — явна характеристика накладної;

(?) Список товарів в накладній — список не може бути атрибутом. Ймовірно, потрібно виділити цей список в окрему сутність;

(?)Кількість товару в накладній — це явна характеристика, але характеристика чого? Ця характеристика не просто «товару», а «товару в накладній»;

(?)Ціна товару в накладній — знову ж таки це повинна бути не просто характеристика товару, а характеристика товару в накладній. Але ціна товару вже зустрічалася вище — це одне і те ж?

Сума накладної — явна характеристика накладної. Ця характеристика не є незалежною. Сума накладної рівна сумі вартостей всіх товарів, що входять в накладну;

Найменування складу — явна характеристика складу.

В ході додаткової бесіди з менеджером вдалося прояснити різні поняття цін. Виявилось, що кожен товар має деяку поточну ціну. Ця ціна, по якій товар продається в даний момент. Природно, що така ціна може змінюватися з часом. Ціна одного і того ж товару в різних накладних, виписаних в різний час, може бути різною. Таким чином, є дві ціни — ціна товару в накладній і поточна ціна товару.

З виникаючим поняттям «Список товарів в накладній» все зрозуміло. Сутності «Накладна» і «Товар» зв’язані один з одним відношенням типу багато-до-багатьох. Такий зв'язок, як ми відзначали раніше, повинен бути розщепленим на два зв'язки типу один-до-багатьох. Для цього потрібна додаткова сутність. Цією сутністю і буде сутність «Список товарів в накладній». Зв'язок її з сутністю «Накладна» і «Товар» характеризується наступними фразами — «кожна накладна зобов'язана мати декілька записів із списку товарів в накладній», «кожен запис із списку товарів в накладній зобов'язаний включатися рівно в одну накладну», «кожен товар може включатися в декілька записів із списку товарів в накладній», «кожен запис із списку товарів в накладній зобов'язаний бути пов'язаним рівно з одним товаром». Атрибути «Кількість товару в накладній» і «Ціна товару в накладній» є атрибутами сутності «Список товарів в накладній».

Так само поступимо із зв'язком, що сполучає сутність «Склад» і «Товар». Введемо додаткову сутність «Товар на складі». Атрибутом цієї сутності буде «Кількість товару на складі». Таким чином, товар числитиметься на будь-якому складі і кількість його на кожному складі буде своєю.

Тепер можна внести все це до діаграми (рис. 10.7).

Рисунок 10.7 – Кінцевий варіант ER-діаграми