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

Лекция 3

П олучение замыкания F+ не обязательно для установления F = X -> Y.

Для этого достаточно воспользоваться алгоритмом MEMBER .

Алгоритм MEMBER.

Вход: Множество F-зависимостей F и F-зависимость X -> Y.

В ыход: истина, если F = X -> Y, ложь в противном случае.

MEMBER(F, X -> Y)

begin

if Y CLOSURE(X,F) then return (истина)

else return(ложь)

end

Здесь CLOSURE алгоритм, позволяющий выявить список атрибутов входящих в множество F, который имеет вид.

Алгоритм CLOSURE.

Вход: Множество атрибутов Х и множество F-зависимостей F.

Выход: Замыкание Х над F.

CLOSURE(X,F)

begin

OLDDEP = 0; NEWDEP = X

while NEWDEP OLDDEP do begin

OLDDEP = NEWDEP

for каждая F- зависимость W -> Z в F do

if NEWDEP W then

NEWDEP = NEWDEP Z

end

return(NEWDEP)

end

Пример работы алгоритма member

Пусть F = {НОМЕР_РЕЙСА, ДАТА_ВЫЛЕТА -> КОЛИЧЕСТВО_МЕСТ,

НОМЕР_РЕЙСА -> ПУНКТ_ОТПРАВЛЕНИЯ, НОМЕР_РЕЙСА, ДАТА_ВЫЛЕТА -> ПИЛОТ} и необходимо установить F |= НОМЕР_РЕЙСА -> ПИЛОТ

Используем для этого алгоритм MEMBER

Обращение к нему будет выглядеть так: MEMBER (F,НОМЕР_РЕЙСА -> ПИЛОТ).

Результатом работы алгоритма будет истина, если будет истинным выражение Y CLOSURE(X,F), или с учетом данных примера ПИЛОТ CLOSURE(НОМЕР_РЕЙСА,F). Выполним поэтапно работу алгоритма CLOSURE как показано в таблице. В результате будет возвращено значение НОМЕР_РЕЙСА. ПУНКТ_ОТПРАВЛЕНИЯ. Атрибут ПИЛОТ не является подмножеством результата работы CLOSURE, поэтому F не влечет за собой НОМЕР_РЕЙСА -> ПИЛОТ, т.е. эту функциональную зависимость нельзя вывести из F.

Шаг

NEWDEP

OLDDEP

Зависимость из F

Пояснения

1

НОМЕР_РЕЙСА

0

Начальные значения переменных, если они не равны, то OLDDEP= NEWDEP

2

НОМЕР_РЕЙСА

НОМЕР_РЕЙСА

НОМЕР_РЕЙСА, ДАТА_ВЫЛЕТА -> КОЛИЧЕСТВО_МЕСТ

НОМЕР_РЕЙСА, ДАТА_ВЫЛЕТА не является подмножеством содержимого NEWDEP поэтому следующая зависимость из F

3

НОМЕР_РЕЙСА

НОМЕР_РЕЙСА

НОМЕР_РЕЙСА -> ПУНКТ_ОТПРАВЛЕНИЯ

НОМЕР_РЕЙСА подмножество NEWDEP поэтому добавим к NEWDEP ПУНКТ_ОТПРАВЛЕНИЯ

4

НОМЕР_РЕЙСА.

ПУНКТ_ОТПРАВЛЕНИЯ

НОМЕР_РЕЙСА

НОМЕР_РЕЙСА, ДАТА_ВЫЛЕТА -> ПИЛОТ

НОМЕР_РЕЙСА, ДАТА_ВЫЛЕТА не является подмножеством NEWDEP и это последняя зависимость из F. NEWDEP не равно OLDDEP поэтому присваиваем OLDDEP значение NEWDEP и повторяем цикл

5

НОМЕР_РЕЙСА.

ПУНКТ_ОТПРАВЛЕНИЯ

НОМЕР_РЕЙСА.

ПУНКТ_ОТПРАВЛЕНИЯ

Повторяя перебор зависимостей из F убедимся, что NEWDEP не изменится, поэтому после окончания цикла окажется, что NEWDEP= OLDDEP и алгоритм CLOSURE возвращает значение НОМЕР_РЕЙСА.

ПУНКТ_ОТПРАВЛЕНИЯ

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]