2.4. Концептуальный уровень реляционной модели
На концептуальном уровне реляционная модель представляется набором
отношений, причем структура этого набора определяется, прежде всего, структурой
функциональных (см. 2.1), многозначных (см. 2.5.4) и других видов
зависимостей (см. 2.5.5), присущих данной предметной области.
То, что такие понятия как объект или связь между объектами представляются в реляционной модели одним типовым блоком – отношением, сильно снижает выразительную мощность модели. Естественно, что такое отношение будет иметь определенные ограничения, учитывающие особенности моделируемой предметной области.
Рассмотрим указанные требования для состояния отношения ПОСТАВЩИК:
| ПОСТАВЩИК | (Имя, | Адрес, | Товар, | Цена) | ||
| И1 | А1 | Т1 | Ц1 | |||
| И1 | А1 | Т2 | Ц2 | |||
| И1 | А1 | Т3 | Ц3 | |||
| И2 | А2 | Т2 | Ц2 | |||
| И2 | А2 | Т4 | Ц1 |
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 |
Для традиционного реляционного подхода считается, что эти проблемы в значительной мере будут устранены, если исходное отношение представить в виде двух проекций:
При этом исходное отношение будет восстановимо из R1 и R2 с помощью операции эквисоединения [30] по атрибуту Имя поставщика, т.е.
Примечание. На данном этапе рассмотрения основ реляционной модели укажем, что реляционный подход основан на постулате единого (универсального) отношения, с помощью которого можно описать любой фрагмент предметной области. Предполагается, что если на это отношение наложить ограничения в виде всевозможных зависимостей, то, используя формальный аппарат теории нормализации, можно синтезировать реляционную модель. При этом утверждается, что синтаксически выделенный набор отношений позволяет адекватно описать и выделить объекты, подлежащие хранению в базе данных. Однако это очень сильное утверждение было подвергнуто критике, в связи с тем, что без анализа семантики предметной области, опираясь только на выделенные зависимости, невозможно правильно определить набор объектов, который должен быть зафиксирован в схеме модели.
Ключи отношений
Выявление функциональных зависимостей является важным моментом понимания семантики данных предметной области. Например, тот факт, что Номер студенческого билета однозначно (функционально) определяет объект СТУДЕНТ, будет справедлив для любых моментов времени, и, кроме того, значение номера студенческого билета позволяет выделить конкретного студента из группы студентов, т.е. является ключом объекта. Другими словами, в реальности существует некоторое ограничение, которое отражается в БД заданием функциональных зависимостей и ключей отношений.
Интуитивно ясно, что ключ отношения - это атрибут или совокупность атрибутов, однозначно определяющий каждый кортеж отношения. Однако на практике в отношении может быть несколько групп атрибутов, удовлетворяющих этому требованию.
Например: Пусть имеется отношение R (Город, Адрес, Индекс), где Индекс означает почтовый индекс отделения связи, обслуживающего адресатов каких-то улиц города; Адрес - это название улицы и номер дома.
| R (Город, | Адрес, | Индекс) | ||
| СПб | пр. Космонавтов, д.6 | 196233 | ||
| СПб | ул. Гастелло, д.1 | 196233 | ||
| СПб | ул. Звездная, д.3 | 196233 | ||
| СПб | ул. Софийская, д.4 | 200000 | ||
| СПб | ул. Будапештская, д.1 | 200000 | ||
| СПб | ул. Будапештская, д.2 | 200000 |
Если проанализировать это отношение, то можно установить, что в нем есть следующие функциональные зависимости:
Тогда подмножество атрибутов {Город, Адрес} является ключом отношения. Подмножество атрибутов {Адрес, Индекс} - тоже ключ. Указанные подмножества (точнее значения этих подмножеств) позволяют отличать один кортеж от другого и являются правилом (ограничением, устойчивым во времени) для рассматриваемой предметной области. Например, ограничение (зафиксированное ФЗ) Индекс
Дадим определение ключа на основании приведенного ранее понятия функциональной зависимости.
Определение КЛЮЧА
Пусть известно отношение R (A1, A2, ..., An) и определено множество функциональных зависимостей F на множестве атрибутов AR отношения R.
Тогда, некоторое подмножество атрибутов Х ⊆ {А1, A2, ..., An} будем называть ключом если:
Примечание. Запятая в описании записи функциональной зависимости добавлена для зрительного разделения атрибутов. В аксиомах она не использовалась.
П е р в о е с в о й с т в о (идентифицируемость), гарантирует, что в отношении не может быть двух кортежей (двух выборок) с одинаковыми ключами.
В т о р о е с в о й с т в о (неизбыточность) требует, чтобы ключ состоял из минимального числа атрибутов. т.е. удаление любого атрибута из множества атрибутов, составляющих возможный ключ, лишает его первого свойства.
Докажем для рассмотренного примера отношения R(Город, Адрес, Индекс), что {Адрес, Индекс} является ключом, используя свойства функциональных зависимостей.
Таким образом, Адрес, Индекс
Аналогичным образом можно доказать, что {Город, Адрес} тоже является ключом.
Таким образом, в отношении может быть несколько в о з м о ж н ы х ключей, один из которых объявляется главным или первичным ключом.
Атрибуты, входящие в главный ключ, в схеме отношения помечаются подчеркиванием или специальным символом "#", например:
R(A1, A2, A3) или R(#A1, #A2, A3).
Атрибуты A1 и A2 (с именами A1 и A2) помечены как ключевые.
Здесь уместно еще раз напомнить, что, во избежание громоздких записей для схемы отношения, в тех случаях, когда нужно указать только какую-то ее компоненту, используется сокращенное обозначение. В частности, в приведенных выражениях обозначены только атрибуты схемы отношения и его главный ключ, т.е. явно перечислены составляющие компоненты AR и KR.
Все атрибуты отношения с помощью введенного понятия возможного ключа разбиваются на первичные (входящие в какой-либо возможный ключ) и непервичные (не входящие ни в один возможный ключ отношения).
Изложенное выше можно рассмотреть на следующем примере. Пусть имеется отношение:
И пусть для него определена следующая структура функциональных зависимостей:
F = {x2
Нетрудно доказать, используя выше рассмотренные аксиомы, что ключом отношения R, является группа атрибутов: {x2, x3, x4} и этот ключ является главным ключом. Следовательно, к первичным атрибутам будут относиться атрибуты x2, x3, x4. Атрибуты, не попавшие в данное множество - x1, x5, x6 относятся к непервичным.
Рассмотрим алгоритм, который также позволяет отыскать главный ключ. Для этого введем в рассмотрение состояние Ri отношения R на этих же атрибутах:
Идея алгоритма основана на следующих закономерностях и предположениях:
0. В любом отношении (по определению отношения) всегда есть атрибут (атрибуты), который является в нем ключом.
1. По определению ключа, количество элементов его составляющих должно быть минимальным. Поэтому поиск ключа должен начинаться с предположения, что любой атрибут может являться ключом. При этом первым атрибутом (атрибутами), который следует рассматривать в качестве кандидата на ключ, следует рассматривать детерминанты функциональных зависимостей.
2. Если атрибут (атрибуты), рассматриваемый в качестве кандидата на ключ, допускает наличие одинаковых значений в различных строках, то он не может быть реляционным ключом.
Итак, рассмотрим, может ли одинарный атрибут являться ключом в следующем отношении:
Ri (x1, x2, x3, x4, x5, x6), F = {x2
Шаг 1.
Ri (x1, x2, x3, x4, x5, x6)
б) Функциональная зависимость x2
Ri (x1, x2, x3, x4, x5, x6)
в) Попробуем продолжить заполнение 2-ой строки, не нарушая правил F, по-прежнему предполагая, что x2 - ключ. Введем значение равное единице для атрибута x5.
Ri (x1, x2, x3, x4, x5, x6)
г) Тогда функциональная зависимость x5
Ri (x1, x2, x3, x4, x5, x6)
д) Продолжим заполнение строки, определив для x3 значение равное 1:
Ri (x1, x2, x3, x4, x5, x6)
е) После этого вписывать значение x4 = 1 нельзя, иначе в отношении продублируются строки. Поэтому введем значение для x4 = 2, что не нарушит зависимость x3x4
Ri (x1, x2, x3, x4, x5, x6)
Шаг 2.
Анализ полученного результата позволяет сделать вывод, что атрибут x2 не является ключом отношения. Кроме того, таким свойством не обладают и одинарные атрибуты x1, x3, x5, x6, т.к. в указанных столбцах присутствуют одинаковые значения.
Осталось проверить, будет ли атрибут x4 ключом в рассматриваемом отношении. Для этого, добавим новую строку, указав значение x4 = 1, и попробуем найти комбинацию значений атрибутов, которая запретила бы подобное действие.
Ri (x1, x2, x3, x4, x5, x6)
Тогда в предположении, что атрибут x4 является ключом, повторим пункты a) - e) шага 1 и увидим, что в отношении может существовать строка:
Ri (x1, x2, x3, x4, x5, x6)
Содержимое строки не противоречит ни одной функциональной зависимости из множества F.
Анализ содержимого столбца x4 показывает, что атрибут x4 не является реляционным ключом (в столбце x4 присутствуют повторяющиеся значения элементов).
Таким образом, проанализированы все одинарные атрибуты (детерминанты) отношения и ни один из них не является реляционным ключом.
Далее следует проанализировать все парные атрибуты на предмет того, не является ли какая-то пара атрибутов ключом отношения. Заметьте, что если такая пара будет найдена, то найденный ключ будет соответствовать и требованию неизбыточности (второе обязательное свойство реляционного ключа).
Нетрудно увидеть, что в отношении:
Ri (x1, x2, x3, x4, x5, x6)
Никакая другая пара атрибутов не может быть реляционным ключом, т.к. мощность среза и проекции для таких пар не совпадают. Например, мощность среза для пары атрибутов x1 и x2 равна 3, а мощность проекции на эту же пару равна 2. Мощность среза для пары x5 и x6 равна 3, мощность проекции на эту пару равна 1.
Легко показать, что пара атрибутов x2 и x4 также не является ключом. Для этого добавим в предыдущее отношение четвертую строку со значениями 1 для указанных атрибутов. Ниже показано, такая комбинацию значений остальных атрибутов этой строки, которая не противоречит функциональным зависимостям F, заданным на рассматриваемом отношении.
Ri (x1, x2, x3, x4, x5, x6)
Мощность среза для пары атрибутов x2 и x4 равна 4, а мощность проекции на эту же пару 3. Следовательно, атрибуты x2 и x4 не ключ.
Перейдем к рассмотрению всех сочетаний троек атрибутов с целью проведения анализа, не является ли какая-то тройка реляционным ключом. Добавим в отношение R строку с значениями атрибутов x2 = 1, x3 = 1, x4 = 1.
Ri (x1, x2, x3, x4, x5, x6)
Наличие функциональной зависимости x3x4
Ri (x1, x2, x3, x4, x5, x6)
Учет зависимости x5
Ri (x1, x2, x3, x4, x5, x6)
Сформированная пятая строка отношения R не противоречит ни одной ФЗ из множества F, но полученная таблица перестала быть отношением (дубль строк запрещен). Следовательно, множество атрибутов {x2, x3, x4} является первичным (PRIMARY) ключом отношения.
Рассмотрим конкретный пример, заменив атрибуты xi из R(x1, x2, x3, x4, x5, x6) следующими понятиями из известной предметной области:
РАСПРЕДЕЛЕНИЕ_ПРЕПОДАВАТЕЛЕЙ(
Факультет, Группа, Дисциплина, Вид_работы, Преподаватель, Должность),
Рис. 5. Схема R отношения R
В этой схеме отношения единственным ключом является совокупность атрибутов: {Группа, Дисциплина, Вид_работы}.
Таким образом, фиксация функциональных зависимостей в схеме отношения существенным образом ограничивает число возможных состояний схемы. Функциональная зависимость - одно из средств, для фиксации ограничений, присущих отображаемой предметной области.
Соответствующим образом изменяется и определение схемы отношения, приведенное в 2.1, которая теперь, кроме множества атрибутов, должна включать в себя выделенный реляционный ключ и набор ФЗ отношения. Впоследствие, в п. 2.5.5 определяется и понятие схемы базы данных. При этом наборы отношений и ФЗ такой схемы есть соответственно объединения всех входящих в схему базы данных отношений и их ФЗ.
[ Назад  Начало раздела
Далее Содержание]
<Гачина
ул. Звездная, д.3
196233>
1 1 1 1 1 1.
1 2 1 2 1 1,
1 1 1 1 1 1.
1 1 1 1 1 1
1
1 1 1 1 1 1
1 1
1 1 1 1 1 1
1 1 1
1 1 1 1 1 1
1 1 1 1
1 1 1 1 1 1
1 1 1 1 1
1 1 1 1 1 1
1 1 1 2 1 1
1 1 1 1 1 1
1 1 1 2 1 1
1
1 1 1 1 1 1
1 1 1 2 1 1
1 2 1 1 1 1
1 1 1 1 1 1
1 1 1 2 1 1
1 2 1 1 1 1
только одна пара атрибутов x2 и x4 может быть использована в качестве кандидата на ключ, т. к. мощность среза и проекции на этой паре совпадают и равна 3. Напомним, что срез, в отличие от проекции, допускает повторяющиеся (дублированные) строки.
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
1 1 1 2 1 1
1 2 1 1 1 1
1 1 2 1 1 1
1 1 1
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 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
x1 Факультет,
x2 Группа, x3 Дисциплина, x4 Вид_работы, x5 Преподаватель, x6 Должность.
F = {
Дисциплина, Вид_работы