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

Формализация предметной области

Допустим, у нас есть простая БД для теннисного клуба. Выделим следующие сущности:

  • Корты
  • Клиенты
  • Тарифы
  • Резервы

Полагаем, что тариф зависит от корта и того, является ли клиент членом клуба.

Каждая сущность обладает неким набором атрибутов. Запишем эти атрибуты и укажем тип значения для каждого из них.

  • Корты:
    • № Корта : Целое
  • Клиенты:
    • ФИО : Строка
    • Член клуба : Булево1
  • Тарифы:
    • Название : Строка
    • Цена в час : Дробное
    • № Корта : Целое
    • Для членов : Булево
  • Резервы:
    • Клиент : Ссылка
    • Тариф : Ссылка
    • № Корта : Целое
    • Время начала : Дата/время
    • Продолжительность : Время

Заметим, что (Член клуба) и (Для членов) принимают значения “Да” и “Нет” одновременно, и, следовательно, могут считаться эквивалентными. Так же, поскольку понятие “Ссылки” в реляционной модели отсутствует, выберем или введем атрибуты, которые могут служить в качестве ссылки:

Введем атрибут (Клиент : Целое) для идентификации сущности “Клиент” и выберем (Название тарифа) для идентификации сущности “Тариф”.

Тогда можно вывести следующие ФЗ:

  • Клиент → ФИО
  • Клиент → Член клуба
  • Название тарифа → Цена в час
  • (№ Корта, Время начала) → Клиент
  • (№ Корта, Время начала) → Продолжительность
  • (№ Корта, Время начала) → Название тарифа
  • (Член клуба, № Корта) → Название тарифа

Нахождение неприводимого множества ФЗ

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

Рассмотрим ФЗ (Клиент → ФИО)

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

Множество ФЗ:

  • Клиент → Член клуба
  • Название тарифа → Цена в час
  • (№ Корта, Время начала) → Клиент
  • (№ Корта, Время начала) → Продолжительность
  • (№ Корта, Время начала) → Название тарифа
  • (Член клуба, № Корта) → Название тарифа

Замыкание:

  1. (Клиент)⁺ = (Клиент)
  2. (Клиент)⁺ = (Клиент, Член клуба)

(ФИО) не является подмножеством (Клиент)⁺, следовательно, исследуемая зависимость не выводится из остальных, и не может быть исключена.

Повторяя эту процедуру для всех остальных ФЗ, находим, что ((№ Корта, Время начала) → Название тарифа) может быть выведена из остальных. Действительно, построим замыкание атрибутов (№ Корта, Время начала)⁺:

  1. (№ Корта, Время начала)⁺ = (№ Корта, Время начала)
  2. (№ Корта, Время начала)⁺ = (№ Корта, Время начала, Клиент, Продолжительность)
  3. (№ Корта, Время начала)⁺ = (№ Корта, Время начала, Клиент, Продолжительность, ФИО, Член клуба)
  4. (№ Корта, Время начала)⁺ = (№ Корта, Время начала, Клиент, Продолжительность, ФИО, Член клуба, Название тарифа)
  5. (№ Корта, Время начала)⁺ = (№ Корта, Время начала, Клиент, Продолжительность, ФИО, Член клуба, Название тарифа, Цена в час)

(Название тарифа) входит в замыкание атрибутов (№ Корта, Время начала)⁺, следовательно, ((№ Корта, Время начала) → Название тарифа) выводится из остальных ФЗ, и может быть исключено:

  • Клиент → ФИО
  • Клиент → Член клуба
  • Название тарифа → Цена в час
  • (№ Корта, Время начала) → Клиент
  • (№ Корта, Время начала) → Продолжительность
  • (Член клуба, № Корта) → Название тарифа

Полученное множество ФЗ является неприводимым.


  1. Булево в данном случае – это значение из булевой алгебры, т.е. множество значений (0,1), (Ложь, Истина), (Нет, Да) или любое эквивалентное.↩︎