Основной пример

Скорость операций выборки данных

Одно из назначений базы данных – предоставление информации пользователям. Информация извлекается из реляционной базы данных при помощи оператора SQL – SELECT. Одной из наиболее дорогостоящих операций при выполнении оператора SELECT является операция соединение таблиц. Таким образом, чем больше взаимосвязанных отношений было создано в ходе логического моделирования, тем больше вероятность того, что при выполнении запросов эти отношения будут соединяться, и, следовательно, тем медленнее будут выполняться запросы. Таким образом, увеличение количества отношений приводит к замедлению выполнения операций выборки данных, особенно, если запросы заранее неизвестны.

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

  1. Сотрудники организации выполняют проекты.
  2. Проекты состоят из нескольких заданий.
  3. Каждый сотрудник может участвовать в одном или нескольких проектах, или временно не участвовать ни в каких проектах.
  4. Над каждым проектом может работать несколько сотрудников, или временно проект может быть приостановлен, тогда над ним не работает ни один сотрудник.
  5. Над каждым заданием в проекте работает ровно один сотрудник.
  6. Каждый сотрудник числится в одном отделе.
  7. Каждый сотрудник имеет телефон, находящийся в отделе сотрудника.

В ходе дополнительного уточнения того, какие данные необходимо учитывать, выяснилось следующее:

  1. О каждом сотруднике необходимо хранить табельный номер и фамилию. Табельный номер является уникальным для каждого сотрудника.
  2. Каждый отдел имеет уникальный номер.
  3. Каждый проект имеет номер и наименование. Номер проекта является уникальным.
  4. Каждая работа из проекта имеет номер, уникальный в пределах проекта. Работы в разных проектах могут иметь одинаковые номера.

1НФ (Первая Нормальная Форма)

Понятие первой нормальной формы уже обсуждалось в главе 2. Первая нормальная форма (1НФ) – это обычное отношение. Согласно нашему определению отношений, любое отношение автоматически уже находится в 1НФ. Напомним кратко свойства отношений (это и будут свойства 1НФ):

  • В отношении нет одинаковых кортежей.
  • Кортежи не упорядочены.
  • Атрибуты не упорядочены и различаются по наименованию.
  • Все значения атрибутов атомарны.

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

СОТРУДНИКИ_ОТДЕЛЫ_ПРОЕКТЫ (Н_СОТР, ФАМ, Н_ОТД, ТЕЛ, Н_ПРО, ПРОЕКТ, Н_ЗАДАН),

где

Н_СОТР ­– табельный номер сотрудника

ФАМ – фамилия сотрудника

Н_ОТД – номер отдела, в котором числится сотрудник

ТЕЛ – телефон сотрудника

Н_ПРО – номер проекта, над которым работает сотрудник

ПРОЕКТ – наименование проекта, над которым работает сотрудник

Н_ЗАДАН – номер задания, над которым работает сотрудник.

Т. к. каждый сотрудник в каждом проекте выполняет ровно одно задание, то в качестве потенциального ключа отношения необходимо взять пару атрибутов {Н_СОТР, Н_ПРО}.

В текущий момент состояние предметной области отражается следующими фактами:

  1. Сотрудник Иванов, работающий в 1 отделе, выполняет в первом проекте «Космос» задание 1 и во втором проекте «Климат» задание 1.
  2. Сотрудник Петров, работающий в 1 отделе, выполняет в первом проекте «Космос» задание 2.
  3. Сотрудник Сидоров, работающий во 2 отделе, выполняет в первом проекте «Космос» задание 3 и во втором проекте «Климат» задание 2.

Это состояние отражается в таблице (курсивом выделены ключевые атрибуты):

Таблица 1 Отношение СОТРУДНИКИ_ОТДЕЛЫ_ПРОЕКТЫ
Н_СОТР ФАМ Н_ОТД ТЕЛ Н_ПРО ПРОЕКТ Н_ЗАДАН
1 Иванов 11-22-33 1 Космос
1 Иванов 11-22-33 2 Климат
2 Петров 11-22-33 1 Космос
3 Сидоров 33-22-11 1 Космос
3 Сидоров 33-22-11 2 Климат