2.4. Концептуальный уровень реляционной модели

На концептуальном уровне реляционная модель представляется набором отношений, причем структура этого набора определяется, прежде всего, структурой функциональных (см. 2.1), многозначных (см. 2.5.4) и других видов зависимостей (см. 2.5.5), присущих данной предметной области.

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

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

Рассмотрим указанные требования для состояния отношения ПОСТАВЩИК:
  ПОСТАВЩИК (Имя, Адрес, Товар, Цена)  
     И1  А1  Т1  Ц1  
     И1  А1  Т2  Ц2  
     И1  А1  Т3  Ц3  
     И2  А2  Т2  Ц2  
     И2  А2  Т4  Ц1  

1. Адекватность. Пусть это исходное отношение адекватно отображает предметную область.

2. Избыточность. Даже для такого маленького состояния Ri ясно, что значения атрибута Адрес неоднократно повторяются в отношении ПОСТАВЩИК.

3. Потенциальная противоречивость (аномалии обновления). Если необходимо изменить значение адреса поставщика, то это необходимо делать в нескольких кортежах. Эта проблема возникает из-за того, что один и тот же факт хранится в нескольких местах.
3.1. АНОМАЛИЯ ВКЛЮЧЕНИЯ. Если необходимо в отношение ПОСТАВЩИК добавить информацию о поставщике, который в данный момент не поставляет товар, то это сделать не так просто.
  ПОСТАВЩИК (Имя, Адрес, Товар, Цена)  
     И1  А1  Т1  Ц1  
     И1  А1  Т2  Ц2  
     И1  А1  Т3  Ц3  
     И2  А2  Т2  Ц2  
     И2  А2  Т4  Ц1  
     И3  А3  NULL  NULL  
Это объясняется тем, что атрибут Товар входит в первичный ключ отношения, который по определению не может иметь NULL значений (см. следующий параграф).
3.2. АНОМАЛИЯ УДАЛЕНИЯ. Если удаляется строка отношения ПОСТАВЩИК, то теряется информация, например о стоимости товара.

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

R1 (Имя поставщика, Адрес) и R2 (Имя поставщика, Товар, Цена).

При этом исходное отношение будет восстановимо из R1 и R2 с помощью операции эквисоединения [30] по атрибуту Имя поставщика, т.е.

R = R1 [Имя поставщика = Имя поставщика] R2.

Примечание. На данном этапе рассмотрения основ реляционной модели укажем, что реляционный подход основан на постулате единого (универсального) отношения, с помощью которого можно описать любой фрагмент предметной области. Предполагается, что если на это отношение наложить ограничения в виде всевозможных зависимостей, то, используя формальный аппарат теории нормализации, можно синтезировать реляционную модель. При этом утверждается, что синтаксически выделенный набор отношений позволяет адекватно описать и выделить объекты, подлежащие хранению в базе данных. Однако это очень сильное утверждение было подвергнуто критике, в связи с тем, что без анализа семантики предметной области, опираясь только на выделенные зависимости, невозможно правильно определить набор объектов, который должен быть зафиксирован в схеме модели.

Вопросы, связанные с анализом семантики предметной области рассмотрены в [31], и именно их правильное решение во многом определяет жизнеспособность разрабатываемого проекта информационной базы. Поэтому обсуждение таких важных понятий как объект, свойство объекта, связь, ассоциация и некоторых других аспектов инфологического этапа проектирования моделей баз данных приводится в [31].
Для правильного построения схемы БД традиционной реляционной модели выполняется нормализация исходной схемы, которая опирается на такие понятия, как функциональная зависимость и ключ отношения.

Ключи отношений

Выявление функциональных зависимостей является важным моментом понимания семантики данных предметной области. Например, тот факт, что Номер студенческого билета однозначно (функционально) определяет объект СТУДЕНТ, будет справедлив для любых моментов времени, и, кроме того, значение номера студенческого билета позволяет выделить конкретного студента из группы студентов, т.е. является ключом объекта. Другими словами, в реальности существует некоторое ограничение, которое отражается в БД заданием функциональных зависимостей и ключей отношений.

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

Например: Пусть имеется отношение R (Город, Адрес, Индекс), где Индекс означает почтовый индекс отделения связи, обслуживающего адресатов каких-то улиц города; Адрес - это название улицы и номер дома.

  R (Город, Адрес, Индекс)  
      СПб пр. Космонавтов, д.6 196233  
      СПб ул. Гастелло, д.1 196233  
      СПб ул. Звездная, д.3 196233  
      СПб ул. Софийская, д.4 200000  
      СПб ул. Будапештская, д.1 200000  
      СПб ул. Будапештская, д.2 200000  

Если проанализировать это отношение, то можно установить, что в нем есть следующие функциональные зависимости:

{Город, Адрес Индекс} и {Индекс Город}.

Тогда подмножество атрибутов {Город, Адрес} является ключом отношения. Подмножество атрибутов {Адрес, Индекс} - тоже ключ. Указанные подмножества (точнее значения этих подмножеств) позволяют отличать один кортеж от другого и являются правилом (ограничением, устойчивым во времени) для рассматриваемой предметной области. Например, ограничение (зафиксированное ФЗ) Индекс Город указывает, что не должно существовать городов, имеющих одинаковое значение индекса. Отмеченное же в схеме отношения, например, правило "{Адрес, Индекс} - ключ" должно заставлять систему управления базами данных (СУБД) отвергать добавление в отношение кортежей, если значение ключа уже присутствует в отношении. Например, попытка добавить кортеж вида:

     <Гачина ул. Звездная, д.3 196233>  
должна быть запрещена.

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

Определение КЛЮЧА

Пусть известно отношение R (A1, A2, ..., An) и определено множество функциональных зависимостей F на множестве атрибутов AR отношения R. Тогда, некоторое подмножество атрибутов Х ⊆ {А1, A2, ..., An} будем называть ключом если:

1) Каждый атрибут AR функционально зависит от Х, т.е. ХA1, A2 ,.., An и эта зависимость принадлежит F+.
2) Ни один атрибут из набора Х не может быть удален без нарушения свойства 1, т.е. ни для какого собственного подмножества Y ⊆ Х, зависимость YA1, A2, ..., An не принадлежит F+.

Примечание. Запятая в описании записи функциональной зависимости добавлена для зрительного разделения атрибутов. В аксиомах она не использовалась.

П е р в о е    с в о й с т в о (идентифицируемость), гарантирует, что в отношении не может быть двух кортежей (двух выборок) с одинаковыми ключами.

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

Докажем для рассмотренного примера отношения R(Город, Адрес, Индекс), что {Адрес, Индекс} является ключом, используя свойства функциональных зависимостей.

Д а н о:  R(Город, Адрес, Индекс) и множество ФЗ F:
F={Город, Адрес Индекс, Индекс Город}.
Требуется доказать, что {Адрес, Индекс} ключ, т.е. Адрес, Индекс Город, Адрес, Индекс (свойство 1).
Доказательство:
1) Из функциональной зависимости ИндексГород (ХY) по аксиоме пополнения F2 (ХY ⇒ XZ YZ) следует (если R нестрого включает Z), что ФЗ
Индекс, Адрес Город, Адрес принадлежит F+.
2) Из функциональной зависимости Город,АдресИндекс в силу аксиом рефлексивности F1 и аддитивности F3, пополняя результат шага 1 атрибутами Город и Адрес (ХY ⇒ ХXY), можно получить зависимость
Город, Адрес Индекс, Город, Адрес.
3) Теперь по аксиоме транзитивности F5 из шагов 1 и 2 следует зависимость
Индекс, АдресИндекс, Город, Адрес.

Таким образом, Адрес, Индекс Город, Адрес, Индекс, что и требовалось доказать. При этом полученная зависимость принадлежит F+, и атрибуты {Адрес, Индекс} могут быть выбраны в качестве кандидатов на ключ.

Аналогичным образом можно доказать, что {Город, Адрес} тоже является ключом.

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

Примечание. Иногда в литературе возможный ключ называют потенциальным ключом.

Атрибуты, входящие в главный ключ, в схеме отношения помечаются подчеркиванием или специальным символом "#", например:

R(A1, A2, A3)   или   R(#A1, #A2, A3).

Атрибуты A1 и A2 (с именами A1 и A2) помечены как ключевые.

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

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

Изложенное выше можно рассмотреть на следующем примере. Пусть имеется отношение:

R (x1, x2, x3, x4, x5, x6).

И пусть для него определена следующая структура функциональных зависимостей:

F = {x2x1, x5x1, x5x6, x3x4x5}.            (1)

Нетрудно доказать, используя выше рассмотренные аксиомы, что ключом отношения R, является группа атрибутов: {x2, x3, x4} и этот ключ является главным ключом. Следовательно, к первичным атрибутам будут относиться атрибуты x2, x3, x4. Атрибуты, не попавшие в данное множество - x1, x5, x6 относятся к непервичным.

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

Ri (x1, x2, x3, x4, x5, x6)
      1    1    1    1    1    1.
Здесь 1 (единица) обозначает какое-то значение, допустимое для каждого атрибута отношения R. Заметим, что зависимости, указанные в (1), для отношения, содержащего один кортеж, будут всегда справедливы. Поэтому, если взять в качестве исходного состояния, например, строку:
Ri (x1, x2, x3, x4, x5, x6)
      1    2    1    2    1    1,
то зависимости (1) также остаются в силе. Или другими словами, ограничения, зафиксированные функциональными зависимостями, не нарушаются в рассмотренных отношениях.

Идея алгоритма основана на следующих закономерностях и предположениях:

0. В любом отношении (по определению отношения) всегда есть атрибут (атрибуты), который является в нем ключом.

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

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

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

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

Ri (x1, x2, x3, x4, x5, x6),    F = {x2x1, x5x1, x5x6, x3x4x5}
                 1    1    1    1    1    1.

Шаг 1.

a) Предположим, что атрибут x2 есть ключ. Тогда, если в отношение R добавить новую строку и в добавленной строке для атрибута x2 указать значение 1,

Ri (x1, x2, x3, x4, x5, x6)
      1    1    1    1    1    1
            1

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

б) Функциональная зависимость x2x1 требует прописать для атрибута x1 во второй строке значение 1 на основании информации, имеющейся в первой строке:

Ri (x1, x2, x3, x4, x5, x6)
      1    1    1    1    1    1
      1    1

в) Попробуем продолжить заполнение 2-ой строки, не нарушая правил F, по-прежнему предполагая, что x2 - ключ. Введем значение равное единице для атрибута x5.

Ri (x1, x2, x3, x4, x5, x6)
      1    1    1    1    1    1
      1    1                1

г) Тогда функциональная зависимость x5x1 остается в силе (введенная информация не противоречит информации присутствующей в первой строке). Однако зависимость x5x6 требует прописать значение атрибута x6 равное единице на основании информации, присутствующей в первой строке.

Ri (x1, x2, x3, x4, x5, x6)
      1    1    1    1    1    1
      1    1                1    1

д) Продолжим заполнение строки, определив для x3 значение равное 1:

Ri (x1, x2, x3, x4, x5, x6)
      1    1    1    1    1    1
      1    1    1          1    1

е) После этого вписывать значение x4 = 1 нельзя, иначе в отношении продублируются строки. Поэтому введем значение для x4 = 2, что не нарушит зависимость x3x4x5 и также не нарушает другие ограничения из F.

Ri (x1, x2, x3, x4, x5, x6)
      1    1    1    1    1    1
      1    1    1    2    1    1

Шаг 2. Анализ полученного результата позволяет сделать вывод, что атрибут x2 не является ключом отношения. Кроме того, таким свойством не обладают и одинарные атрибуты x1, x3, x5, x6, т.к. в указанных столбцах присутствуют одинаковые значения.

Осталось проверить, будет ли атрибут x4 ключом в рассматриваемом отношении. Для этого, добавим новую строку, указав значение x4 = 1, и попробуем найти комбинацию значений атрибутов, которая запретила бы подобное действие.

Ri (x1, x2, x3, x4, x5, x6)
      1    1    1    1    1    1
      1    1    1    2    1    1
                        1

Тогда в предположении, что атрибут x4 является ключом, повторим пункты a) - e) шага 1 и увидим, что в отношении может существовать строка:

Ri (x1, x2, x3, x4, x5, x6)
      1    1    1    1    1    1
      1    1    1    2    1    1
      1    2    1    1    1    1

Содержимое строки не противоречит ни одной функциональной зависимости из множества F.

Анализ содержимого столбца x4 показывает, что атрибут x4 не является реляционным ключом (в столбце x4 присутствуют повторяющиеся значения элементов).

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

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

Нетрудно увидеть, что в отношении:

Ri (x1, x2, x3, x4, x5, x6)
                 1    1    1    1    1    1
                 1    1    1    2    1    1
                 1    2    1    1    1    1

только одна пара атрибутов x2 и x4 может быть использована в качестве кандидата на ключ, т. к. мощность среза и проекции на этой паре совпадают и равна 3. Напомним, что срез, в отличие от проекции, допускает повторяющиеся (дублированные) строки.

Никакая другая пара атрибутов не может быть реляционным ключом, т.к. мощность среза и проекции для таких пар не совпадают. Например, мощность среза для пары атрибутов x1 и x2 равна 3, а мощность проекции на эту же пару равна 2. Мощность среза для пары x5 и x6 равна 3, мощность проекции на эту пару равна 1.

Легко показать, что пара атрибутов x2 и x4 также не является ключом. Для этого добавим в предыдущее отношение четвертую строку со значениями 1 для указанных атрибутов. Ниже показано, такая комбинацию значений остальных атрибутов этой строки, которая не противоречит функциональным зависимостям F, заданным на рассматриваемом отношении.

Ri (x1, x2, x3, x4, x5, x6)
      1    1    1    1    1    1
      1    1    1    2    1    1
      1    2    1    1    1    1
      1    1    2    1    1    1

Мощность среза для пары атрибутов x2 и x4 равна 4, а мощность проекции на эту же пару 3. Следовательно, атрибуты x2 и x4 не ключ.

Перейдем к рассмотрению всех сочетаний троек атрибутов с целью проведения анализа, не является ли какая-то тройка реляционным ключом. Добавим в отношение R строку с значениями атрибутов x2 = 1, x3 = 1, x4 = 1.

Ri (x1, x2, x3, x4, x5, x6)
      1    1    1    1    1    1
      1    1    1    2    1    1
      1    2    1    1    1    1
      1    1    2    1    1    1
      1    1    1

Наличие функциональной зависимости x3x4x5 приведет к следующему состоянию отношения:

Ri (x1, x2, x3, x4, x5, x6)
      1    1    1    1    1    1
      1    1    1    2    1    1
      1    2    1    1    1    1
      1    1    2    1    1    1
      1    1    1    1

Учет зависимости x5x6 и x5x1 приведет отношение R в состояние:

Ri (x1, x2, x3, x4, x5, x6)
      1    1    1    1    1    1
      1    1    1    2    1    1
      1    2    1    1    1    1
      1    1    2    1    1    1
      1    1    1    1    1    1

Сформированная пятая строка отношения R не противоречит ни одной ФЗ из множества F, но полученная таблица перестала быть отношением (дубль строк запрещен). Следовательно, множество атрибутов {x2, x3, x4} является первичным (PRIMARY) ключом отношения.

Рассмотрим конкретный пример, заменив атрибуты xi из R(x1, x2, x3, x4, x5, x6) следующими понятиями из известной предметной области:
  x1 Факультет,
  x2 Группа,
  x3 Дисциплина,
  x4 Вид_работы,
  x5 Преподаватель,
  x6 Должность.

Пусть именем этого отношения будет РАСПРЕДЕЛЕНИЕ_ПРЕПОДАВАТЕЛЕЙ. Тогда схема данного отношения будет выглядеть так, как показано на рис 5.

РАСПРЕДЕЛЕНИЕ_ПРЕПОДАВАТЕЛЕЙ( Факультет, Группа, Дисциплина, Вид_работы, Преподаватель, Должность),
F = { Дисциплина, Вид_работыПреподаватель,  ПреподавательДолжность,  ГруппаФакультет,  ПреподавательФакультет }

Рис. 5. Схема R отношения R

В этой схеме отношения единственным ключом является совокупность атрибутов: {Группа, Дисциплина, Вид_работы}.

Все перечисленные функциональные зависимости относятся к нетривиальным зависимостям.
Указанные зависимости фиксируют следующие ограничения в рассматриваемой предметной области (иногда говорят смысл или семантика ФЗ):
- учебная группа однозначно относится к определенному факультету;
- преподаватель имеет одну должность;
- для каждой дисциплины, по определенному виду работы (лекции, зачет, практика, и т.д.), требуется определенная квалификация преподавателя, отождествленная с занимаемой им должностью;
- преподаватели могут вести занятия только в группах того факультета, на котором они работают.

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

Соответствующим образом изменяется и определение схемы отношения, приведенное в 2.1, которая теперь, кроме множества атрибутов, должна включать в себя выделенный реляционный ключ и набор ФЗ отношения. Впоследствие, в п. 2.5.5 определяется и понятие схемы базы данных. При этом наборы отношений и ФЗ такой схемы есть соответственно объединения всех входящих в схему базы данных отношений и их ФЗ.


[ Назад  Начало раздела  Далее  Содержание]