1.4.1   Результирующие компоненты изделия

База данных в визуальной среде разработки систем управления реляционными базами данных Microsoft Visual FoxPro и все сопровождающие файлы.


 

1.4.2   Носители информации

Продукт должен размещаться в виде файлов на CD дисках. В процессе работы могут использоваться Flash, CD-R/-RW, DVD-R/RW или другие носители информации.

1.4.3   Требования к составу и параметрам технических средств

Программный комплекс должен корректно работать на компьютере со следующими техническими характеристиками:

−          процессор Pentium V 2200 МГц;

−          оперативная память объемом 1024 Мб;

−          жесткий диск Seagate Barracuda, объемом 120 Гб;

−          видеоадаптер SVGA;

−          клавиатура;

−          манипулятор типа “мышь”;

устройство удаленного доступа к сети: модем или сетевая карта.


 

2           Технический проект   2.1      Описание предметной области

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

В магазине ведется документация: кассовая книга (сумма проданного товара, которая отдается бухгалтеру, а затем передается в налоговую для отчетности), приходная накладная, ведется учет доходов и расходов аптеки..

2.2       Словарь понятий и терминов

Словарь понятий и терминов приведен в таблицах 2.1 – 2.11.

Таблица 2.1 – Сотрудники

Атрибут Смысл Пример
serial_pas Серия паспорта сотрудника аптеки 3800
num_pas Номер паспорта сотрудника аптеки 884532
name Имя сотрудника магазина Ольга
surname Фамилия сотрудника аптеки Кургузова
patronymic Отчество сотрудника аптеки Александровна

address

Адрес прописки сотрудника аптеки Ул. Сонина, д7, кв. 2

telephone_num

Телефонный номер сотрудника аптеки 89516782355

dolgnost

Занимаемая должность Фармацевт

Таблица 2.2 – Продукция аптеки

Атрибут Смысл Пример
productid Порядковый номер в таблице продуктов 105
artikul Артикул продукта 2345456
naimenovanie Наименование продукта Азаран
sostav Состав продукта цефтриаксон
Cost_one Стоимость за штуку 200

count

Количество штук 34

sroc_godn

Срок годности 24.06.2011

description

Показания к применению Антибиотик местного действия с противовоспал. эффектом

Таблица 2.3 – Заказ товара

Атрибут Смысл Пример
Data_zakaza Дата заказа товара 24.02.09
predoplata Сумма предоплаты за товар 800
Order_execution Дата выполнения заказа 02.03.09

Таблица 2.4 – Заработная плата сотрудников

Атрибут Смысл Пример
oklad Оклад сотрудника аптеки 4000
premia Премия сотрудника аптеки 2000
avans Аванс сотрудника аптеки 1000
zarplata Зарплата сотрудника аптеки 5000

Таблица 2.5 – Клиенты

Атрибут Смысл Пример
serial_pas_e Серия паспорта клиента 3234
number_pas_e Номер паспорта клиента 676767
name Имя клиента Александра
surname Фамилия клиента Кургузова
patronymic Отчество клиента Ивановина

address

Адрес прописки клиента Ул. Ленина, д97, кв. 8

telephone_number

Телефонный клиента 89513302324

Таблица 2.6 – Поставщики

Атрибут Смысл Пример
supplierid Порядковый номер поставщика 2
name Название организации поставщика ООО Биофарм
address Адрес поставщика  Ул. Кр. Армия, д.8
telephone Телефон поставщика 546523

Таблица 2.7 – Поставка продукции

Атрибут Смысл Пример
Data_supply Дата поставки продукции 10.05.10
Time_supply Время поставки продукции 16.20

Таблица 2.8 – Продажа товара

Атрибут Смысл Пример
Data_prodagi Дата продажи продукции 05.05.10
Time_prodagi Время продажи продукции 15.35
count Количество проданной продукции 2

Таблица 2.9 – Доход аптеки

Атрибут Смысл Пример
Month_d Месяц учета июль
Year_d Год учета 2009
Dohod_employee Выручка сотрудника за месяц 91233

Таблица 2.10 – Расходы аптеки

Атрибут Смысл Пример
Month_r Месяц учета январь
Year_r Год учета 2009
arenda Сумма за аренду 15000
Communal_yslygi Сумма за коммунальные услуги 4500
reklama Сумма за рекламу 3000

Vnutr_rashodi

Сумма за внутренние расходы 10000

Таблица 2.11 – Бухгалтерия

Атрибут Смысл Пример
month Месяц учета август
year Год учета 2008
2.3      Определение функциональных зависимостей

Не может быть так, что бы в один и тот же день, в одно и тоже время был оформлен заказ и прибыло два поставщика.

data_supply, vremy_postavki -> supplierid.

Не может такого быть, что бы один и тот же продукт, в одно и тоже время, в один и тот же день, один и тот же клиент, купил у двух и более продавцов.

productid, data_cost, vremy_cost, clientid -> employeeid.

Не может такого быть, что бы в один и тот же месяц, в один и тот же год фиксировались дважды расходы аптеки.

month_r, year_r -> arenda, kommunal_yslygi, reklama, vnutr_rashodi.

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

month_d, year_d -> viruchka_emploee.

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

employeeid -> month_d, year_d.

Не может такого быть, что бы в один и тот же месяц, в один и тот же год фиксировались дважды доходы и расходы.

month, year -> rashodid, dohodid.

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

emloyeeid -> oklad, premia, avans, zarplata.

Не может такого быть, что бы один и тот же продукт имел два одинаковых артикула.

productid -> artikulid.

 Не может такого быть, чтобы один и тот же поставщик имел 2 порядковых номера.

supplierid -> name.

Исходные функциональные зависимости представлены на рисунке 2.1

data_supply, vremy_postavki -> supplierid

clientid, productid, data_voz, vremy_voz -> employeeid

month_r, year_r -> arenda, kommunal_yslygi, reklama, vnutr_rashodi

month_d, year_d -> viruchka_emploee

employeeid -> month_d, year_d

month, year -> rashodid, dohodid

emloyeeid -> oklad, premia, avans, zarplata

productid -> artikulid

supplierid -> name

Рисунок 2.1 – Исходные функциональные зависимости

2.4       Синтез схемы базы данных на основании функциональных зависимостей 2.4.1    Построение неизбыточного покрытия

Этапы построения неизбыточного покрытия представлены на рисунке 2.2.

Построение неизбыточного покрытия.


G:

 data_supply, vremy_postavki -> supplierid

 clientid, productid, data_voz, vremy_voz -> employeeid

 month_r, year_r -> arenda, mployee_yslygi, reklama, vnutr_rashodi

 month_d, year_d -> viruchka_emploee

 employeeid -> month_d, year_d

 month, year -> rashodid, dohodid

 emloyeeid -> oklad, premia, avans, zarplata

 productid -> artikulid

 supplierid -> name

 Неизбыточное покрытие

g:

 data_supply, vremy_postavki -> supplierid

 clientid, productid, data_voz, vremy_voz -> employeeid

 month_r, year_r -> arenda, mployee_yslygi, reklama, vnutr_rashodi

 month_d, year_d -> viruchka_emploee

 employeeid -> month_d, year_d

 month, year -> rashodid, dohodid

 emloyeeid -> oklad, premia, avans, zarplata

 productid -> artikulid

 supplierid -> name

Рисунок 2.2 – Построение неизбыточного покрытия

2.4.2    Построение леворедуцированного покрытия

Этапы построения леворедуцированного покрытия представлены на рисунке 2.3.

Построение леворедуцированного покрытия.

g:

 data_supply, vremy_postavki -> supplierid

 clientid, productid, data_voz, vremy_voz -> employeeid

 month_r, year_r -> arenda, kommunal_yslygi, reklama, vnutr_rashodi

 month_d, year_d -> viruchka_emploee

 employeeid -> month_d, year_d

 month, year -> rashodid, dohodid

 emloyeeid -> oklad, premia, avans, zarplata

 productid -> artikulid

 supplierid -> name

Леворедуцированное покрытие

g:

 data_supply, vremy_postavki -> supplierid

 data_voz, vremy_voz, productid -> clientid

 month_r, year_r -> arenda, kommunal_yslygi, reklama, vnutr_rashodi

 month_d, year_d -> viruchka_emploee

 employeeid -> month_d, year_d

 month, year -> rashodid, dohodid

 emloyeeid -> oklad, premia, avans, zarplata

 productid -> artikulid

 supplierid -> name

Рисунок 2.3 - Построение леворедуцированного покрытия

2.4.3    Построение праворедуцированного покрытия

Этапы построения праворедуцированного покрытия представлены на рисунке 2.4

Построение праворедуцированного покрытия.

g:

 data_supply, vremy_postavki -> supplierid

 productid, data_voz, vremy_voz -> employeeid

 month_r, year_r -> arenda, kommunal_yslygi, reklama, vnutr_rashodi

 month_d, year_d -> viruchka_emploee

 employeeid -> month_d, year_d

 month, year -> rashodid, dohodid

 emloyeeid -> oklad, premia, avans, zarplata

 productid -> artikulid

 supplierid -> name

Удаление зависимостей вида X->

Праворедуцированное покрытие

g:

 data_supply, vremy_postavki -> supplierid

 productid, data_voz, vremy_voz -> employeeid

 month_r, year_r -> arenda, kommunal_yslygi, reklama, vnutr_rashodi

 month_d, year_d -> viruchka_emploee

 employeeid -> month_d, year_d

 month, year -> rashodid, dohodid

 emloyeeid -> oklad, premia, avans, zarplata

 productid -> artikulid

 supplierid -> name

Рисунок 2.4- Построение праворедуцированного покрытия.

  2.4.4   Построение классов эквивалентности

Этапы построения классов эквивалентности представлены на рисунках 2.5 – 2.6. Построение классов эквивалентности.

Построение классов эквивалентности

1. Ef( data_supply, vremy_postavki ):

 data_supply, vremy_postavki -> supplierid

2. Ef( clientid, productid, data_voz, vremy_voz ):

 clientid, productid, data_voz, vremy_voz -> employeeid

3. Ef( month_r, year_r ):

 month_r, year_r -> arenda, kommunal_yslygi, reklama, vnutr_rashodi

4. Ef( month_d, year_d ):

 month_d, year_d -> viruchka_emploee

5. Ef( employeeid ):

 employeeid -> month_d, year_d

6. Ef( month, year ):

 month, year -> rashodid, dohodid

7. Ef( emloyeeid ):

 emloyeeid -> oklad, premia, avans, zarplata

Рисунок 2.5 - Построение классов эквивалентности

8. Ef( productid ):

 productid -> artikulid

9. Ef( supplierid ):

 supplierid -> name

Построение минимального покрытия на основе

прямой функциональной определяемости

Редуцированное минимальное покрытие

g:

 data_supply, vremy_postavki -> supplierid

 clientid, productid, data_voz, vremy_voz -> employeeid

 month_r, year_r -> arenda, kommunal_yslygi, reklama, vnutr_rashodi

 month_d, year_d -> viruchka_emploee

 employeeid -> month_d, year_d

 month, year -> rashodid, dohodid

 emloyeeid -> oklad, premia, avans, zarplata

 productid -> artikulid

 supplierid -> name

Рисунок 2.6 - Построение классов эквивалентности

2.4.5    Построение редуцированного минимального кольцевого покрытия

Определение CF-зависимостей по классам эквивалентности представлено на рисунках 2.7 – 2.11. Построение кольцевого покрытия

Минимальное кольцевое покрытие

( data_supply, vremy_postavki; ) -> supplierid

( productid, data_voz, vremy_voz; ) -> employeeid

 ( productid, data_zakaza, employeeid; clientid, data_zakaza, productid; )

( month_r, year_r; ) -> arenda, kommunal_yslygi, reklama, vnutr_rashodi

( month_d, year_d; ) -> viruchka_emploee

( employeeid; ) -> month_d, year_d

( month, year; ) -> rashodid, dohodid

( emloyeeid; ) -> oklad, premia, avans, zarplata

( productid; ) -> artikulid

(supplierid;) -> name

Получение кольцевого минимального

редуцированного покрытия

Естественное характеристическое множество

для кольцевого покрытия

f(C):

 data_supply, vremy_postavki -> supplierid

 productid, data_voz, vremy_voz -> employeeid

Рисунок 2.7 - Построение редуцированного минимального кольцевого покрытия

 month_r, year_r -> arenda, kommunal_yslygi, reklama, vnutr_rashodi

 month_d, year_d -> viruchka_emploee

 employeeid -> month_d, year_d

 month, year -> rashodid, dohodid

 emloyeeid -> oklad, premia, avans, zarplata

 productid -> artikulid

 supplierid -> name

Левая редукция или перенос в правую часть

1. Проверка CF-зависимости:

 ( data_supply, vremy_postavki; ) -> supplierid

2. Проверка CF-зависимости:

 ( clientid, productid, data_voz, vremy_voz; ) -> employeeid

3. Проверка CF-зависимости:

 ( month_r, year_r; ) -> arenda, kommunal_yslygi, reklama,

vnutr_rashodi

4. Проверка CF-зависимости:

 ( month_d, year_d; ) -> viruchka_emploee

5. Проверка CF-зависимости:

 ( employeeid; ) -> month_d, year_d

Рисунок 2.8 - Построение редуцированного минимального кольцевого покрытия

6. Проверка CF-зависимости:

 ( month, year; ) -> rashodid, dohodid

7. Проверка CF-зависимости:

 ( emloyeeid; ) -> oklad, premia, avans, zarplata

8. Проверка CF-зависимости:

 ( productid; ) -> artikulid

9. Проверка CF-зависимости:

 ( supplierid; ) -> name

Проверка покрытия на праворедуцированность

1. Проверка CF-зависимости:

 ( data_supply, vremy_postavki; ) -> supplierid

2. Проверка CF-зависимости:

 ( clientid, productid, data_voz, vremy_voz; ) -> employeeid

3. Проверка CF-зависимости:

 ( month_r, year_r; ) -> arenda, kommunal_yslygi, reklama,

vnutr_rashodi

4. Проверка CF-зависимости:

 ( month_d, year_d; ) -> viruchka_emploee

Рисунок 2.9 - Построение редуцированного минимального кольцевого покрытия


5. Проверка CF-зависимости:

 ( employeeid; ) -> month_d, year_d

6. Проверка CF-зависимости:

 ( month, year; ) -> rashodid, dohodid

7. Проверка CF-зависимости:

 ( emloyeeid; ) -> oklad, premia, avans, zarplata

8. Проверка CF-зависимости:

 ( productid; ) -> artikulid

9. Проверка CF-зависимости:

 ( supplierid; ) -> name

Минимальное редуцированное кольцевое покрытие

C

 ( data_supply, vremy_postavki; ) -> supplierid

 ( clientid, productid, data_voz, vremy_voz; ) -> employeeid

 ( month_r, year_r; ) -> arenda, kommunal_yslygi, reklama, vnutr_rashodi

 ( month_d, year_d; ) -> viruchka_emploee

 ( employeeid; ) -> month_d, year_d

 ( month, year; ) -> rashodid, dohodid

 ( emloyeeid; ) -> oklad, premia, avans, zarplata

 ( productid; ) -> artikulid

 ( supplierid; ) -> name

Рисунок 2.10 - Построение редуцированного минимального кольцевого покрытия

Естественное характеристическое множество

f(C):

 data_supply, vremy_postavki -> supplierid

 clientid, productid, data_voz, vremy_voz -> employeeid

 month_r, year_r -> arenda, kommunal_yslygi, reklama, vnutr_rashodi

 month_d, year_d -> viruchka_emploee

 employeeid -> month_d, year_d

 month, year -> rashodid, dohodid

 emloyeeid -> oklad, premia, avans, zarplata

 productid -> artikulid

 supplierid -> name

R0 = ( data_supply, vremy_postavki, supplierid ) K0 = { data_supply,

vremy_postavki }

R1 = ( clientid, productid, data_voz, vremy_voz, employeeid ) K1 = {

clientid, productid, data_voz, vremy_voz }

R2 = ( month_r, year_r, arenda, kommunal_yslygi, reklama, vnutr_rashodi)

K2 = { month_r, year_r }

R3 = ( month_d, year_d, viruchka_emploee ) K3 = { month_d, year_d }

R4 = ( employeeid, month_d, year_d ) K4 = { employeeid }

R5 = ( month, year, rashodid, dohodid ) K5 = { month, year }

R6 = ( emloyeeid, oklad, premia, avans, zarplata ) K6 = { emloyeeid }

R7 = ( productid, artikulid ) K7 = { productid }

R8 = ( supplierid, name ) K8 = { supplierid }

Рисунок 2.11 - Построение редуцированного минимального кольцевого покрытия

2.5       ER-схема базы данных

В приложении А приведены схемы базы данных до минимизации и после минимизации. Построение запросов на SQL

2.5.1   Запрос на выборку 2.5.1.1           Словесная формулировка запроса

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

2.5.1.2           Текст запроса на языке SQL

Текст запроса на языке SQL представлен на рисунке 2.20.

SELECT clients.name, clients.serial_pas, clients.number_pas, product.name_product, orders.data_zakaza, orders.orderid as Number_Order;

FROM ((orders JOIN sotrud s ON orders. clientid = clients. clientid) JOIN product ON orders.productid = product.productid);

WHERE (product.name_product = "Fuzafungin")

Рисунок 2.20 - Текст запроса на языке SQL

2.5.1.3           Исходное дерево запроса

Исходное дерево для запроса представлено на рисунке 2.21

Блок-схема: документ: F2= clients.name, clients.serial_pas, clients.number_pas, product.name_product, orders.data_zakaza, orders.orderid as Number_Order

 


Блок-схема: документ: (product.name_product = "Fuzafungin")

 


q2


 

q1

product

clients orders

Рисунок 2.21- Исходное дерево запроса

2.6.1.4 Расчет сложности запроса

Расчет сложности исходного запроса приведен ниже.

, (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.1

2.2

2.3

2.3.1

2.3.1.1

2.3.1.2

2.3.1.3

2.3.1.4

2.3.1.5           Оптимизированное дерево запроса

Оптимизированное дерево для запроса представлено на рисунке 2.22

Блок-схема: документ: F2= clients.name, clients.serial_pas, clients.number_pas, product.name_product, orders.data_zakaza, orders.orderid as Number_Order



 

Блок-схема: документ: (product.name_product = " Fuzafungin")



 

q3

 

q2

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.3.1.6           Расчет сложности оптимизированного запроса

Расчет сложности оптимизированного запроса приведен ниже.

, (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)

2.5.2   Запрос на деление 2.5.2.1           Словесная формулировка запроса

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

2.5.2.2           Текст запроса на языке 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.5.2.3           Исходное дерево запроса Дерево запроса представлено на рисунке 2.24.

Блок-схема: документ: F2= clients.clientid, clients.name


 


q2


 

q1


 

product clients


clients orders

Рисунок 2.4
2.5.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.5.2.5           птимизированное дерево запроса

Оптимизированное дерево запроса представлено на рисунке 2.25.

Блок-схема: документ: F2= clients.clientid, clients.name


 


q2


 

q1


 

clients


 product orders

Рисунок 2.25

2.5.2.6           Текст оптимизированного запроса на языке 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.5.2.7           Расчет сложности оптимизированного запроса

Расчет сложности оптимизированного запроса приведен ниже.

. (2.38)

,

,

,

, (2.39)

.

Очевидно, что

, (2.40)

,

,

,

.

.

.

 (2.41)

, (2.42)

,

,

.

Очевидно, что

, (2.43)

,

,

,

.

.

.

(2.44)

где  - операция проекции из таблицы  атрибутов .

.

.

,

,

.

Так как операция группировки является последней, то для нее не производится расчет сложности.

Окончательно имеем:

, (2.45)


 


Информация о работе «Проектирование базы данных "Аптека"»
Раздел: Информатика, программирование
Количество знаков с пробелами: 31628
Количество таблиц: 32
Количество изображений: 8

Похожие работы

Скачать
15321
5
14

... об аптеках, в которых данный препарат можно приобрести. Администратор должна иметь возможность получать информацию об изменении стоимости препаратов, об аптеках и изготовителях препаратов. 2. Цели и задачи создания базы данных «Аптеки-препараты» Проанализировав предметную область, мы можем сказать, что разработка рассматриваемой базы данных актуальна. Целью разработки базы данных « ...

Скачать
77159
2
0

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

Скачать
21800
8
34

... 453АР Совпадает со значением поля "Код назначения" в таблице "Назначения препаратов". 1.6 Заполнение таблиц информацией Таблица Препараты. В базе данных аптеки на каждую группу препаратов (антибиотики, антисептики и т.п.) приходится небольшое количество лекарственных средств, которые находятся на складе аптеки. Единица измерения: либо упаковка, либо пузырек. В зависимости от фирмы ...

Скачать
26791
0
25

... было проведено исследование данной предметной области. В рамках данной курсовой работы реализуется проектирование и разработка учебной базы данных по предметной области. Следовательно, полученная БД не будет отражать всю бизнес-логику данной предметной области, а ограничиться лишь её частью. Предметную область «Аптека» можно описать в виде модели данных. Модель данных отображает реальный мир в ...

0 комментариев


Наверх