48337 (608547), страница 3
Текст из файла (страница 3)
, (2.1)
где - результат естественного соединения таблиц;
- таблицы, участвующие в соединении;
- псевдонимы, используемые вместо имен таблиц для сокращения записи;
- операция естественного соединения.
, (2.2)
(2.3)
где - число записей в таблице
;
- число записей в таблице С;
- число записей в таблице O;
- число различных значений в столбце clientid таблицы Clients;
- число различных значений в столбце clientid таблицы Orders.
,
,
,
.
, (2.4)
, (2.5)
где - число блоков, записанных в таблице
;
- длина одной записи таблицы
в блоках;
- длина одной записи таблицы
в байтах;
- размер одного блока.
Очевидно, что
, (2.6)
где - объем в байтах поля
;
- объем в байтах поля
;
,
,
.
.
.
.
, (2.7)
,
,
,
,
. (2.8)
.
Очевидно, что
, (2.9)
,
,
,
.
.
.
(2.10)
где - операция селекции с логической формулой
.
Формула имеет вид:
, (2.11)
,
, (2.12)
.
Так как операция селекции не изменяет структуру таблицы, то
,
.
Так как операция проекции располагается последней, то ее не учитывают при расчете сложности запроса.
Окончательно имеем:
, (2.13)
.
-
Оптимизированное дерево запроса
Оптимизированное дерево для запроса представлено на рисунке 2.22
product clients orders |
Рисунок 2.22 - Оптимизированное дерево запроса
Текст оптимизированного запроса на языке SQL
Текст оптимизированного запроса представлен на рисунке 2.23
SELECT product.productid, product.name_product; FROM product; WHERE (product.name_product = " Fuzafungin ") INTO TABLE k SELECT sotruds...name, sotruds..serial_pas, sotruds...number_pas, orders.data_zakaza, orders.orderid as Number_Order; FROM ((orders JOIN clients ON orders. sotrudid = sotruds. sotrudid) JOIN k ON k.productid = orders.productid); |
Рисунок 2.23
-
Расчет сложности оптимизированного запроса
Расчет сложности оптимизированного запроса приведен ниже.
, (2.14)
где - операция селекции с логической формулой
.
Формула имеет вид:
, (2.15)
,
,
, (2.16)
.
Так как операция селекции не изменяет структуру таблицы, то
,
.
, (2.17)
где - результат естественного соединения таблиц;
- таблицы, участвующие в соединении;
- псевдонимы, используемые вместо имен таблиц для сокращения записи;
- операция естественного соединения.
, (2.18)
(2.19)
,
,
,
.
, (2.20)
, (2.21)
где - число блоков, записанных в таблице
;
- длина одной записи таблицы
в блоках;
- длина одной записи таблицы
в байтах;
- размер одного блока.
Очевидно, что
, (2.22)
где - объем в байтах поля
;
- объем в байтах поля
;
,
,
.
.
.
.
, (2.23)
,
,
,
,
, (2.24)
.
Очевидно, что
, (2.25)
,
,
,
.
.
.
Так как операция проекции располагается последней, то ее не учитывают при расчете сложности запроса.
Окончательно имеем:
, (2.26)
-
Запрос на деление
-
Словесная формулировка запроса
Выбрать всех клиентов, которые приобрели все без исключения препараты, перечисленные в отдельном списке – отдельной таблице.
-
Текст запроса на языке SQL
Текст запроса представлен на рисунке 2.23
SELECT COUNT(*); FROM product INTO ARRAY Ar SELECT clients.clientid, clients.name; FROM ((clients JOIN orders ON orders.clientid = clients.clientid) JOIN Ar ON orders.productid = Ar.productid); GROUP BY clients.clientid, clients.name; HAVING COUNT(*)=Ar; |
Рисунок 2.23
-
Исходное дерево запроса
Дерево запроса представлено на рисунке 2.24.
q2
q1
product clients
clients orders
Рисунок 2.4
-
Расчет сложности запроса
Расчет сложности исходного запроса приведен ниже.
, (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.
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.1
Рисунок 3.1
-
Внешний вид формы
В состав проекта входит форма Расходы аптеки, которая представлена на рисунке 3.2.
Рисунок 3.2
-
Функциональные тесты
-
Тест 1
Тест на проверку построения отчета в Excel.
Входные данные: запрос на выборку из базы данных.
Выходные данные: результирующая таблица.
Работа теста приведена на рисунке 3.4.
Рисунок 3.4
Заключение
В ходе выполнения курсовой работы была достигнута цель работы – проектирование базы данных аптеки.
Для достижения цели был решен ряд задач: составление описания предметной области; составление словаря понятий и терминов; построение исходной модели (ER-диаграммы) базы данных; определение функциональных зависимостей; синтез схемы базы данных на основании функциональных зависимостей; построение оптимизированной концептуальной модели; построение запросов на выборку.
Библиографический список
-
Атре, Ш., Структурный подход к организации баз данных. / [Текст] : Атре, Ш. - М.: Финансы и статистика, 1983. – 320 с.
-
Бойко, В.В., Проектирование баз данных информационных систем. / [Текст] : Бойко, В.В., Савинков, В.М., – М.: Финансы и статистика, 1989. – 351 с.
-
Гарсия-Молина, Гектор, Ульман, Джеффри, Д., Уидом, Дженнифер Системы баз данных. Полный курс. : Пер. с англ. – М. : Издательский дом “Вильямс”, 2003. – 188 с. : ил.
-
Дейт, К., Руководство по реляционной СУБД DB2. / [Текст] : Дейт, К. – М.: Финансы и статистика, 1988. – 320 с.
-
Джексон, Г., Проектирование реляционных баз данных для использования с микроЭВМ. / [Текст] : Джексон, Г., -М.: Мир, 1991. – 252 с.
-
Кириллов, В.В., Структуризованный язык запросов (SQL). / [Текст] : Кириллов, В.В., – СПб.: ИТМО, 1994. – 80 с.
-
Мартин, Дж., Планирование развития автоматизированных систем. / [Текст] : Мартин, Дж., – М.: Финансы и статистика, 1984. – 196 с.
-
Мейер, М., Теория реляционных баз данных. / [Текст] : Мейер, М.,– М.: Мир, 1987. – 608 с.
-
Тиори, Т., Проектирование структур баз данных. / [Текст] : Тиори, Т., Фрай, Дж., В 2 кн., – М.: Мир, 1985. Кн. 1. – 287 с.: Кн. 2. – 320 с.
-
Ульман, Дж., Базы данных на Паскале. / [Текст] : Ульман, Дж., – М.: Машиностроение, 1990. – 386 с.
-
Хаббард, Дж., Автоматизированное проектирование баз данных. / [Текст] : Хаббард, Дж., – М.: Мир, 1984. – 294 с.
-
Цикритизис, Д., Модели данных. / [Текст] : Цикритизис, Д., Лоховски, Ф., – М.: Финансы и статистика, 1985. – 344 с.