
- •Основные понятия управления данными в вычислительных системах.
- •Модели данных
- •Уровни представления данных
- •Связи в моделях
- •Построение логических записей
- •Иерархические модели данных
- •Сетевые модели данных.
- •Реляционные модели данных
- •Преобразование сетевых моделей в реляционные
- •Функциональная зависимость атрибутов
- •Вторая нормальная форма
- •Третья нормальная форма
- •Основы реляционной алгебры
- •Операция проекции
- •Операция объединения
- •Операция разности
- •Операция декартово произведение
- •Операция селекции
- •Операция пересечения
- •Операция соединения
- •Средства реализации запросов
- •Теоретические основы проектирования бд. Основные понятия.
- •Пилот функционально зависит от {рейс,дата}
- •Лекция 3
- •Пример работы алгоритма member
- •Покрытия функциональных зависимостей
- •(Подробнее)
- •Синтез реляционных баз данных
- •Распределенная обработка данных
- •Локальная автономия
- •Независимость от центрального узла.
- •Непрерывное функционирование
- •Независимость от расположения
- •Независимость от фрагментации
- •Независимость от репликации
- •Обработка распределенных запросов
- •Управление распределенными транзакциями
Лекция 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 возвращает значение НОМЕР_РЕЙСА. ПУНКТ_ОТПРАВЛЕНИЯ
|