Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
11
Добавлен:
05.06.2015
Размер:
295.94 Кб
Скачать

Проблемы возникают для каждой из трех основных операций запоминания.

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

Удаление. Если мы удалим из RNF1 все кортежи сотрудников конкретного отдела, мы разрушим не только информацию о том, что они работает в данном отделе, но и информацию о том, что отдел размещен в определенном городе. Например, если мы удалим из RNF1 кортежи описывающие сотрудников 10 отдела (Кинг, Кларк, Миллер), мы потеряем информацию о том, что отдел 10 находится в Нью-Йорке. (Проблемы включения и удаления составляют две стороны одной медали.)

Обновление. В общем случае одно и тоже значение LOC для данного отдела появляется в RNF1 много раз. Эта избыточность вызывает проблемы обновления. Например, если отдел 10 переезжает из Нью-Йорка в Атланту, мы сталкиваемся либо с проблемой просмотра отношения RNF1 для нахождения всех кортежей, связывающих отдел 10 и Нью-Йорк, и их изменения, либо с возможностью получить противоречивый результат (город для отдела 10 может быть указан как Атланта в одном кортеже и как Нью-Йорк в другом).

Решение этих проблем заключается в замене отношения RNF1 двумя отношениями:

• EMPLO (EMPNO, DEPTNO, ENAME, JOB) и . RNF2 (DEPTNO, DNAME, LOC, STATUS).

На рисунке представлена диаграмма зависимостей для этих отношений.

На следующем рисунке представлены таблицы, соответствующие значениям данных отношения RNF1, за исключением информации для отдела 40, который был введен в отношение RNF2 (но не в RNF1).

Пример таблицы RNF2.

DEPTNO

DNAME

LOC

STATUS

10

ACCOUNTING

NEW YORK

300

20

RESEARCH

DALLAS

200

30

SALES

CHICAGO

400

40

OPERATIONS

BOSTON

300

Пример таблицы EMPLO.

EMPNO

DEPTNO

ENAME

JOB

l

10

CLARK

MANAGER

2

10

KING

PRESIDENT

3

10

MILLER

CLERK

4

20

ADAMS

CLERK

5

20

FORD

ANALYST

7

20

JONES

MANAGER

6

20

SCOTT

ANALYST

3

20

SMITH

CLERK

5

30

ALLEN

SALESMAN

6

30

BLAKE

MANAGER

8

30

JAMES

CLERK

7

30

MARTIN

SALESMAN

9

30

TURNER

SALESMAN

10

30

WARD

SALESMAN

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

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

Удаление. Мы можем исключить сотрудников отдела 10 путем удаления соответствующих кортежей из EMPLO. При этом мы не теряем информацию о том, что отдел 10 расположен в Нью-Йорке.

Обновление. В преобразованной структуре значение LOC для данного отдела появляется один, а не много раз, то есть устранена избыточность. Таким образом, можно изменить значение для DEPNO=10 с Нью-Йорка на Атланту путем обновления только одного кортежа в RNF1.

Сравнивая рисунки иллюстрирующие фенкциональные зависимости RNF1 и RNF2, EMPLO, мы видим, что результатом преобразования структуры явилось устранение неполной функциональной зависимости, что и разрешило все трудности. Полагаясь на интуицию, можно сказать, что в отношении RNF1 атрибуты STATUS и LOC не описывают объект, определяемый первичным ключом, то есть сотрудника, а описывает один отдел. Смешение двух типов информации в одном отношении и вызвало выше перечисленные проблемы.

Дадим теперь определение второй нормальной формы.

Отношение R находится во второй нормальной форме (2НФ), если оно находится в 1НФ, и каждый неключевой атрибут функционально полно зависит от первичного ключа.(Атрибут называется неключевым, если он не является составной частью первичного ключа)

Отношения RNF2 и EMPLO находятся в 2НФ. Их первичными ключами являются DEPTNO и (EMPNO, DEPTNO) соответственно. Отношение RNF1 не находится в 2НФ.

Отношение, которое находится в 1НФ и не находится в 2НФ, всегда можно преобразовать в эквивалентную совокупность отношений, находящихся в 2НФ.

Преобразование состоит в замене отношения соответствующими проекциями. Совокупность этих проекций эквивалентна первоначальному отношению в том смысле, что исходное отношение всегда может быть восстановлено, если взять соответствующее соединение этих проекций. Таким образом, в процессе преобразования никакая информация не теряется. Другими словами, этот процесс обратим. В нашем примере RNF2 и EMPLO являются проекциями RNF1, а RNF1 является соединением RNF2 и EMPLO по DEPTNO. (При этом один из двух идентичных столбцов DEPTNO в результат не включается).

Заметим, между прочим, что

отношение, находящееся в 1НФ и которое не находится в 2НФ,

должно иметь составной первичный ключ.

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

Тем не менее структура RNF2/EMPLO все же не совсем удобна. Отношение EMPLO является удовлетворительным; фактически оно теперь находится в четвертой нормальной форме, и мы не будем далее его рассматривать. Отношение RNF2, с другой стороны, все еще имеет недостатки из-за отсутствия взаимной независимости между его неключевыми атрибутами. Диаграмма зависимости отношения RNF2 все еще "сложнее" диаграммы четвертой нормальной формы.

Говоря конкретнее, зависимость STATUS от DEPTNO, хотя она функциональна, является транзитивной (через LOC): каждое значение DEPTNO определяет значение LOC, а то в свою очередь определяет значение STATUS. Эта транзитивность опять приводит к трудностям выполнения операций запоминания. (Мы теперь сосредоточим наше внимание на связи между городом и значением статуса, т. е. на функциональной зависимости STATUS от LOC).

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

Удаление. Если мы исключим один все кортежи отношения RNF2 для конкретного города, мы потеряем не только информацию об этих отделах, но и информацию о том, что этот город имеет конкретное значение статуса. Например, если мы исключим кортеж RNF2 для DEPTNO=40, мы потеряем информацию о том, что статус Бостона равен 300. (Опять-таки проблемы включения и удаления являются

сторонами одной медали.)

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

Как и ранее, решение этих проблем состоит в замене исходного отношения (RNF2) двумя проекциями. В этом случае DEPT (DEPTNO DNAME LOC) и LOCSTATUS (LOC, STATUS).

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