Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы баз денных.doc
Скачиваний:
106
Добавлен:
10.12.2013
Размер:
789.5 Кб
Скачать

Внутренняя модель данных.

Индекс – это таблица, состоящая из двух полей, первое поле – это ключ, второе поле – это ссылка на запись в БД с этим ключом индексации.

Индекс позволяет выполнить две работы:

  • Выполнить сортировку файла не перемещая физически его записи;

  • Ускорить поиск информации.

Пример.

Файл а1:

адреса

А1

А2

А3

A0

d

1

F

A1

a

2

M

A2

C

3

F

A3

B

4

M

A4

Z

3

M

A5

I

2

F

A6

J

2

M

A7

k

5

M

Организуем индексацию по полю А1, индекс будет плотный, т.е. индексируются все значения ключа.

Запишем файл упорядоченный по полю А1:

B

A1

адрес

B1

A

A1

B2

B

A3

B3

C

A2

B4

D

A0

B5

I

A5

B6

J

A6

B7

K

A7

B8

Z

A4

Создадим индекс второго уровня, для этого разбиваем индекс на группы по три записи:

A1

адрес

C

B1

J

B4

z

B7

В первом столбце записан старший ключ, во втором столбце младший ключ.

Рассмотрим, например поиск записи с ключом I.

Смотрим в последнюю таблицу и ищем где ключ больший I, это J, его адрес B4, теперь обращаемся ко второй таблице, находим тройку записей, у которой младший индекс B4, это тройка D,I,J, находим в ней I, смотрим какой она имеет адрес – A5, обращаемся в первую таблицу и находим запись с адресом А5.

Индекс с инвертированными списками.

Инвертированный список хранит список ключей для каждого значения где это значение встречается.

А3

Список адресов

F

A0, A2,A5

M

A1,A3,A4,A6,A7

B-дерево.

В-дерево – это сбалансированное дерево.

Основной недостаток индексов в том, что трудно вносить изменения, а дерево упрощает внесение изменений, а сбалансированность позволяет ускорить поиск.

В основе В-дерева лежат следующие аксиомы:

  • В-дерево порядка n содержит 2n ключей 2n+1 ссылку;

  • В –дерево растет от листьев к корню;

  • Путь от корня к листу содержит одно и тоже количество шагов;

  • Каждый узел заполняется не менее чем на половину, кроме корня.

Пример.

Пусть у нас есть дерево третьего порядка, с ключами 12, 8, 4, 9, 6, 13, 14, 16,100, 10.

Приходит ключ 12, его заносим в корень

12

П

8 12

риходит 8, 8 меньше 12

Приходит 4, места в корне нет, разбиваем на 2

Приходит 9, она больше 8, но меньше 12, 12 сдвигаем, перед ней записываем 9, приходит 6 она меньше 8, но больше 4, записываем ее после 4:

После того как придет 13, 14, 16, 100, 10 вид дерева будет следующим:

Язык query by example (qbe)

Введение

Реляционный язык QBE разработан М. М. Цлуфом в научно-исследовательской лаборато­рии фирмы IBM. QBE похож на SQL тем, что в своем первоначальном ва­рианте обеспечивал только средства для запроса, тогда как в последующие версии были включены операции запоминания и многие другие возможности. Общий уровень языка сходен с уровнем языка SQL, хотя существуют некоторые операции запроса, возможные в QBE и не имеющие аналога в SQL или в каком-либо другом языке. Более очевидное различие между языками SQL и QBE в том, что последний разработан главным образом для работы с терминала (дисплея). Всякая операция в QBE специфицируется с помощью одной или нескольких таблиц; каждая такая таблица строится на экране дисплея ча­стично системой, частично пользователем. Поскольку операции задаются в табличной форме, то QBE имеет двумерный синтаксис. Большинство традицион­ных языков, наоборот, имеют линейный синтаксис.

Подобно SQL, QBE был подвергнут целому ряду проверок его практиче­ских возможностей, давших очень обнадеживающие результаты.

Операции выборки

Действительно значительной особенностью QBE является использование примеров для спецификации запросов (а также всех других операций, хотя все время мы рассматриваем только выборку). Основная идея состоит в том, что пользователь формирует запрос, занося пример возможного ответа в со­ответствующее место пустой таблицы. Например, рассмотрим запрос: «Полу­чить номера поставщиков, находящихся в Париже». Первоначально система выдает на экран пользователю полностью пустую таблицу. Пользователь, знающий, что ответ на запрос находится в таблице Поставщики, запишет Поставщики в качестве имени таблицы; тогда система ответит заполнением соответствующих имен столбцов. Теперь пользователь может сформировать запрос, заполняя две позиции в таблице, как показано ниже.

Поставщики

№поставщика

Фамилия

статус

город

Поставщики

№поставщика

фамилия

статус

город

P.7

Париж

«P» означает «печать» (print); эта литера указывает цель запроса, т. е. значе­ния результата, которые должны быть выданы. 7 являются «элементом-примером», т. е. примером возможного ответа на запрос; элемент-пример выделяет­ся подчеркиванием. Париж (не подчеркнуто) есть константа. Этот запрос мо­жет быть интерпретирован следующим образом: «Напечатать все №поставщиков, такие, как, скажем, 7, для которых соответствующий город — Париж ». Отметим, что в результирующем множестве или даже в исходном множестве не обязательно должно находиться именно 7 — элемент-пример является полностью произвольным, и мы могли бы с равным успехом ис­пользовать PIG или X, не изменяя смысла запроса.

Элементы-примеры используются для установления связей между строками в более сложных запросах. Если же связи не нужны, как в простом запросе, приведенном выше, то можно полностью опустить эле­менты-примеры (так, что Р. 7 сократилось бы до «Р»), однако в общем слу­чае для ясности мы будем их включать.

Простая выборка. Получить номера всех поставляемых деталей.

Поставки №поставщика

№детали

количество

Р.2

По желанию пользователь может специфицировать возрастающее или убы­вающее упорядочение результата. Избыточные повто­ряющиеся значения всегда исключаются.

Простая выборка. Получить полные данные о всех поставщиках.

Поставщики

№поставщика

Фамилия

статус

Город

Р.х

Р.фамилия

Р.статус

Р.город

Сокращенное представление того же запроса

Поставщики

№поставщика

Фамилия

статус

Город

Р.

Здесь оператор печати относится ко всей строке.

Выборка по условию. Получить номера поставщиков, находящихся в Париже и имеющих статус >20.

Поставщики

№поставщика

Фамилия

статус

Город

P.х

>20

Париж

Обратите внимание, как задается условие «>20». Вообще, таким же об­разом может быть использован любой из операторов сравнения =, <>, <, <=, =>, > (исключение; = обычно опускается, как в столбце город приведенной выше таблицы)

Выборка по условию. Перечислить номера поставщиков, находящихся в Париже или имеющих статус >20 (или удовлетворяющих и тому и другому условию).

Поставщики

№поставщика

фамилия

статус

город

P.X

Париж

P.Y

>20

Условия, заданные в одной строке, рассматриваются как операнды операции «И». Для «ИЛИ», следовательно, оба условия необходимо задавать в разных строках.

В сформулированном выше запросе фактически затребовано объединение всех номеров поставщиков, находящихся в Париже, и всех номеров поставщиков со статусом >20. Необходимо два разных элемента-примера, по­тому что, если бы мы дважды использовали тот же самый, это бы означало, что один и тот же поставщик должен быть в Париже и иметь статус >20. Когда запрос содержит более чем одну строку, как в данном примере, их можно располагать в любом порядке.

Выборка по условию. Получить номера тех поставщиков, которые поставляют деталь 1 и деталь 2.

Поставки

№поставщиков

№деталей

количество

P.х

1

х

2

Здесь один и тот же элемент пример должен использоваться дважды; чтобы сформулировать запрос, нам необходимо две строки, так как нужно соединить операцией «И» два условия в одном и том же столбце.

8.2.6. Выборка с использованием связи. Получить имена поставщиков, по­ставляющих деталь 2.

Поставщики

№поставщика

Фамилия

статус

город

х

P.фамилия

Поставки

№поставщика

№детали

Количество

х

2

Элемент-пример №X используется как связь между таблицами Поставщики и Поставки. Вообще говоря, такие связи используются в языке QBE там, где в языке SQL тре­буется вложенное отображение, а в реляционной алгебре—операция JOIN. (На самом деле №х в предыдущем примере также выполняло роль связи, но только связываемые строки находились в одной и той же таблице.)

8.2.7. Выборка с использованием связей. Получить имена поставщиков,

Поставщики

№поставщика

Фамилия

статус

город

Х

P.фамилия

Поставки

№поставщика

№детали

количество

Х

X

по­ставляющих по крайней мере одну деталь красного цвета.

Детали

№детали

название

цвет

вес

количество

X

красный

Выборка с использованием отрицания. Получить имена тех постав­щиков, которые не поставляют деталь 2.

Поставщики

№поставщика

фамилия

статус

город

Х

Р.фамилия

Поставки

№поставщика

№детали

количество

Х

2

Обратите внимание на оператор NOT () в строке таблицы Поставки. Запрос может быть интерпретирован следующим образом: «Напечатать имена таких поставщиков с номерами X, чтобы ни один поставщик X не поставлял деталь 2».

Выборка с использованием связи внутри одной таблицы. Получить номера тех поставщиков, которые поставляют по крайней мере одну деталь, поставляемую поставщиком 2.

Поставки

№поставщика

№детали

количество

Р.Х

2

Х

Х

Выборка с использованием связи внутри одной таблицы. Получить номера всех деталей, поставляемых более чем одним поставщиком.

Поставки

№поставщиков

№деталей

количество

Х

Х

Р.Х

Х

Этот запрос может быть интерпретирован как «Напечатать номера Х таких деталей, что деталь Х поставляется некоторым поставщиком X, а также некоторым поставщиком, отличным от X». Символ может быть еще за­писан как .

Выборка из нескольких таблиц. Для каждой поставляемой детали получить номер детали и название города, из которого она поставляется.

Результат этого запроса не является проекцией существующей таблицы, скорее, это есть проекция соединения двух существующих таблиц. Для того чтобы сформулировать такой запрос на языке QBE, пользователь должен сна­чала построить остов таблицы ожидаемого результата (т. е. таблицу с соот­ветствующим количеством столбцов). Этой таблице и ее столбцам могут быть даны любые имена, какие только желает пользователь — они могут быть даже оставлены пустыми. Пользователь затем может сформулировать запрос, ис­пользуя таблицу «результат» и две существующие таблицы так, как показано ниже.

Поставщики

№поставщика

фамилия

статус

город

Х

Г

Поставки

№поставщика

№детали

количество

Х

Х

Результат

№детали

город

Р.Х

Р.Г

Выборка, включающая ALL. Получить номера поставщиков, постав­ляющих все детали.

Поставки

№поставщика

№детали

количество

Р.Х

ALL.Х

Детали

№детали

название

цвет

вес

город

ALL.Х

Выражение ALL. Х в таблице Детали относится ко всем номерам деталей, содер­жащимся в этой таблице. Выражение ALL.X в таблице Поставки относится ко всем номерам деталей, поставляемых поставщиком X. Так как эти выраже­ния идентичны, то X должен быть поставщиком, который поставляет все детали. Между прочим, если столбец слишком узок для выражения, скажем, ALL.X, которое пользователь хочет в него записать, то система позволяет пользователю предварительно увеличить ширину столбца. Таким образом, каждая строка запроса может содержаться в одной строке экрана.

Выборка, включающая ALL. Получить номера поставщиков, постав­ляющих по крайней мере все те детали, которые поставляет поставщик 2.

Поставки

№поставщика

№детали

количество

Р.Х

2

[ ALL.X ]

ALL.X

Выражение ALL<PX во второй строке этого запроса представляет множество всех номеров деталей, поставляемых поставщиком S2. Первая строка озна­чает, что мы отыскиваем поставщиков, таких, как SX которые поставляют ALL.X и, возможно, еще и другие детали. (Точка означает, что X может вдобавок поставлять некоторую деталь, не принадлежащую множеству ALL.X) Квадратные скобки служат просто для того, чтобы отнести . и ALL.Х к первой строке.

Выборка с использованием блока условия. Рассмотрим пример за­проса из предыдущего пункта, но из результата исключим номер поставщика 2.

Поставки

№поставщика

№детали

количество

Р.Х

2

[ALL.X ]

ALL.X

Блок условия

Х2

Иногда бывает трудно выразить желаемое условие в рамках таблиц запроса. В подобном случае QBE позволяет пользователю записывать условие в от­дельный «блок условия», как это показано в приведенном примере. В данном конкретном случае, однако, требуемый результат можно было бы получить без использования блока условия путем простой замены P.X в исходном за­просе на Р. 2 (2 не подчеркнуто).

Выборка с использованием отрицания. Получить номера таких по­ставщиков, что никакой другой поставщик не имеет более высокого статуса.

Поставщики

№поставщиков

фамилия

статус

город

Р.Х

Т

>T

Вторая строка данного запроса может быть прочитана следующим образом:

«В таблице Поставки нет строки со статусом > T».

Соседние файлы в предмете Базы данных