Расчет сложности исходного запроса приведен ниже.
, (2.27)
где - результат естественного соединения таблиц;
- таблицы, участвующие в соединении;
- псевдонимы, используемые вместо имен таблиц для сокращения записи;
- операция естественного соединения.
, (2.28)
(2.29)
где - число записей в таблице ;
- число записей в таблице С;
- число записей в таблице O;
- число различных значений в столбце clientid таблицы Clients;
- число различных значений в столбце clientid таблицы Orders.
,
,
,
.
, (2.30)
, (2.31)
где - число блоков, записанных в таблице ;
- длина одной записи таблицы в блоках;
- длина одной записи таблицы в байтах;
- размер одного блока.
Очевидно, что
, (2.32)
|
|
где - объем в байтах поля ;
- объем в байтах поля ;
,
,
.
.
.
.
, (2.33)
,
,
,
,
. (2.34)
.
Очевидно, что
, (2.35)
,
,
,
.
.
.
(2.36)
где - операция проекции из таблицы атрибутов .
.
.
,
,
.
Так как операция группировки является последней, то для нее не производится расчет сложности.
Окончательно имеем:
, (2.37)
Птимизированное дерево запроса
Оптимизированное дерево запроса представлено на рисунке 2.25.
q2
q1
clients
product orders
|
Рисунок 2.25
Текст оптимизированного запроса на языке SQL
Текст оптимизированного запроса представлен на рисунке 2.26
SELECT COUNT(*); FROM product INTO ARRAY Ar SELECT clients.clientid, clients.name; FROM ((orders JOIN Ar ON orders.productid = Ar.productid) JOIN clients ON orders.clientid = clients.clientid); GROUP BY clients.clientid, clients.name; HAVING COUNT(*)=Ar; |
Рисунок 2.26
|
|
Расчет сложности оптимизированного запроса
Расчет сложности оптимизированного запроса приведен ниже.
. (2.38)
,
,
,
, (2.39)
.
Очевидно, что
, (2.40)
,
,
,
.
.
.
(2.41)
, (2.42)
,
,
.
Очевидно, что
, (2.43)
,
,
,
.
.
.
(2.44)
где - операция проекции из таблицы атрибутов .
.
.
,
,
.
Так как операция группировки является последней, то для нее не производится расчет сложности.
Окончательно имеем:
, (2.45)
3 Рабочий проект
Связи таблиц
Связи таблиц представлены на рисунке 3.1
Рисунок 3.1
Внешний вид формы
В состав проекта входит форма Расходы аптеки, которая представлена на рисунке 3.2.
Рисунок 3.2
Функциональные тесты
Тест 1
Тест на проверку построения отчета в Excel.
Входные данные: запрос на выборку из базы данных.
Выходные данные: результирующая таблица.
Работа теста приведена на рисунке 3.4.
Рисунок 3.4
Заключение
В ходе выполнения курсовой работы была достигнута цель работы – проектирование базы данных аптеки.
Для достижения цели был решен ряд задач: составление описания предметной области; составление словаря понятий и терминов; построение исходной модели (ER-диаграммы) базы данных; определение функциональных зависимостей; синтез схемы базы данных на основании функциональных зависимостей; построение оптимизированной концептуальной модели; построение запросов на выборку.