
- •Базы данных
- •Лекция 1 Хранение данных Данные, информация
- •Системы хранения данных на основе файлов
- •База данных
- •Требования к субд
- •Администратор бд (абд)
- •Лекция 2 Модели данных Независимость данных
- •Модель, схема
- •Лекция 3 Ранние модели Иерархическая модель
- •Сетевая модель
- •Лекция 4 Пример базы данных, построенной на сетевой модели Постановка задачи
- •Диаграмма
- •Описание на яод
- •Лекция 5 Реляционная модель Принципы
- •Уточнения
- •Лекция 6 Методы хранения данных и доступа к ним
- •Последовательный метод
- •Прямой метод
- •Индексные методы
- •Индексно-последовательный метод
- •Индексно-произвольный метод
- •Инвертированные списки
- •Хеширование
- •Лекция 7 Реляционная алгебра: определения, изменение отношений
- •Изменение отношений во времени.
- •Лекция 8 Операции реляционной алгебры
- •Булевы операции
- •Выбор; свойства выбора
- •Проекция; свойства проекции
- •Лекция 9 Операции реляционной алгебры (продолжение) Соединение
- •Свойства соединения
- •Лекция 10 Операции реляционной алгебры (продолжение)
- •Деление
- •Постоянные отношения. Переименование атрибутов
- •Эквисоединение, естественное и -соединение
- •Реляционная алгебра. Полнота ограниченного множества операторов
- •Операторы расщепления и фактора
- •Лекция 11 Язык структурных запросов sql
- •Начальные понятия
- •Стандарт ansi
- •Типы данных
- •Интерактивный и встроенный sql
- •Синтаксис
- •Подразделы sql
- •Простейшие действия
- •Функции агрегирования
- •Группировка
- •Возможности форматирования
- •Лекция 12 Язык структурных запросов sql (продолжение) Соединение
- •Вложенные запросы
- •Связанные запросы
- •Предикаты, определенные на подзапросах
- •Объединение
- •Изменение базы данных
- •Лекция 13 Понятие о нормальных формах
- •1 Нормальная форма (1нф)
- •2 Нормальная форма (2нф)
- •3 Нормальная форма (3нф)
- •Нормальная форма Бойса-Кодда (нфбк)
- •4 Нормальная форма (4нф)
- •5 Нормальная форма (5нф) – проекция/соединение
- •Лекция 13 Проектирование данных Процессы проектирования
- •Концептуальное проектирование
- •Логическое проектирование
- •Средства создания модели
- •Лекция 14 Функциональные зависимости
- •Аксиомы вывода
- •Ориентированный ациклический граф вывода
- •Определение реляционной базы данных
- •Представление множества функциональных зависимостей
- •Лекция 15 Покрытия функциональных зависимостей
- •Лемма об эквивалентности фз
- •Неизбыточные покрытия
- •Посторонние атрибуты
- •Канонические покрытия
- •Структура неизбыточных покрытий
- •Оптимальные покрытия
- •3 Нормальная форма
- •Нормализация через декомпозицию и посредством синтеза
- •Нормальная форма Бойса-Кодда
- •Литература
Хеширование
Этот метод называется еще методом перемешанных таблиц. Он представляет собой расширение метода прямого доступа на случай отсутствия взаимно однозначного соответствия между ключом и адресом записи. Существует адресная функция (хеш-функция), которая по ключу формирует адрес, однако, не исключено, что один и тот же адрес выделится разным ключам. Эта ситуация называется коллизией, а соответствующие ключи – синонимами. Алгоритм хеширования включает в себя механизм разрешения коллизий. Эффективность данного метода доступа во многом зависит от эффективности этого механизма. Кроме того, существенно влияет распределение ключей и размер таблицы. Чем больше размер таблицы по отношению к информационным строкам, тем меньше обычно вероятность коллизий, тем выше ЭД. Простейшая реализация метода заключается в том, что исходя из предположения о равномерном распределении значения ключей, функция хеширования отображает их равномерно на множество допустимых адресов. Простейший способ разрешения коллизий следующий. Если при попытке размещения по указанному адресу выясняется, что там уже что-то лежит, последовательно ищется первое свободное место, при прохождении через конец таблицы указатель возвращается на начало. Если свободная запись найдена – хорошо, в противном случае считается, что таблица переполнена. Аналогично ищутся данные при выборке. Если по указанному адресу есть данные, проверяется их ключ. При несовпадении регистрируется коллизия, которая разрешается, как указано ранее. Если данных нет, поиск неудачен. Этот алгоритм прост, но неэффективен по времени при заполнении таблицы более чем наполовину. Кроме того, при неравномерном распределении ключей этот алгоритм приводит к локальным сгущениям записей и увеличению числа коллизий при относительно свободной таблице. Если есть априорные сведения о распределении ключей, можно построить хеш-функцию, отображающую их опять же равномерно. Это заметно повысит эффективность даже для простого алгоритма разрешения коллизий.
Эффективность доступа зависит от распределения ключей, от равномерности распределения адресов хеш-функцией, что влечет уменьшение числа коллизий, и от алгоритма разрешения коллизий.
Эффективность хранения зависит от соотношения между возможным количеством ключей и реальным размером таблицы. Она хуже при слабо заполненных таблицах, обеспечивающих высокую эффективность доступа.
Лекция 7 Реляционная алгебра: определения, изменение отношений
Схема, отношение. Ключ
Предмет дальнейшего рассмотрения – реляционная алгебра, которая определяется над отношениями со специфическими операциями. Отношения будем рассматривать как множество кортежей, каждый из которых представлен определенным набором значений атрибутов.
Определение. Схема – конечное множество имен атрибутов {A1, A2 , ..., An}.
Каждому имени Ai ставится в соответствие домен Di: Di=dom(Ai). Обозначим D = i=1n Di .
Определение. Отношение r со схемой R – конечное множество отображений {t1, t2 , ..., tn} из R в D, причем, для каждого отображения t r и каждого i значение атрибута Ai берется из Di . Эти отображения называются кортежами.
Пример
Дана схема отношений Рейсы = {номер, пункт отправления, пункт назначения, время вылета, время прилета}. Здесь определены следующие домены:
dom(номер) – множество целых чисел {1..999};
dom(пункт отправления) = dom(пункт назначения) = {аэропорты};
dom(время вылета) = dom(время прилета) – время суток (часы, минуты).
Тогда отношение со схемой Рейсы может выглядеть так:
-
83
Новгород
Чита
11:30
17:30
84
Чита
Новгород
20:50
3:40
109
Новгород
Липецк
21:50
23:50
213
Новгород
Байконур
10:00
14:00
214
Байконур
Новгород
16:00
20:00
Конец примера
Примем следующие обозначения. Будем обозначать первыми заглавными латинскими буквами (A, B, ...) имена атрибутов, буквами R, Q – схемы атрибутов, строчными первыми (a, b, ...) – атрибуты, строчными r, q – отношения. Схему R={A1, A2, ..., An} будем обозначать R[A1, A2, ..., An] или A1A2...An , отношение r со схемой R обозначим r(R) или r(A1A2...An).
Традиционно под кортежем понимается последовательность значений. В реляционной алгебре он обычно трактуется как множество значений, взятых по одному для каждого атрибута из схемы отношения. Реально кортеж – мультимножество: множество с возможными повторами.
Значение кортежа t на атрибуте A будем называть A-значением кортежа t. Если XR, будем называть t(X) X-значением кортежа t. Предполагается, что существует значение : t()= для каждого кортежа t, t1()=t2().
Отношения меняются во времени: кортежи добавляются, удаляются, изменяются, но схема отношения остается инвариантной. Будем рассматривать отношение как множество возможных состояний, которые оно может принимать.
Определение. Ключ отношения со схемой R – это K={B1, B2 , ..., Bm } R со свойством: для t1, t2 r, t1t2, BK такой, что t1(B) t2(B), то есть не существует двух различных кортежей, имеющих одинаковое значение на всех атрибутах K (t1(K) t2 (K)).
Атрибуты, входящие в ключ, будем выделять подчеркиванием, например r(ABCD) или R[ABCD]. Если отношение содержит более одного ключа, каждый из них задается отдельно. Ключи, явно перечисленные в схеме, называются выделенными, остальные – возможными, один из выделенных называется первичным.
Приведенное определение ключа слишком широкое, оно допускает существование подключа, то есть если K – ключ отношения r(R) и KKR, то K тоже ключ.
Определение. Ключ отношения r(R) – это подмножество K R такое, что для t1, t2 r, t1t2, следует t1(K) t2 (K) и ни одно K K не обладает этим свойством.
Если K R, удовлетворяющее первому определению ключа, в качестве собственного подмножества содержит ключ, оно называется суперключом.
Заметим, что ключ, по смыслу, должен быть инвариантен ко всем отношениям в схеме. Это определяется семантикой отношения.