Конспект лекций

Вид материалаКонспект
5. НОРМАЛИЗАЦИЯ ОТНОШЕНИЙ 5.1.Необходимость нормализации. Проблемы использования единственного отношения
5.2. Понятие ключа. Типы функциональных зависимостей
Подобный материал:
1   ...   8   9   10   11   12   13   14   15   ...   30

5. НОРМАЛИЗАЦИЯ ОТНОШЕНИЙ

5.1.Необходимость нормализации.
Проблемы использования единственного отношения


Отношения реляционной БД содержат как структурную, так и семантическую (смысловую) информацию. Структурная информация задается схемой отношения, а семантическая выражается функциональными связями между атрибутами, известными и учитываемыми в схеме.

Состав атрибутов отношений БД должен удовлетворять двум основным требованиям:
  • между атрибутами не должно быть нежелательных функциональных зависимостей;
  • группировка атрибутов должна обеспечивать минимальное дублирование данных, их обработку и обновление без трудностей.

Удовлетворение этих требований достигается нормализацией отношений БД.

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

Существуют несколько причин, почему в БД данных в некоторых случаях не следует использовать единственное отношение. Это обусловлено тем, как будет использоваться конкретная БД, какова ее структура и какое воздействие на данные в единственном отношении будут оказывать определенные операции.

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

Выделенные выше проблемы обычно называют аномалиями добавления, удаления и обновления, понимая под аномалией отклонение от нормы.

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

Отношение может характеризоваться как явной, так и неявной избыточностью данных. Явная избыточность заключается в том, что одни и те же значения одного или нескольких атрибутов могут появляться в отношении несколько раз. Явная избыточность довольно легко обнаруживается, что позволяет ее устранить практически сразу, как только начнется заполнение данного отношения. Неявная избыточность заключается в следующем. Предположим, что имеется БД об отдыхающих, проживающих в некоторой гостинице (рис.3.1). В данном случае, неявная избыточность обнаруживается в том, что один и тот же номер телефона имеют все гости, проживающие в одной комнате. В данном случае, если станет известно, что у первого гостя изменился номер телефона и стал 22-22, то телефонный номер будет изменен только в кортеже, который содержит телефонный номер гостя с номером 1, и правильный номер телефона, расположенного в комнате номер 12. будет фактически утерян, поскольку в отношении будут присутствовать два различных телефонных номера (22-22 и 22-12) для одной комнаты (с номером 12). Это к тому же приведет к ошибочному выполнению запроса о телефонном номере комнаты с номером 12.

Гости

Гость #

Комната

Телефон

1

12

22-12

2

14

22-14

3

19

22-19

4

12

22-12

Рис.3.1

Проблема, связанная с удалением, возникает при необходимости удалить один или несколько атрибутов записи: в этом случае приходится удалять всю запись целиком. Это, в свою очередь, приводит к исключению информации о данном объекте в БД в целом, хотя требовалось удалить лишь некоторую часть информации об объекте (несколько полей записи).

5.2. Понятие ключа. Типы функциональных зависимостей


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

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

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

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

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

Функциональная зависимость определяется следующим образом.

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

С практической точки зрения смысл данного определения состоит в том, что если В функционально зависит от А, то каждый из кортежей данного отношения, имеющих одно и то же значение А, должен иметь также одно и то же значение В. Значения А и В могут изменяться время от времени, но при этом они должны изменяться так, чтобы каждое уникальное значение А имело только одно значение В, связанное с ним. Функциональная зависимость обозначается так: АВ.

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

Если в отношении не ключевой атрибут функционально зависит только от части составного ключа, то говорят о частичной зависимости.

Если не ключевой атрибут В зависит от всего составного ключа А и не находится в частичной зависимости от его частей, то говорят о полной функциональной зависимости В от составного ключа А. В этом случае А носит название детерминанта В.

Если для атрибутов А, В, С выполняются условия АВ и ВС, но обратная зависимость отсутствует, то говорят, что С зависит от А транзитивно.

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