СПАСОИ (10) - Лекция №8 - SQL
...начало

Этап логического проектирования
Методы индексации данных в реляционных БД
Реверсивные индексы
Запись на листовом уровне индекса имеет вид:
<
реверсивные значения индексируемого атрибута - mean,
идентификатор записи - rowid
>

Преимущество реверсивного индекса:
- используется в больших кластерных системах и позволяют равномерно распределить индексы по серверам кластера.
Это связано с тем, что окончание слова более равномерно распределено по буквам алфавита, чего его начало (это кто-то доказал).
Пусть для хранения индекса слов используется кластер, состоящий из 5 серверов:

Данный пример показывает, что применение реверсивного индекса позволяет снизить нагрузку на сервер вдвое (распределить её между другими).
Индекс таблиц
Является B-деревьями, и структура записи на листовом уровне имеет вид:
<
ключ таблицы - key,
остальные поля записи
>
Преимущество индекса таблиц:
- из индекса читаются сами записи, что сокращает время доступа к данным, то есть не надо читать записи таблицы.
Недостатки индекса таблиц:
- резко увеличивается объём индекса;
- очень осложняется процедура ведения индекса, так как здесь индекс и БД едины.
После оптимизации схемы БД, выбора индексируемых атрибутов, характеристик атрибутов и их таблиц выполняется генерация DDL-сценария с помощью CASE-средств (ERwin Data Modeler, например).
DDL-сценарий содержит создание объектов БД (таблицы, индексы, триггеры). Сценарий выполняется средствами СУБД. После этого можно использовать язык манипулирования данными.
Некоторые возможности языка SQL
Является общесистемным:
- является языком манипулирования данными;
- является средством взаимосвязи между серверами (в случае с подзапросами);
- используется почти во всех СУБД с архитектурой клиент-сервер.
Проиллюстрируем язык SQL на примере следующей БД. Поставщик поставляет детали для изделия в данном количестве.
Схема базы данных (таблицы $$S$$, $$P$$, $$J$$, $$SPJ$$) в виде ER-диаграммы:

Схема базы данных: $$\rho = (S, P, J, SPJ)$$.
здесь:
- $$S$$ - таблица "Поставщик", описывающая поставщиков деталей. Имеет следующие поля:
- номер поставщика - идентификационный номер поставщика (ключевое поле);
- имя - фамилия, имя и отчество поставщика;
- состояние - состояние поставщика (состояние счета);
- город - город, в котором проживает поставщик и в котором находится его центральный офис.
- $$P$$ - таблица "Деталь". Описывает поставляемые детали и включает следующие поля:
- номер детали - идентификационный номер детали (ключевое поле);
- название - название детали;
- цвет - цвет детали;
- вес - все детали в фунтах;
- город - город, в котором изготавливается деталь.
- $$J$$ - таблица "Изделие". Описывает изготавливаемые изделия и включает следующие поля
- номер изделия - идентификационный номер изделия (ключевое поле);
- название - название изделия;
- город - город, где изготавливается изделие.
- $$SPJ$$ - таблица "Сборка". Имеет следующие поля:
- номер поставщика — идентификационный номер поставщика, поставляющего деталь (ключевое поле);
- номер детали - идентификационный номер детали, поставляемой поставщиком (ключевое поле);
- номер изделия - идентификационный номер изделия, в которое входит деталь, поставляемая поставщиком (ключевое поле);
- количество - количество деталей, поставляемых поставщиком для данного изделия (количество деталей в поставке).
SQL состоит из языка описания данных (генерируется CASE-средствами) и языка манипулирования данными (SELECT
, INSERT
, UPDATE
, DELETE
).
SQL - непроцедурный язык, то есть программист определяет, что надо получить, но не определяет, как.
Как правило, операторы включаются в текст процедурного языка, и в этом случае возникает проблема импенданса, так как оператор SELECT возвращает несколько записей, а программа одновременно может обрабатывать только одну запись. Эта проблема решается с помощью курсора.
Существуют различные способы встраивания SQL в процедурный язык:
- API;
- операторы добавляются в язык (SQLJ = Java + SQL);
- операторы используются как обычные операторы процедурного языка (PL/SQL).
Оператор SELECT
Моделирует выполнение операций реляционной алгебры. В результате выполнения оператор строит новую таблицу, в которой содержатся выбранные данные.
Порядок выполнения оператора SELECT
на логическом уровне:
- из исходной таблицы выбираются записи по условию. Это операция селекции;
- из полученных записей выделяются указанные атрибуты;
- если есть
GROUP BY
, то результирующие записи группируется по атрибутам (по одинаковым значениям), указанным в условии; - если есть
ORDER BY
, то результирующие записи сортируются по указанному атрибуту.
продолжение...