Базы данных. Курс лекций. Учебное пособие - страница 11

Шрифт
Интервал


Разрешение или запрещение каскадных изменений реализуется при описании связей между таблицами БД.

Обычно в СУБД для реализации ссылочной целостности в дочерней таблице создают внешний ключ, ссылающийся на родительскую таблицу, и указывают вид каскадных воздействий.

Внешний ключ создается в дочерней таблице. В него входят поля связи дочерней таблицы. Для связей типа «один-ко-многим» внешний ключ должен совпадать по составу полей с первичным ключом главной таблицы или с частью первичного ключа (в этом случае нормализация таблиц БД выполнена не полностью).

При определении первичного и внешнего ключей СУБД автоматически строит индексы. Индекс, соответствующий внешнему ключу, строится для обеспечения связей родительской и дочерней таблиц [2].

Индексы обеспечивают механизм быстрого доступа к данным в таблицах. Индексы хранят значения индексных полей (по которым построен индекс) и указатель на запись в таблице.

Использование индексов позволяет использовать не просто последовательный, а индексно-последовательный доступ.

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

При индексно-последовательном доступе указатель в индексе устанавливается на первую строку, соответствующую условиям запроса (или его части), и считывается запись из таблицы по хранящемуся на нее в индексе указателю. Далее последовательно считываются остальные записи, удовлетворяющие условиям запроса.

Таким образом, во втором случае поиск ведется по индексу, а не по самой таблице. Таблица может быть неупорядоченна, а небольшой по объему индексный файл может быть легко отсортирован.

Например, рассмотрим табл. 1.

Таблица 1

Отпуск товара


Номер

Дата

Товар

Количество


1

06.01.14

Спички

2


2

02.01.14

Мыло

100


3

03.01.14

Мука

5000


4

08.01.14

Спички

10


Структура индексов по каждому из четырех полей показана в табл. 2.

Таблица 2

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


По дате прихода

По наименованию

По количеству


Дата

Номер записи

Товар

Номер записи

Количество

Номер записи


02.01.14

2

Мука

3

5000

3


03.01.14

3

Мыло

2

100

2


06.01.14

1

Спички

1

10

4


08.01.14

4

Спички

4

2

1


Если несколько товаров имеет одно и то же наименование, то достаточно найти в индексе, построенном по столбцу «Наименование», первую запись, а затем повторить чтение подряд для всех товаров с этим наименованием. То же самое касается даты и т. д.