Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции БД.doc
Скачиваний:
35
Добавлен:
23.09.2019
Размер:
1.93 Mб
Скачать

Хеширование

Этот метод называется еще методом перемешанных таблиц. Он представляет собой расширение метода прямого доступа на случай отсутствия взаимно однозначного соответствия между ключом и адресом записи. Существует адресная функция (хеш-функция), которая по ключу формирует адрес, однако, не исключено, что один и тот же адрес выделится разным ключам. Эта ситуация называется коллизией, а соответствующие ключи – синонимами. Алгоритм хеширования включает в себя механизм разрешения коллизий. Эффективность данного метода доступа во многом зависит от эффективности этого механизма. Кроме того, существенно влияет распределение ключей и размер таблицы. Чем больше размер таблицы по отношению к информационным строкам, тем меньше обычно вероятность коллизий, тем выше ЭД. Простейшая реализация метода заключается в том, что исходя из предположения о равномерном распределении значения ключей, функция хеширования отображает их равномерно на множество допустимых адресов. Простейший способ разрешения коллизий следующий. Если при попытке размещения по указанному адресу выясняется, что там уже что-то лежит, последовательно ищется первое свободное место, при прохождении через конец таблицы указатель возвращается на начало. Если свободная запись найдена – хорошо, в противном случае считается, что таблица переполнена. Аналогично ищутся данные при выборке. Если по указанному адресу есть данные, проверяется их ключ. При несовпадении регистрируется коллизия, которая разрешается, как указано ранее. Если данных нет, поиск неудачен. Этот алгоритм прост, но неэффективен по времени при заполнении таблицы более чем наполовину. Кроме того, при неравномерном распределении ключей этот алгоритм приводит к локальным сгущениям записей и увеличению числа коллизий при относительно свободной таблице. Если есть априорные сведения о распределении ключей, можно построить хеш-функцию, отображающую их опять же равномерно. Это заметно повысит эффективность даже для простого алгоритма разрешения коллизий.

Эффективность доступа зависит от распределения ключей, от равномерности распределения адресов хеш-функцией, что влечет уменьшение числа коллизий, и от алгоритма разрешения коллизий.

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

Лекция 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 . Эти отображения называются кортежами.

Пример

Дана схема отношений Рейсы = {номер, пункт отправления, пункт назначения, время вылета, время прилета}. Здесь определены следующие домены:

  1. dom(номер) – множество целых чисел {1..999};

  2. dom(пункт отправления) = dom(пункт назначения) = {аэропорты};

  3. 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) и KKR, то K тоже ключ.

Определение. Ключ отношения r(R) – это подмножество K R такое, что для t1, t2 r, t1t2, следует t1(K) t2 (K) и ни одно K K не обладает этим свойством.

Если K R, удовлетворяющее первому определению ключа, в качестве собственного подмножества содержит ключ, оно называется суперключом.

Заметим, что ключ, по смыслу, должен быть инвариантен ко всем отношениям в схеме. Это определяется семантикой отношения.