База данных «Магазин косметики»
Объем данного курсового проекта равен __ страницам. В курсовом проекте содержится два приложения, в которых приведены ER-схемы базы данных, код программы. Также в КП содержится постановка задачи. Kod_spo, kod_post, kod_nom, price_rr, kolvo]+f = kod_spo, kod_post, kod_nom, price_rr, kolvo, name_nom, kod_str, kod_proiz, ed_izm, ves, name_proiz, city_pz, street_pz, house_pz, office_pz, phone_pz… Читать ещё >
База данных «Магазин косметики» (реферат, курсовая, диплом, контрольная)
- 1 Техническое задание 6
- 1.1 Основание для разработки 6
- 1.2 Назначение разработки 6
- 1.3 Стандарты 6
- 1.4 Требования к программе или программному изделию 6
- 1.4.1 Носители информации 7
- 1.4.2 Требования к составу и параметрам технических средств 7
- 2 Технический проект 8
- 2.1 Описание предметной области 8
- 2.2 Словарь понятий и терминов 8
- 2.4 Определения функциональных зависимостей 15
- Ключевые зависимости 15
- Неключевые зависимости 17
- Универсальные зависимости 18
- 2.5 Синтез схемы базы данных на основании функциональных зависимостей 19
- 2.5.1 Построение неизбыточного покрытия 19
- 2.5.2 Построение леворедуцированного покрытия 20
- 2.5.3 Построение праворедуцированного покрытия 23
- 2.5.4 Построение классов эквивалентности 25
- 2.5.5 Построение редуцированного минимального кольцевого покрытия на основе прямой функциональной определяемости 27
- Построение редуцированного минимального кольцевого покрытия 28
- 2.6 Построение запросов на SQL 32
- 2.6.1 Запрос на выборку 32
- 2.6.1.1 Словесная формулировка запроса 32
- 2.6.1.3 Исходное дерево запроса 34
- Рисунок 2.21 — Оптимизированное дерево запроса на основании операции проекции 50
- 2.6.1.8 Расчет сложности запроса 51
- Приложение А 61
- Реферат
- Объем данного курсового проекта равен __ страницам. В курсовом проекте содержится два приложения, в которых приведены ER-схемы базы данных, код программы. Также в КП содержится постановка задачи.
- Ключевые слова:
- База данных, ER-схема, сущность, атрибут, ключ, связь, функциональная зависимость, система функциональных зависимостей.
- Ключевые слова и словосочетания данной курсовой работы: база данных, магазин косметики, учёт, продажа, поставка.
- Объектом исследования является учёт операций и товаров в магазине косметики. Предмет исследования — база данных магазина косметики.
- Целью работы является разработка базы данных магазина косметики, позволяющая вести учёт и анализ поставок и продаж. Результатом работы является оптимизированная (приведенная к третьей нормальной форме) модель этой базы данных.
- При разработке структуры базы данных используется два метода — метод ER-диаграмм и метод синтеза.
- Разработанная структура базы данных может быть воплощена в системе управления базами данных (например, FoxPro) и использоваться для ведения учета поставок и продаж магазином косметики.
- Определения
- В тексте данной работы использованы следующие термины и сокращения:
- В данной работе применены следующие термины с соответствующими определениями:
- база данных: Файлы, снабженные описанием хранимых в них данных и находящиеся под управлением СУБД;
- er-диаграмма: Схема базы данных, спроектированная с помощью программы ERWin;
- сущность: Любой различимый объект (объект, который мы можем отличить от другого), информацию о котором необходимо хранить в базе данных;
- атрибут: Поименованная характеристика сущности;
- ключ: Минимальный набор атрибутов, по значениям которых можно однозначно найти требуемый экземпляр сущности;
- связь: Ассоциирование двух или более сущностей;
- производитель: Юридическое или физическое лицо, изготовляющее косметику;
- представитель: Юридическое или физическое лицо, представляющее интересы производителя в России.
- рекомендация: Описание товара, позволяющее покупателю сделать более точный выбор (например, «шампунь для сухих волос» или «крем для жирной кожи»);
- состав: Перечень веществ, входящих в косметику;
- контрагент: Юридическое или физическое лицо, участвующее в сделках купли-продажи с магазином косметики;
- Обозначения и сокращения
- В данной работе применены следующие сокращения:
- БД: База данных;
- СУБД: Система управления базами данных;
- ФЗ: Функциональная зависимость;
- ИНН: Идентификационный номер налогоплательщика;
- КПП: Код причины постановки на учет в налоговых органах;
- БИК: Банковский идентификационный код;
- к/с: Корреспондентный счет;
- р/с: Расчетный счет;
1 Техническое задание
1.1 Основание для разработки
Основанием для разработки программного продукта служит задание на курсовую работу по предмету «Базы данных»" на тему «Магазин косметики».
Необходимо разработать базу данных, использующуюся при работе магазина косметики.
1.2 Назначение разработки
Программный продукт разрабатывается с целью создания базы данных магазина, выпускающей косметику.
1.3 Стандарты
Данная работа оформлена в соответствии со стандартом СТУ 04.02.030.-2008.
1.4 Требования к программе или программному изделию
В программе требуется реализовать учет косметики: (тип, вид, название, состав, цена-оптовая, закупочная, себестоимость, розница, количество, где произведена, кем произведена, когда произведена). Также необходимо определить, способы покупки косметики. Спроектировать базу данных для магазина косметики. Описать предметную область, разработать словарь понятий и терминов, построить систему функциональных зависимостей. Синтезировать схему базы данных на основании функциональных зависимостей (построение неизбыточного покрытия, построение леворедуцированного неизбыточного покрытия, построение праворедуцированного неизбыточного покрытия, построение классов эквивалентностей, построение минимального покрытия). Построить уточненную концептуальную модель в виде ER-диаграммы, запросы предметной области. Записать минимизированные запросы на языке SQL.
База данных создана в визуальной среде разработки систем управления реляционными базами данных Navicat Premium.
база данные учет магазин
1.4.1 Носители информации
Продукт должен размещаться в виде файлов на CD дисках. В процессе работы могут использоваться Flash, CD-R/-RW, DVD-R/RW или другие носители информации.
1.4.2 Требования к составу и параметрам технических средств
Программный комплекс должен корректно работать на компьютере со следующими техническими характеристиками (минимальные требования):
? процессор Pentium V 2200 МГц;
? оперативная память объемом 1024 Мб;
? жесткий диск Seagate Barracuda, объемом 120 Гб;
? видеоадаптер SVGA;
? клавиатура;
? манипулятор типа «мышь»;
устройство удаленного доступа к сети: модем или сетевая карта.
2 Технический проект
2.1 Описание предметной области
Магазин реализует косметику, закупая ее по одной цене и продавая по другой (при покупке у иностранных поставщиков или продаже иностранным покупателям цены могут выражаться в валюте, отличной от рублей).
Каждая единица косметики обладает уникальным составом (перечнем веществ) и изготовлена определенным производителем, имеющим представителей.
Все сделки (покупки и продажи) заключаются с контрагентами (поставщиками или покупателями), у которых есть счета в банках.
При совершении сделок формируется накладная (приходная или расходная), состоящая строк — видов косметики, закупленных в определенном количестве по определенной цене.
По продажам отслеживается статус оплаты.
Для удобства покупателей косметика снабжается рекомендациями.
2.2 Словарь понятий и терминов
Словарь понятий и терминов приведен в таблицах 2.1 — 2.21.
Таблица 2.1 — Номенклатура
Термины | Смысл | Обозначение | Пример значения | |
Код номенклатуры | Код товара по каталогу | kod_nom | ||
Название номенклатуры | Название товара в каталоге | name_nom | Помада Марон Глясе | |
Код страны | Код страны-производителя данного товара | kod_str | ||
Код производителя | Код фирмы-производителя данного товара | kod_proiz | ||
Единица измерения | Единицы, в которых измеряется количество данного товара | ed_izm | шт | |
Вес | Вес единицы данного товара (в килограммах) | ves | 0.12 | |
Таблица 2.2 — Цена
Термины | Смысл | Обозначение | Пример значения | |
Код цены | Код цены в списке цен | kod_pr | ||
Код типа цены | Код типа цены | kod_tp | ||
Код номенклатуры | Код товара, цена на который указывается, по каталогу | kod_nom | ||
Цена | Цена на данный товар | price | 230.0 | |
Таблица 2.3 — Тип цены
Термины | Смысл | Обозначение | Пример значения | |
Код типа цены | Код типа цены в списке типов цен | kod_tp | ||
Название типа цены | Название типа цены | name_tp | Закупочная | |
Код валюты | Код валюты, используемой для данного типа цены | kod_val | ||
Таблица 2.4 — Валюта
Термины | Смысл | Обозначение | Пример значения | |
Код валюты | Код валюты | kod_val | ||
Название валюты | Общепринятое название для данной валюты | name_val | USD | |
Курс | Курс данной валюты по отношению к рублю | kurs | 23.80 | |
Таблица 2.5 — Производитель
Термины | Смысл | Обозначение | Пример значения | |
Код производителя | Код производителя в списке производителей | kod_proiz | ||
Название | Название производителя | name_proiz | GreenMama | |
Город | Город (юридический адрес производителя) | city_pz | Москва | |
Улица | Улица (юридический адрес производителя) | street_pz | Суворовская | |
Дом | Дом (юридический адрес производителя) | house_pz | ||
Офис | Офис (юридический адрес производителя) | office_pz | ||
Телефон | Контактный телефон производителя | phone_pz | ||
Таблица 2.6 — Представитель
Термины | Смысл | Обозначение | Пример значения | |
Код представителя | Код представителя в списке представителей | kod_pred | ||
Название | Название представителя | name_pred | Солнышко | |
Код производителя | Код производителя в списке производителей | kod_proiz | ||
Город | Город (юридический адрес представителя) | city_pr | Москва | |
Улица | Улица (юридический адрес представителя) | street_pr | Суворовская | |
Дом | Дом (юридический адрес представителя) | house_pr | ||
Офис | Офис (юридический адрес представителя) | office_pr | ||
Телефон | Контактный телефон производителя | phone_pr | ||
Таблица 2.7 — Страна
Термины | Смысл | Обозначение | Пример значения | |
Код страны | Код страны в списке стран | kod_str | ||
Название | Название страны | name_str | Россия | |
Таблица 2.8 — Рекомендация
Термины | Смысл | Обозначение | Пример значения | |
Код рекомендации | Код рекомендации в списке рекомендаций | kod_rek | ||
Код номенклатуры | Код товара в каталоге, к которому относится рекомендация | kod_nom | ||
Код варианта | Код варианта рекомендации | kod_var | ||
Таблица 2.9 — Вариант рекомендации
Термины | Смысл | Обозначение | Пример значения | |
Код варианта рекомендации | Код варианта рекомендации в списке вариантов рекомендаций | kod_var | ||
Рекомендация | Суть рекомендации | rek | Для жирной кожи | |
Таблица 2.10 — Состав
Термины | Смысл | Обозначение | Пример значения | |
Код состава | Код состава в списке составов | kod_sost | ||
Код номенклатуры | Код товара в каталоге, к которому относится состав | kod_nom | ||
Код вещества | Код вещества, входящего в данный состав | kod_vv | ||
Таблица 2.11 — Вещество
Термины | Смысл | Обозначение | Пример значения | |
Код вещества | Код вещества в списке веществ | kod_vv | ||
Название | Название вещества | name_vv | Гидрохлорид калия | |
Таблица 2.12 — Продажа
Термины | Смысл | Обозначение | Пример значения | |
Код продажи | Код продажи в списке продаж | kod_prod | ||
Дата | Дата продажи | date_prod | 12.03.2007 | |
Код контрагента | Код контрагента, которому был продан товар | kod_ka | ||
Код типа цен | Код типа цены, использованной при данной продаже | kod_tp | ||
Таблица 2.13 — Строка продажи
Термины | Смысл | Обозначение | Пример значения | |
Код строки продажи | Код строки продажи в списке строк продаж | kod_spr | ||
Код продажи | Код продажи, в которую входит данная строка | kod_prod | ||
Код номенклатуры | Товар, который был продан | kod_nom | ||
Цена | Цена, по которой был продан данный товар | price_r | 130.90 | |
Количество | Количество данного товара, которое было продано | kolvo | ||
Таблица 2.14 — Поставка
Термины | Смысл | Обозначение | Пример значения | |
Код поставки | Код поставки в списке поставок | kod_post | ||
Дата | Дата поставки | date_post | 12.03.2007 | |
Код контрагента | Код контрагента, у которого был куплен товар | kod_ka | ||
Код типа цен | Код типа цены, использованной при данной поставке | kod_tp | ||
Таблица 2.15 — Строка поставки
Термины | Смысл | Обозначение | Пример значения | |
Код строки поставки | Код строки поставки в списке строк поставок | kod_spo | ||
Код поставки | Код поставки, в которую входит данная строка | kod_post | ||
Код номенклатуры | Товар, который был куплен | kod_nom | ||
Цена | Цена, по которой был куплен данный товар | price_rr | 130.90 | |
Количество | Количество данного товара, которое было куплено | kolvo | ||
Таблица 2.16 — Контрагент
Термины | Смысл | Обозначение | Пример значения | |
Код контрагента | Код контрагента в списке строк контрагентов | kod_ka | ||
Название | Название фирмы-контрагента | name_ka | Яблочко | |
Город | Город (юридический адрес контрагента) | city_ka | Москва | |
Улица | Улица (юридический адрес контрагента) | street_ka | Суворовская | |
Дом | Дом (юридический адрес контрагента) | house_ka | ||
Офис | Офис (юридический адрес контрагента) | office_ka | ||
Телефон | Контактный телефон контрагента | phone_ka | ||
ИНН | Идентификационный номер налогоплательщика | inn_ka | ||
КПП | Код причины постановки на учет | kpp_ka | ||
Таблица 2.17 — Банковский счет
Термины | Смысл | Обозначение | Пример значения | |
Код счета | Уникальный номер счета | kod_sch | ||
Код банка | Код банка, в котором открыт счет | kod_bank | ||
Код контрагента | Код контрагента — владельца счета | kod_ka | ||
Таблица 2.18 — Банк
Термины | Смысл | Обозначение | Пример значения | |
БИК | Банковский идентификационный код | kod_sch | ||
К/с | Корр счет | ks | ||
Название | Название банка | name_bank | Промбанк | |
Город | Город, в котором расположено отделение, в котором открыт счет | city_b | Курск | |
Таблица 2.19 — Магазин
Термины | Смысл | Обозначение | Пример значения | |
Код организации | Код подразделения магазина | kod_org | ||
Название | Название подразделения | name_org | Курское отделение | |
Город | Город, в котором расположено подразделение (юридический адрес) | city | Курск | |
Улица | Улица, на которой расположено подразделение (юридический адрес) | street | Советская | |
Дом | Дом, в котором расположено подразделение (юридический адрес) | house | ||
Офис | Офис, в котором расположено подразделение (юридический адрес) | office | ||
Телефон | Контактный телефон подразделения | phone | ||
ИНН | Идентификационный номер налогоплательщика | inn | ||
КПП | Код причины постановки на учет | kpp | ||
Расчетный счет | Уникальный номер счета | rs | ||
БИК | Банковский идентификационный код | kod_sch | ||
Таблица 2.20 — Оплата
Термины | Смысл | Обозначение | Пример значения | |
Код оплаты | Код оплаты в списке оплат | kod_opl | ||
Код продажи | Код продажи, к которой относится оплата | kod_prod | ||
Код статуса | Код статуса оплаты | kod_st | ||
Таблица 2.21 — Статус оплаты
Термины | Смысл | Обозначение | Пример значения | |
Код статуса | Код статуса в списке статусов | kod_st | ||
Название | Название статуса | name_st | Оплачен | |
2.4 Определения функциональных зависимостей
Ключевые зависимости
Одному коду номенклатуры не могут соответствовать номенклатуры с разными названиями, кодами стран-производителей, кодами производителей, единицами измерения, весом.
Одному коду цены не могут соответствовать цены с разным типом цены, кодом номенклатуры, ценой.
Одному коду типа цен не могут соответствовать цены с разными названиями, кодами валют.
Одному коду валюты не могут соответствовать валюты с разными названиями, курсами.
Одному коду производителя не могут соотвтетствовать производители с разными названиями, адресами — городами, улицами, домами, офисами и телефонами.
Одному коду представителя не могут соответствовать представители с разными названиями, кодами производителя, адресами — городами, улицами, домами, офисами и телефонами.
Одному коду страны не могут соответствовать страны с разными названиями.
Одному коду рекомендаций не могут соответствовать рекомендации к разным номенклатурам, с разными вариантами рекомендаций.
Одному коду варианта рекомендаций не могут соответствовать разные варианты рекомендаций.
Одному коду состава не могут соответствовать составы разных номенклатур, разные вещества.
Одному коду вещества не могут соответствовать вещества с разными названиями.
Одному коду продаж не могут соответствовать продажи с разными датами, участниками-контрагентами и кодами типа цены.
Одному коду строки продаж не могут соответствовать строки разных продаж, с разными номенклатурами, проданными в разном количестве по разным ценам.
Одному коду поставок не могут соответствовать поставки с разными датами, участниками-контрагентами и кодами типа цены.
Одному коду строки поставок не могут соответствовать строки разных поставок, с разными номенклатурами, купленными в разном количестве по разным ценам.
Одному коду контрагента не могут соотвтетствовать контрагенты с разными названиями, адресами — городами, улицами, домами, офисами и телефонами, ИНН и КПП.
Одному коду счета не могут соответствовать разные коды банка и разные коды контрагента.
Одному БИК не могут соответствовать банки с разными названиями и корр. счетами, расположенные в разных городах.
Одному коду подразделения не могут соответствовать подразделения с разными названиями, адресами — городами, улицами, домами, офисами и телефонами, ИНН и КПП, р/с и БИК.
Одному коду оплаты не могут соответствовать разные продажи и разные статусы.
Одному коду статуса не могут соответствовать разные названия статусов.
Ключевые зависимости представлены на рисунке 2.1.
kod_nom->name_nom, kod_str, kod_proiz, ed_izm, ves kod_pr->kod_tp, kod_nom, price kod_tp->name_tp, kod_val kod_val->name_val, kurs kod_proiz->name_proiz, city_pz, street_pz, house_pz, office_pz, phone_pz kod_pred->name_pred, kod_proiz, city_pr, street_pr, house_pr, office_pr, phone_pr kod_str->name_str kod_rek->kod_nom, kod_var kod_var->rek kod_sost->kod_nom, kod_vv kod_vv->name_vv kod_prod->date_prod, kod_ka, kod_tp kod_spr->kod_prod, kod_nom, price_r, kolvo kod_post->date_post, kod_ka, kod_tp kod_spo->kod_post, kod_nom, price_rr, kolvo kod_ka->name_ka, city_ka, street_ka, house_ka, office_ka, phone_ka, inn_ka, kpp_ka kod_sch->kod_bank, kod_ka bik->ks, name_bank, city_b kod_org->name_org, city, street, house, office, phone, inn_org, kpp, rs, bik kod_opl->kod_prod, kod_st kod_st->name_st | |
Рисунок 2.1 — Ключевые зависимости
Неключевые зависимости
Одному коду типа цены на одну номенклатуру может соответствовать только одно значение цены.
Одному названию номенклатуры от определенного производителя может соответствовать только одна единица измерения и вес.
Одному ИНН контрагента может соответствовать только одно название контрагента.
Одному названию валюты может соответстовать только один курс.
Одной номенклатуре в одной продаже может соответствовать только одна цена.
Одной номенклатуре в одной поставке может соответствовать только одна цена.
Неключевые зависимости представлены на рисунке 2.2.
kod_tp, kod_nom->price name_nom, kod_proiz->ed_izm, ves inn_ka->name_ka name_val->kurs kod_prod, kod_nom->price_r kod_post, kod_nom->price_rr | |
Рисунок 2.2 — Неключевые зависимости
Универсальные зависимости
Код цены, код типа цены, код номенклатуры и значение цены определяют запись таблицы «Цена».
Код номенклатуры, название номенклатуры, код страны-производителя, код производителя, единицы измерения и вес определяют запись таблицы «Номенклатура».
Код контрагента, название контрагента, адрес контрагента — город, улица, дом, офис, телефон; ИНН и КПП определяют запись таблицы «Контрагент».
Код валюты, название валюты, курс валюты определяют запись таблицы «Валюта».
Код строки поставок, код поставки, код номенклатуры, цена и количество определяют запись таблицы «Строки поставок».
Код строки продаж, код продажи, код номенклатуры, цена и количество определяют запись таблицы «Строки продаж».
Универсальные зависимости представлены на рисунке 2.3.
kod_pr, kod_tp, kod_nom, price -> * kod_nom, name_nom, kod_str, kod_proiz, ed_izm, ves -> * kod_ka, name_ka, city_ka, street_ka, house_ka, office_ka, phone_ka, inn_ka, kpp_ka -> * kod_val, name_val, kurs -> * kod_spo, kod_post, kod_nom, price_rr, kolvo -> * kod_spr, kod_prod, kod_nom, price_r, kolvo -> * | |
Рисунок 2.3 — Универсальные зависимости
2.5 Синтез схемы базы данных на основании функциональных зависимостей
2.5.1 Построение неизбыточного покрытия
Этапы построения неизбыточного покрытия представлены на рис. 2.4.
1. f=g kod_pr, kod_tp, kod_nom, price -> * Проверяем: f |= kod_pr, kod_tp, kod_nom, price -> * [kod_pr, kod_tp, kod_nom, price]+f = kod_pr, kod_tp, kod_nom, price, name_nom, kod_str, kod_proiz, ed_izm, ves, name_tp, kod_val, name_val, kurs, name_proiz, city_pz, street_pz, house_pz, office_pz, phone_pz, name_str, * Да => g=f 2. f=g kod_spo, kod_post, kod_nom, price_rr, kolvo -> * Проверяем: f |= kod_spo, kod_post, kod_nom, price_rr, kolvo -> * [kod_spo, kod_post, kod_nom, price_rr, kolvo]+f = kod_spo, kod_post, kod_nom, price_rr, kolvo, name_nom, kod_str, kod_proiz, ed_izm, ves, name_proiz, city_pz, street_pz, house_pz, office_pz, phone_pz, name_str, date_post, kod_ka, kod_tp, name_tp, kod_val, name_val, kurs, name_ka, city_ka, street_ka, house_ka, office_ka, phone_ka, inn_ka, kpp_ka, price, * Да => g=f 3. f=g kod_spr, kod_prod, kod_nom, price_r, kolvo -> * Проверяем: f |= kod_spr, kod_prod, kod_nom, price_r, kolvo -> * [kod_spr, kod_prod, kod_nom, price_r, kolvo]+f = kod_spr, kod_prod, kod_nom, price_r, kolvo, name_nom, kod_str, kod_proiz, ed_izm, ves, name_proiz, city_pz, street_pz, house_pz, office_pz, phone_pz, name_str, date_prod, kod_ka, kod_tp, name_tp, kod_val, name_val, kurs, name_ka, city_ka, street_ka, house_ka, office_ka, phone_ka, inn_ka, kpp_ka, price, * Да => g=f | |
Рисунок 2.4 — Этапы построения неизбыточного покрытия
Неизбыточное покрытие представлено на рисунке 2.5.
kod_nom -> name_nom, kod_str, kod_proiz, ed_izm, ves kod_pr -> kod_tp, kod_nom, price kod_tp -> name_tp, kod_val kod_val -> name_val, kurs kod_proiz -> name_proiz, city_pz, street_pz, house_pz, office_pz, phone_pz kod_pred -> name_pred, kod_proiz, city_pr, street_pr, house_pr, office_pr, phone_pr kod_str -> name_str kod_rek -> kod_nom, kod_var kod_var -> rek kod_sost -> kod_nom, kod_vv kod_vv -> name_vv kod_prod -> date_prod, kod_ka, kod_tp kod_spr -> kod_prod, kod_nom, price_r, kolvo kod_post -> date_post, kod_ka, kod_tp kod_spo -> kod_post, kod_nom, price_rr, kolvo kod_ka -> name_ka, city_ka, street_ka, house_ka, office_ka, phone_ka, inn_ka, kpp_ka kod_sch -> kod_bank, kod_ka bik -> ks, name_bank, city_b kod_org -> name_org, city, street, house, office, phone, inn_org, kpp, rs, bik kod_opl -> kod_prod, kod_st kod_st -> name_st kod_tp, kod_nom -> price name_nom, kod_proiz -> ed_izm, ves inn_ka -> name_ka name_val -> kurs kod_prod, kod_nom -> price_r kod_nom, name_nom, kod_str, kod_proiz, ed_izm, ves -> * kod_ka, name_ka, city_ka, street_ka, house_ka, office_ka, phone_ka, inn_ka, kpp_ka -> * kod_val, name_val, kurs -> * | |
Рисунок 2.5 — Неизбыточное покрытие
2.5.2 Построение леворедуцированного покрытия
Этапы построения леворедуцированного покрытия представлены на рисунке 2.6 — 2.7.
1. kod_nom, name_nom, kod_str, kod_proiz, ed_izm, ves -> * 1.1. kod_nom, name_nom, kod_str, kod_proiz, ed_izm, ves -> * Проверяем: g |= kod_nom, kod_str, kod_proiz, ed_izm, ves -> * Да => множество ФЗ изменяется 1.2. kod_nom, kod_str, kod_proiz, ed_izm, ves -> * Проверяем: g |= kod_nom, kod_proiz, ed_izm, ves -> * Да => множество ФЗ изменяется 1.3. kod_nom, kod_proiz, ed_izm, ves -> * Проверяем: g |= kod_nom, ed_izm, ves -> * Да => множество ФЗ изменяется 1.4. kod_nom, ed_izm, ves -> * Проверяем: g |= kod_nom, ves -> * Да => множество ФЗ изменяется 1.5. kod_nom, ves -> * Проверяем: g |= kod_nom -> * Да => множество ФЗ изменяется 1.6. kod_nom, ves -> * Проверяем: g |= kod_nom -> * Да => множество ФЗ изменяется 2. kod_ka, name_ka, city_ka, street_ka, house_ka, office_ka, phone_ka, inn_ka, kpp_ka ->* 2.1. kod_ka, name_ka, city_ka, street_ka, house_ka, office_ka, phone_ka, inn_ka, kpp_ka -> * Проверяем: g |= kod_ka, city_ka, street_ka, house_ka, office_ka, phone_ka, inn_ka, kpp_ka -> * Да => множество ФЗ изменяется | |
Рисунок 2.6 — Этапы построения леворедуцированного покрытия
2.2. kod_ka, city_ka, street_ka, house_ka, office_ka, phone_ka, inn_ka, kpp_ka->* Проверяем: g |= kod_ka, street_ka, house_ka, office_ka, phone_ka, inn_ka, kpp_ka -> * Да => множество ФЗ изменяется 2.3. kod_ka, street_ka, house_ka, office_ka, phone_ka, inn_ka, kpp_ka -> * Проверяем: g |= kod_ka, house_ka, office_ka, phone_ka, inn_ka, kpp_ka -> * Да => множество ФЗ изменяется 2.4. kod_ka, house_ka, office_ka, phone_ka, inn_ka, kpp_ka -> * Проверяем: g |= kod_ka, office_ka, phone_ka, inn_ka, kpp_ka -> * Да => множество ФЗ изменяется 2.5. kod_ka, office_ka, phone_ka, inn_ka, kpp_ka -> * Проверяем: g |= kod_ka, phone_ka, inn_ka, kpp_ka -> * Да => множество ФЗ изменяется 2.6. od_ka, phone_ka, inn_ka, kpp_ka -> * Проверяем: g |= kod_ka, inn_ka, kpp_ka -> * Да => множество ФЗ изменяется 2.7. kod_ka, inn_ka, kpp_ka -> * Проверяем: g |= kod_ka, kpp_ka -> * Да => множество ФЗ изменяется 2.8. kod_ka, kpp_ka -> * Проверяем: g |= kod_ka -> * Да => множество ФЗ изменяется 3. kod_val, name_val, kurs -> * 3.1. kod_val, name_val, kurs -> * Проверяем: g |= kod_val, kurs -> * Да => множество ФЗ изменяется 3.2. kod_val, kurs -> * Проверяем: g |= kod_val -> * Да => множество ФЗ изменяется | |
Рисунок 2.7 — Этапы построения леворедуцированного покрытия
Леворедуцированное покрытие представлено на рисунке 2.7.
kod_nom -> name_nom, kod_str, kod_proiz, ed_izm, ves kod_pr -> kod_tp, kod_nom, price kod_tp -> name_tp, kod_val kod_val -> name_val, kurs kod_proiz -> name_proiz, city_pz, street_pz, house_pz, office_pz, phone_pz kod_pred -> name_pred, kod_proiz, city_pr, street_pr, house_pr, office_pr, phone_pr kod_str -> name_str kod_rek -> kod_nom, kod_var kod_var -> rek kod_sost -> kod_nom, kod_vv kod_vv -> name_vv kod_prod -> date_prod, kod_ka, kod_tp kod_spr -> kod_prod, kod_nom, price_r, kolvo kod_post -> date_post, kod_ka, kod_tp kod_spo -> kod_post, kod_nom, price_rr, kolvo kod_ka -> name_ka, city_ka, street_ka, house_ka, office_ka, phone_ka, inn_ka, kpp_ka kod_sch -> kod_bank, kod_ka bik -> ks, name_bank, city_b kod_org -> name_org, city, street, house, office, phone, inn_org, kpp, rs, bik kod_opl -> kod_prod, kod_st kod_st -> name_st kod_tp, kod_nom -> price name_nom, kod_proiz -> ed_izm, ves inn_ka -> name_ka name_val -> kurs kod_prod, kod_nom -> price_r kod_nom-> * kod_ka -> * kod_val -> * | |
Рисунок 2.7 — Леворедуцированное покрытие
2.5.3 Построение праворедуцированного покрытия
Этапы построения праворедуцированного покрытия представлены на рисунке 2.8.
1. kod_nom -> name_nom, kod_str, kod_proiz, ed_izm, ves 1.1. Если удаляем ed_izm Проверяем: f |= kod_nom -> ed_izm Да => g=f 1.2. Если удаляем ves Проверяем: f |= kod_nom -> ves Да => g=f 2. kod_pr -> kod_tp, kod_nom, price Если удаляем price Проверяем: f |= kod_pr -> price Да => g=f 3. kod_val -> name_val, kurs Если удаляем kurs Проверяем: f |= kod_val -> kurs Да => g=f 4. kod_spr -> kod_prod, kod_nom, price_r, kolvo Если удаляем price_r Проверяем: f |= kod_spr -> price_r Да => g=f 5. kod_spo -> kod_post, kod_nom, price_rr, kolvo Если удаляем price_rr Проверяем: f |= kod_spo -> price_rr Да => g=f 6. kod_ka -> name_ka, city_ka, street_ka, house_ka, office_ka, phone_ka, inn_ka, kpp_ka Если удаляем name_ka Проверяем: f |= kod_ka -> name_ka Да => g=f | |
Рисунок 2.8 — Этапы построения праворедуцированного покрытия
Праворедуцированное покрытие представлено на рисунке 2.9.
kod_nom -> name_nom, kod_str, kod_proiz kod_pr -> kod_tp, kod_nom kod_tp -> name_tp, kod_val kod_val -> name_val kod_proiz -> name_proiz, city_pz, street_pz, house_pz, office_pz, phone_pz kod_pred -> name_pred, kod_proiz, city_pr, street_pr, house_pr, office_pr, phone_pr kod_str -> name_str kod_rek -> kod_nom, kod_var kod_var -> rek kod_sost -> kod_nom, kod_vv kod_vv -> name_vv kod_prod -> date_prod, kod_ka, kod_tp kod_spr -> kod_prod, kod_nom, kolvo kod_post -> date_post, kod_ka, kod_tp kod_spo -> kod_post, kod_nom, kolvo kod_ka -> city_ka, street_ka, house_ka, office_ka, phone_ka, inn_ka, kpp_ka kod_sch -> kod_bank, kod_ka bik -> ks, name_bank, city_b kod_org -> name_org, city, street, house, office, phone, inn_org, kpp, rs, bik kod_opl -> kod_prod, kod_st kod_st -> name_st kod_tp, kod_nom -> price name_nom, kod_proiz -> ed_izm, ves inn_ka -> name_ka name_val -> kurs kod_prod, kod_nom -> price_r kod_post, kod_nom -> price_rr kod_nom -> * kod_ka -> * kod_val -> * | |
Рисунок 2.9 — Праворедуцированное покрытие
2.5.4 Построение классов эквивалентности
Этапы построения классов эквивалентности представлены на рисунке 2.10- 2.11.
1. Ef (kod_nom): kod_nom -> name_nom, kod_str, kod_proiz kod_nom -> * 2. Ef (kod_pr): kod_pr -> kod_tp, kod_nom 3. Ef (kod_tp): kod_tp -> name_tp, kod_val 4. Ef (kod_val): kod_val -> name_val; kod_val -> * 5. Ef (kod_proiz): kod_proiz -> name_proiz, city_pz, street_pz, house_pz, office_pz, phone_pz 6. Ef (kod_pred): kod_pred -> name_pred, kod_proiz, city_pr, street_pr, house_pr, office_pr, phone_pr 7. Ef (kod_str): kod_str -> name_str 8. Ef (kod_rek): kod_rek -> kod_nom, kod_var 9. Ef (kod_var): kod_var -> rek 10. Ef (kod_sost): kod_sost -> kod_nom, kod_vv 11. Ef (kod_vv): kod_vv -> name_vv 12. Ef (kod_prod): kod_prod -> date_prod, kod_ka, kod_tp 13. Ef (kod_spr): kod_spr -> kod_prod, kod_nom, kolvo 14. Ef (kod_post): kod_post -> date_post, kod_ka, kod_tp 15. Ef (kod_spo): kod_spo -> kod_post, kod_nom, kolvo 16. Ef (kod_ka): kod_ka -> city_ka, street_ka, house_ka, office_ka, phone_ka, inn_ka, kpp_ka kod_ka -> * 17. Ef (kod_sch): kod_sch -> kod_bank, kod_ka | |
Рисунок 2.10 — Этапы построения классов эквивалентности
18. Ef (bik): bik -> ks, name_bank, city_b 19. Ef (kod_org): kod_org -> name_org, city, street, house, office, phone, inn_org, kpp, rs, bik 20. Ef (kod_opl): kod_opl -> kod_prod, kod_st 21. Ef (kod_st): kod_st -> name_st 22. Ef (kod_tp, kod_nom): kod_tp, kod_nom -> price 23. Ef (name_nom, kod_proiz): name_nom, kod_proiz -> ed_izm, ves 24. Ef (inn_ka): inn_ka -> name_ka 25. Ef (name_val): name_val -> kurs 26. Ef (kod_prod, kod_nom): kod_prod, kod_nom -> price_r 27. Ef (kod_post, kod_nom): kod_post, kod_nom -> price_rr | |
Рисунок 2.11 — Этапы построения классов эквивалентности
2.5.5 Построение редуцированного минимального кольцевого покрытия на основе прямой функциональной определяемости
Этапы построения минимального покрытия на основе прямой функциональной определяемости представлены на рисунке 2.11.
1. Проверка: f Ef (kod_nom) |= kod_nom -> kod_nom? Да => заменяем kod_nom -> name_nom, kod_str, kod_proiz и kod_nom -> * на kod_nom -> name_nom, kod_str, kod_proiz, *. 2. Проверка: f Ef (kod_val) |= kod_val -> kod_val? Да => заменяем kod_val -> name_val и kod_val -> * на kod_val -> name_val, *. 3. Проверка: f Ef (kod_ka) |= kod_ka -> kod_ka? Да => заменяем kod_ka -> city_ka, street_ka, house_ka, office_ka, phone_ka, inn_ka, kpp_ka и kod_ka -> * на kod_ka -> city_ka, street_ka, house_ka, office_ka, phone_ka, inn_ka, kpp_ka, *. | |
Рисунок 2.11 — Этапы построения минимального покрытия на основе прямой функциональной определяемости
Редуцированное минимальное покрытие представлено на рисунке 2.12.
kod_pr -> kod_tp, kod_nom kod_tp -> name_tp, kod_val kod_proiz -> name_proiz, city_pz, street_pz, house_pz, office_pz, phone_pz kod_pred -> name_pred, kod_proiz, city_pr, street_pr, house_pr, office_pr, phone_pr kod_str -> name_str kod_rek -> kod_nom, kod_var kod_var -> rek kod_sost -> kod_nom, kod_vv kod_vv -> name_vv kod_prod -> date_prod, kod_ka, kod_tp kod_spr -> kod_prod, kod_nom, kolvo kod_post -> date_post, kod_ka, kod_tp kod_spo -> kod_post, kod_nom, kolvo kod_sch -> kod_bank, kod_ka bik -> ks, name_bank, city_b kod_org -> name_org, city, street, house, office, phone, inn_org, kpp, rs, bik kod_opl -> kod_prod, kod_st kod_st -> name_st kod_tp, kod_nom -> price name_nom, kod_proiz -> ed_izm, ves inn_ka -> name_ka name_val -> kurs kod_prod, kod_nom -> price_r kod_post, kod_nom -> price_rr kod_nom -> name_nom, kod_str, kod_proiz, * kod_val -> name_val, * kod_ka -> city_ka, street_ka, house_ka, office_ka, phone_ka, inn_ka, kpp_ka, * | |
Рисунок 2.12 — Редуцированное минимальное покрытие
Построение редуцированного минимального кольцевого покрытия
Определение CF-зависимостей по классам эквивалентности
Построение кольцевого покрытия
Минимальное кольцевое покрытие представлено на рисунке 2.13.
(kod_pr;) -> kod_tp, kod_nom (kod_tp;) -> name_tp, kod_val (kod_proiz;) -> name_proiz, city_pz, street_pz, house_pz, office_pz, phone_pz (kod_pred;) -> name_pred, kod_proiz, city_pr, street_pr, house_pr, office_pr, phone_pr (kod_str;) -> name_str (kod_rek;) -> kod_nom, kod_var (kod_var;) -> rek (kod_sost;) -> kod_nom, kod_vv (kod_vv;) -> name_vv (kod_prod;) -> date_prod, kod_ka, kod_tp (kod_spr;) -> kod_prod, kod_nom, kolvo (kod_post;) -> date_post, kod_ka, kod_tp (kod_spo;) -> kod_post, kod_nom, kolvo (kod_sch;) -> kod_bank, kod_ka (bik;) -> ks, name_bank, city_b (kod_org;) -> name_org, city, street, house, office, phone, inn_org, kpp, rs, bik (kod_opl;) -> kod_prod, kod_st (kod_st;) -> name_st (kod_tp, kod_nom;) -> price (name_nom, kod_proiz;) -> ed_izm, ves (inn_ka;) -> name_ka (name_val;) -> kurs (kod_prod, kod_nom;) -> price_r (kod_post, kod_nom;) -> price_rr (kod_nom;) -> name_nom, kod_str, kod_proiz (kod_val;) -> name_val (kod_ka;) -> city_ka, street_ka, house_ka, office_ka, phone_ka, inn_ka, kpp_ka | |
Рисунок 2.13 — Минимальное кольцевое покрытие
Получение кольцевого минимального редуцированного покрытия
Естественное характеристическое множество для кольцевого покрытия представлено на рисунке 2.14.
f (C): kod_pr -> kod_tp, kod_nom kod_tp -> name_tp, kod_val kod_proiz -> name_proiz, city_pz, street_pz, house_pz, office_pz, phone_pz kod_pred -> name_pred, kod_proiz, city_pr, street_pr, house_pr, office_pr, phone_pr kod_str -> name_str kod_rek -> kod_nom, kod_var kod_var -> rek kod_sost -> kod_nom, kod_vv kod_vv -> name_vv kod_prod -> date_prod, kod_ka, kod_tp kod_spr -> kod_prod, kod_nom, kolvo kod_post -> date_post, kod_ka, kod_tp kod_spo -> kod_post, kod_nom, kolvo kod_sch -> kod_bank, kod_ka bik -> ks, name_bank, city_b kod_org -> name_org, city, street, house, office, phone, inn_org, kpp, rs, bik kod_opl -> kod_prod, kod_st kod_st -> name_st kod_tp, kod_nom -> price name_nom, kod_proiz -> ed_izm, ves inn_ka -> name_ka name_val -> kurs kod_prod, kod_nom -> price_r kod_post, kod_nom -> price_rr kod_nom -> name_nom, kod_str, kod_proiz kod_val -> name_val kod_ka -> city_ka, street_ka, house_ka, office_ka, phone_ka, inn_ka, kpp_ka | |
Рисунок 2.14 — Естественное характеристическое множество
для кольцевого покрытия
Минимальное редуцированное кольцевое покрытие представлено на рисунке 2.15.
C (kod_pr;) -> kod_tp, kod_nom (kod_tp;) -> name_tp, kod_val (kod_proiz;) -> name_proiz, city_pz, street_pz, house_pz, office_pz, phone_pz (kod_pred;) -> name_pred, kod_proiz, city_pr, street_pr, house_pr, office_pr, phone_pr (kod_str;) -> name_str (kod_rek;) -> kod_nom, kod_var (kod_var;) -> rek (kod_sost;) -> kod_nom, kod_vv (kod_vv;) -> name_vv (kod_prod;) -> date_prod, kod_ka, kod_tp (kod_spr;) -> kod_prod, kod_nom, kolvo (kod_post;) -> date_post, kod_ka, kod_tp (kod_spo;) -> kod_post, kod_nom, kolvo (kod_sch;) -> kod_bank, kod_ka (bik;) -> ks, name_bank, city_b (kod_org;) -> name_org, city, street, house, office, phone, inn_org, kpp, rs, bik (kod_opl;) -> kod_prod, kod_st (kod_st;) -> name_st (kod_tp, kod_nom;) -> price (name_nom, kod_proiz;) -> ed_izm, ves (inn_ka;) -> name_ka (name_val;) -> kurs (kod_prod, kod_nom;) -> price_r (kod_post, kod_nom;) -> price_rr (kod_nom;) -> name_nom, kod_str, kod_proiz (kod_val;) -> name_val (kod_ka;) -> city_ka, street_ka, house_ka, office_ka, phone_ka, inn_ka, kpp_ka | |
Рисунок 2.15 — Минимальное редуцированное кольцевое покрытие
Естественное характеристическое множество представлено на рисунке 2.16.
R0 = (kod_pr, kod_tp, kod_nom) K0 = { kod_pr } R1 = (kod_tp, name_tp, kod_val) K1 = { kod_tp } R2 = (kod_proiz, name_proiz, city_pz, street_pz, house_pz, office_pz, phone_pz) K2 = { kod_proiz } R3 = (kod_pred, name_pred, kod_proiz, city_pr, street_pr, house_pr, office_pr, phone_pr) K3 = { kod_pred } R4 = (kod_str, name_str) K4 = { kod_str } R5 = (kod_rek, kod_nom, kod_var) K5 = { kod_rek } R6 = (kod_var, rek) K6 = { kod_var } R7 = (kod_sost, kod_nom, kod_vv) K7 = { kod_sost } R8 = (kod_vv, name_vv) K8 = { kod_vv } R9 = (kod_prod, date_prod, kod_ka, kod_tp) K9 = { kod_prod } R10 = (kod_spr, kod_prod, kod_nom, kolvo) K10 = { kod_spr } R11 = (kod_post, date_post, kod_ka, kod_tp) K11 = { kod_post } R12 = (kod_spo, kod_post, kod_nom, kolvo) K12 = { kod_spo } R13 = (kod_sch, kod_bank, kod_ka) K13 = { kod_sch } R14 = (bik, ks, name_bank, city_b) K14 = { bik } R15 = (kod_org, name_org, city, street, house, office, phone, inn_org, kpp, rs, bik) K15 = { kod_org } R16 = (kod_opl, kod_prod, kod_st) K16 = { kod_opl } R17 = (kod_st, name_st) K17 = { kod_st } R18 = (kod_tp, kod_nom, price) K18 = { kod_tp, kod_nom } R19 = (name_nom, kod_proiz, ed_izm, ves) K19 = { name_nom, kod_proiz } R20 = (inn_ka, name_ka) K20 = { inn_ka } R21 = (name_val, kurs) K21 = { name_val } R22 = (kod_prod, kod_nom, price_r) K22 = { kod_prod, kod_nom } R23 = (kod_post, kod_nom, price_rr) K23 = { kod_post, kod_nom } R24 = (kod_nom, name_nom, kod_str, kod_proiz) K24 = { kod_nom } R25 = (kod_val, name_val) K25 = { kod_val } R26 = (kod_ka, city_ka, street_ka, house_ka, office_ka, phone_ka, inn_ka, kpp_ka) K26 = { kod_ka } | |
Рисунок 2.16 — Естественное характеристическое множество
2.6 Построение запросов на SQL
2.6.1 Запрос на выборку
2.6.1.1 Словесная формулировка запроса
Необходимо вывести название косметики фирмы «Марон Глясе», которая должна быть произведена 12.02.2007 года, в России, стоимость которой менее 1000, при этом закупочная цена должна быть указана в долларах США.
Выполняется 6 условий:
— фирма «Марон Глясе»
— произведена 12.02.2007 года
— в России
— стоимость < 1000
— цена закупочная
— в $ США
2.6.2.1 Текст запроса на языке SQL
Текст запроса на языке SQL представлен на рисунке 2.17.
Рисунок 2.17 — Текст запроса на языке SQL
2.6.1.3 Исходное дерево запроса
Исходное дерево для запроса представлено на рисунке 2.18.
Рисунок 2.18- Исходное дерево запроса
2.6.1.4 Расчет сложности запроса
Расчет сложности исходного запроса приведен ниже.
Расчет сложности исходного запроса приведен ниже.
(2.1)
где — результат естественного соединения таблиц;
— таблицы, участвующие в соединении;
— операция естественного соединения.
(2.2)
2.3)
где — число записей в таблице ;
— число записей в таблице С;
— число записей в таблице O;
— число различных значений в столбце табл.R24;
— число различных значений в столбце табл.R4.
.
(2.4)
(2.5)
где — число блоков, записанных в таблице ;
— длина одной записи таблицы в блоках;
— длина одной записи таблицы в байтах;
— размер одного блока.
Очевидно, что
(2.6)
где — объем в байтах поля ;
.
.
.
.
(2.7)
. (2.8)
.
Очевидно, что
(2.9)
.
.
.
(2.10)
. (2.11)
.
Очевидно, что
(2.12)
.
.
.
(2.13)
. (2.14)
.
Очевидно, что
(2.15)
.
.
.
(2.16)
. (2.17)
.
Очевидно, что
(2.18)
.
.
.
(2.19)
где — операция селекции с логической формулой .
Формула имеет вид:
F= R1.name_tp = «Закупочная» and R25.name.val = «USD» and R11. date_post = «12.02.2007» and R23. price_rr > 25 and R24 name. nom = «Марон Глясе» and R4 name_str «Россия»
(2.21)
.
Так как операция селекции не изменяет структуру таблицы, то
.
Так как операция проекции располагается последней, то ее не учитывают при расчете сложности запроса.
Окончательно имеем:
(2.22)
.
2.6.1.5 Оптимизированное дерево запроса на основании операции селекции
Оптимизированное дерево для запроса представлено на рисунке 2.19
Рисунок 2.19 — Оптимизированное дерево запроса
Текст оптимизированного запроса представлен на рисунке 2.30
Рисунок 2.20
2.6.1.6 Расчет сложности оптимизированного запроса на основании селекции
Расчет сложности оптимизированного запроса на основании селекции приведён ниже.
(2.23)
где — операция селекции с логической формулой .
Формула имеет вид:
(2.24)
(2.25)
.
Так как операция селекции не изменяет структуру таблицы, то
.
(2.26)
где — операция селекции с логической формулой .
Формула имеет вид:
(2.27)
(2.28)
.
Так как операция селекции не изменяет структуру таблицы, то
.
(2.29)
где — результат естественного соединения таблиц;
— таблицы, участвующие в соединении;
— операция естественного соединения.
(2.30)
(2.31) ,
.
(2.32)
(2.33)
где — число блоков, записанных в таблице ;
— длина одной записи таблицы в блоках;
— длина одной записи таблицы в байтах;
— размер одного блока.
Очевидно, что
(2.34)
где — объем в байтах поля ;
.
.
.
.
(2.35)
где — операция селекции с логической формулой .
Формула имеет вид:
(2.36)
(2.37)
.
Так как операция селекции не изменяет структуру таблицы, то
.
(2.38)
(2.39)
.
Очевидно, что
(2.40)
.
.
.
(2.41)
где — операция селекции с логической формулой .
Формула имеет вид:
(2.42)
(2.43)
.
Так как операция селекции не изменяет структуру таблицы, то
.
(2.44)
,
(2.36)
.
Очевидно, что
(2.45)
.
.
.
(2.46)
где — операция селекции с логической формулой .
Формула имеет вид:
(2.47)
(2.48)
.
Так как операция селекции не изменяет структуру таблицы, то
.
(2.49)
(2.50)
.
Очевидно, что
(2.51)
.
.
.
(2.52)
где — операция селекции с логической формулой .
Формула имеет вид:
(2.53)
(2.54)
.
Так как операция селекции не изменяет структуру таблицы, то
.
(2.55)
(2.56)
.
Очевидно, что
(2.57)
.
.
.
Так как операция проекции располагается последней, то ее не учитывают при расчете сложности запроса.
Окончательно имеем:
(2.58)
.
2.6.1.7 Оптимизированное дерево запроса на основании операции проекции
Оптимизированное дерево запроса на основании операции проекции представлено на рисунке 2.21.
Рисунок 2.21 — Оптимизированное дерево запроса на основании операции проекции
2.6.1.8 Расчет сложности запроса
Расчет сложности оптимизированного запроса приведен ниже.
(2.59)
(2.60) где — операция селекции с .
(2.61)
(2.62)
.
Так как операция селекции не изменяет структуру таблицы, то
.
(2.63)
(2.64) где — операция селекции с .
(2.65)
(2.66)
.
Так как операция селекции не изменяет структуру таблицы, то
.
(2.67)
где — результат естественного соединения таблиц;
— таблицы, участвующие в соединении;
— операция естественного соединения.
(2.68)
(2.69)
.
(2.70)
(2.71)
где — число блоков, записанных в таблице ;
— длина одной записи таблицы в блоках;
— длина одной записи таблицы в байтах;
— размер одного блока.
Очевидно, что
(2.72)
— объем в байтах поля ;
.
.
.
.
(2.73)
(2.74)
(2.75)
где — операция селекции с .
(2.76)
(2.77)
.
Так как операция селекции не изменяет структуру таблицы, то
.
(2.78)
(2.79)
.
Очевидно, что
(2.80)
.
.
.
(2.81)
(2.82)
(2.83) где — операция селекции с .
(2.84)
,
(2.85)
.
Так как операция селекции не изменяет структуру таблицы, то
.
(2.86)
(2.87)
.
Очевидно, что
(2.37)
.
.
.
(2.88)
(2.89)
(2.90) где — операция селекции с .
(2.91)
(2.92)
.
Так как операция селекции не изменяет структуру таблицы, то
.
(2.93)
(2.94)
.
Очевидно, что
(2.95)
.
.
.
(2.96)
(2.97)
(2.44) где — операция селекции с .
(2.98)
(2.99)
.
Так как операция селекции не изменяет структуру таблицы, то
.
(2.100)
(2.101)
.
Очевидно, что
(2.102)
.
.
.
Так как операция проекции располагается последней, то ее не учитывают при расчете сложности запроса.
Окончательно имеем:
(2.103)
.
Заключение
В ходе выполнения курсовой работы была достигнута цель работы — проектирование базы данных магазина косметики.
Для достижения цели был решен ряд задач: составление описания предметной области; составление словаря понятий и терминов; построение исходной модели (ER-диаграммы) базы данных; определение функциональных зависимостей; синтез схемы базы данных на основании функциональных зависимостей; построение оптимизированной концептуальной модели; построение запросов на выборку.
Библиографический список
1.Атре, Ш., Структурный подход к организации баз данных. / [Текст]: Атре, Ш. — М.: Финансы и статистика, 1983. — 320 с.
2.Бойко, В.В., Проектирование баз данных информационных систем. / [Текст]: Бойко, В.В., Савинков, В.М., — М.: Финансы и статистика, 1989. — 351 с.
3. Гарсия-Молина, Гектор, Ульман, Джеффри, Д., Уидом, Дженнифер Системы баз данных. Полный курс.: Пер. с англ. — М.: Издательский дом «Вильямс», 2003. — 188 с.: ил.
4. Дейт, К., Руководство по реляционной СУБД DB2. / [Текст]: Дейт, К. — М.: Финансы и статистика, 1988. — 320 с.
5. Джексон, Г., Проектирование реляционных баз данных для использования с микроЭВМ. / [Текст]: Джексон, Г., -М.: Мир, 1991. — 252 с.
6. Кириллов, В.В., Структуризованный язык запросов (SQL). / [Текст]: Кириллов, В.В., — СПб.: ИТМО, 1994. — 80 с.
7. Мартин, Дж., Планирование развития автоматизированных систем. / [Текст]: Мартин, Дж., — М.: Финансы и статистика, 1984. — 196 с.
8.Мейер, М., Теория реляционных баз данных. / [Текст]: Мейер, М., — М.: Мир, 1987. — 608 с.
9.Тиори, Т., Проектирование структур баз данных. / [Текст]: Тиори, Т., Фрай, Дж., В 2 кн., — М.: Мир, 1985. Кн. 1. — 287 с.: Кн. 2. — 320 с.
Приложение А
А.1 Код, связанный с событием Click кнопок «След.» и «Пред.»
* Next IF NOT EOF ()
SKIP
IF EOF ()
GO BOTTOM
ЕNDIF
ENDIF
THISFORM.Refresh
THISFORM.Buttons
* Previous IF NOT BOF ()
SKIP — 1
IF BОF ()
G0 TOP
EHDIF
ЕNDIF
THISFORM.Refresh:
THISFORM.Buttons
А.2 Код, связанный с событием Click кнопки «Поиск»
LastRecordNo = RECNO ()
ON KEY LABEL ENTER KEYBOARD CHR (23)
ON KEY LABEL RIGHTMOUSE KEYBOARD CHR (23)
BROWSE NOMODIFY NOAPPEND
ON KEY LABEL ENTER
ON KEY LABEL RIGHTMOUSE
IF LASTKEY () = 27
GO (THISFORM.LastRecordNo)
ENDIF
THISFORM.Refresh
THISFORM.Buttons
А.3 Код, связанный с событием Click кнопки «Изменить»
Editing = .T.
THISFORM.EnableAll
THISFORM.ButtonsOff
THISFORM.cmdSave.Enabled = .T.
THISFORM.cmdCanc.Enabled = .T.
THISFORM.txtCustCode.Enabled = .F.
THISFORM.txtLastName.SetFocus
А.4 Код, связанный с событием Click кнопки «Добавить»
THISFORM.LastRecordNo = RECNO ()
THISFORM.Adding = .T.
APPEND BLANK
THISFORM.Refresh
Editing = .T.
THISFORM.Enableall
THISFORM.Buttonsoff
THISFORM.cmdSave.Enabled = .T.
THISFORM.cmdCanc.Enabled = .T.
THISFORM.txtCustCode.SetFocus
А.5 Код, связанный с событием Click кнопки «Сохранить»
=TableUpdate ()
Editing=.F.
THISFORM.Adding=.F.
THISFORM.DisableAll
THISFORM.ButtonsOn
THISFORM.Buttons
THISFORM.cmdSave.Enabled=.F.
THISFORM.cmdCanc.Enabled=.F.
THISFORM.cmdNext.SetFocus
А.6 Код, связанный с событием Click кнопки «Отмена»
=TableRevert ()
IF THISFORM. Adding
GO (THISFORM.LastRecordNo)
ENDIF
Editing=.F.
THISFORM.Adding=.F.
THISFORM.Refresh
THISFORM.DisableAll
THISFORM.ButtonsOn
THISFORM.Buttons
THISFORM.cmdSave.Enabled=.F.
THISFORM.cmdCanc.Enabled=.F.
THISFORM.cmdNext.SetFocus
А.7 Код, связанный с событием Click кнопки «Удалить»
IF MESSAGEBOX («Удалить эту запись», 4 + 32 + 256) = 6
DELETE NEXT 1
BLANK
SET DELETED ON
GO TOP
THISFORM.Refresh
ENDIF
А.8 Код, связанный с событием Click кнопки «Выход»
RELEASE THISFORM
Описание формы
При создании формы использовались компоненты: Label, TextBox, Command. Каждая кнопка Command имеет событие Сlick. Обработчики событий Click для кнопок представлены в Приложении А.