Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по ТОБД.doc
Скачиваний:
7
Добавлен:
17.09.2019
Размер:
1.4 Mб
Скачать

4. Иерархия в базах данных

4.1. Использование иерархии в базах данных

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

Рассмотрим различные варианты реализации данной предметной области.

1)

Таблица 4.1 – Инженер

TN

F

I

O

Oklad

Таблица 4.2 – Рабочий

TN

F

I

O

Tarif

2)

Таблица 4.3 – Личность

TN

F

I

O

D

Таблица 4.4 – Инженер

TN

Oklad

Таблица 4.5 – Рабочий

TN

Tarif

TN – табельный номер,

F – фамилия,

I – имя,

O – отчество,

D – дискриминатор,

Oklad – оклад,

Tarif – тариф.

Наиболее эффективным является второй вариант, так как доступ к нужной информации об оплате ускоряется. Данная реализация называется иерархией (рисунок 4.1).

Рис. 4.1 - Иерархия в базе данных

Пример.

Рис. 4.2 - Пример иерархии в базе данных

Функциональные зависимости, сохраняющие иерархию:

A,B D1234567

Tip1256A, Tip1256B C, D1256,A,B

Tip26A, Tip26B E, D26, Tip1256A, Tip1256B

Tip7A, Tip7B Tip7, Tip37A, Tip37B

4.2. Инклюзивная и эксклюзивная иерархии

Если объекты, принадлежащие разным сущностям одного уровня иерархии не пересекаются, то такая иерархия называется эксклюзивной. В проти вном случае инклюзивной.

Например, общее – комплектующие, одноуровневые сущности – дисплей и винчестер.

Пример инклюзивной иерархии.

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

Рассмотрим пример базы данных «Центр досуга». Существуют 3 секции: каратэ, живопись, танцы. Ученик имеет уникальный номер. Причем ученик может состоять в нескольких секциях одновременно под одним и тем же номером. Возможна следующая реализация данной задачи.

Рис.4.3 - Реализация задачи без использования иерархии

NCHK – номер ученика,

F – фамилия,

I – имя,

O – отчество,

C – класс,

S – секция,

N – номер кабинета,

SP – фамилия преподавателя,

NP – имя преподавателя.

Реализация с помощью инклюзивной иерархии

Рис. 4.4 - Реализация задачи с использованием иерархии

5. Сортировка и поиск записей в базах данных

5.1.Многофазная сортировка

Пусть имеем исходный файл размера Q. Исходный файл частями объемом равным М записывается в оперативную память. Каждая часть в ОП сортируется внутренней быстрой сортировкой и как отсортированный подсписок часть файла записывается на диск. Это первая фаза. Во второй фазе память делится на L буферов, где L>=Q/M.

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

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

Алгоритм заканчивается, когда все блоки опустошаются и ни один блок нельзя подкачать.

Рис. 5.1. Многофазная сортировка

.

Рис. 5.2. Многофазная сортировка

2 - количество обращений к памяти.

5.2. Выполнение основных операций реляционной алгебры при помощи многокомпонентного многофазного слияния

5.2.1.Удаление записей-дубликатов

Схема работы аналогична двухфазной многокомпонентной сортировке за исключением: после того как среди первых записей всех блоков (в ОЗУ) выбрана минимальная по сортировке, она записывается в выходной буфер, а все записи равные ей по содержанию из других буферов удаляются. Если буфер опустошился, то считывается следующий блок, и из него записи тоже удаляются.

5.2.2. Операция группировки

Выполняется по аналогичной схеме, но все совпадающие записи не удаляются, а помещаются в выходной буфер.

5.2.3. Объединение двух отношений

для наборов(в конце первого отношения записывается второе).

для множеств.

R S = Q.

R разбивается на L1 отсортированных подсписков. Отношение S разбивается на L2 отсортированных подсписков. В буферы (L1+L2) считываются буферы из каждого из отсортированных подсписков.

5.3.Операция поиска. Выборка записей по критериям

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

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

6. ОСНОВЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ СУБД FOXPRO

6.1. Доступ к таблицам в системе FoxPro

Таблица должна быть размещена в оперативной памяти.

Пример создания таблицы CAST.

IF NOT USED ([CAST])

USE CAST IN ø // открыть в памяти, поместить в свободный буфер

ENDIF

При открытии таблицы в память записываются все ее индексы, число которых не больше 256.

В старых языках символом «;» обозначают продолжение оператора на следующей строке, в новых – окончание оператора.

Пример. Установить порядок по полю табельный номер (TN).

SET ORDER TO TN

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

Команды управления указателем активной записи:????

Команды изменения положения указателя в активной таблице:

SKIP – вниз на одну запись;;

SKIP -1 – вверх на одну запись;;

GOTOP – на первую запись;

GO BOTTOM – на последнюю запись.

SALE CAST – выборка активной таблицы.

Пример использования оператора SALE CAST:

IF NOT USED …

USE

SET …

ELSE

SALE CAST

ENDIF

Используется оператор ROF() , если начало таблицы, EOF()- если конец таблицы.

Оператор SALE выбирает таблицы, в которых нужно передвигать указатель.

Переход к следующей записи в активной таблице:

IF NOT EOF()

SKIP

ELSE

ENDIF

Выбор записи в таблице:

GOTOP

DO WHILE NOT EOF()

SKIP

ENDDO

SELE CAST

GOTOP

DO WHILE NOT EOF()

SELE TAB

GOTOP

DO WHILE NOT EOF()

SKIP

ENDDO

SELE CAST

SKIP

ENDDO

Чтобы присвоить значение полю, используют оператор REPLACE. Записывают:

REPLACE <имя поля> WITH <выражение>

Например,

REPLACE CAST.A WITH 10.