Проектирование базы данных магазина косметики
Требования пользователя к программному изделию. Определения функциональных зависимостей. Ключевые, неключевые и универсальные зависимости. Синтез схемы базы данных на основании функциональных зависимостей. Построение классов эквивалентности и запросов.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 30.08.2012 |
Размер файла | 484,7 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Содержание
Определения
Обозначения и сокращения
Введение
1. Техническое задание
1.1 Основание для разработки
1.2 Назначение разработки
1.3 Рассмотренные альтернативы
1.4 Стандарты
1.5 Требования пользователя к программному изделию
1.6 Описание прецедентов
2. Технический проект
2.1 Модель предметной области
2.1.1 Словарь предметной области
2.1.2 Неформальное описание предметной области
3. ER-диаграмма
4. Определения функциональных зависимостей
4.1 Ключевые зависимости
4.2 Неключевые зависимости
4.3 Универсальные зависимости
5. Синтез схемы базы данных на основании функциональных зависимостей
5.1 Построение неизбыточного покрытия
5.2 Построение леворедуцированного покрытия
5.3 Построение праворедуцированного покрытия
5.4 Построение классов эквивалентности
5.5 Построение минимального покрытия на основе прямой функциональной определяемости
5.6 Построение редуцированного минимального кольцевого покрытия
6. Построение запросов
6.1 Построение первого запроса
6.2 Построение второго запроса
6.3 Расчет сложности оптимизированного запроса
Заключение
Обозначения и сокращения
ИНН: Идентификационный номер налогоплательщика.
КПП: Код причины постановки на учет в налоговых органах.
БИК: Банковский идентификационный код.
к/с: Корреспондентный счет.
р/с: Расчетный счет.
Введение
Необходимо спроектировать базу данных для учета товара в магазине косметики. Также целью данной работы является ознакомление с основными принципами построения, использования и оптимизации реляционных баз данных.
Актуальность темы работы обусловлена тем, что в последние годы потребность в базах данных различной архитектуры в нашей стране значительно возросла. База данных (БД) представляет собой организованную структуру, используемую для хранения данных, т.е. любых сведений о явлениях, процессах, действиях и т.д.
Компьютерные базы данных, значительно более компактные чем бумажные (раньше в научных библиотеках каталоги занимали целые шкафы, теперь же помещаются на компакт-диске), удобные в работе и позволяющие достичь более высоких скоростей обработки информации, завоевывают популярность.
В зависимости от рода деятельности компании формируются ее требования к используемой базе данных.
1.
1.Техническое задание
1.1 Основание для разработки
Основанием для разработки программы является задание на курсовую работу по предмету «Базы данных».
1.2 Назначение разработки
Необходимо разработать базу данных, использующуюся при работе магазина косметики. Основанием для разработки послужило задание на курсовое проектирование по дисциплине "Базы данных".
1.3 Рассмотренные альтернативы
Существуют другие программы для учета товара в магазинах косметики, однако данный проект разрабатывается с учетом внутренних особенностей данного университета.
1.4 Стандарты
Данная работа оформлена в соответствии со стандартом СТУ 04.-02.-030.-2010.
1.5 Требования пользователя к программному изделию
Пользователю необходимо предоставить возможность удобного учета товара, а также получения информации о ней.
1.6
1.6 Описание прецедентов
Данная программа позволяет узнать сколько магазин реализует косметики, закупает ее по одной цене и продавет по другой.
2
2. Технический проект
2.1 Модель предметной области
2.1.1 Словарь предметной области
Номенктатура, цена, тип цены, валюта, производитель, представитель, страна, рекомендация, вариант рекомендация, состав, вещество, продажа, строка продажи, поставка, строка поставки, контрагент, банковский счет, банк, магазин, оплата, статус оплаты.
Словарь понятий и терминов для сущности «Номенклатура» преведен в таблице 2.1.
Таблица 2.1 - Номенклатура
Термины |
Смысл |
Обозначение |
Пример значения |
|
Код номенклатуры |
Код товара по каталогу |
kod_nom |
16 |
|
Название номенклатуры |
Название товара в каталоге |
name_nom |
Помада Марон Глясе |
|
Код страны |
Код страны-производителя данного товара |
kod_str |
3 |
|
Код производителя |
Код фирмы-производителя данного товара |
kod_proiz |
5 |
|
Единица измерения |
Единицы, в которых измеряется количество данного товара |
ed_izm |
шт |
|
Вес |
Вес единицы данного товара |
ves |
0.12 |
Словарь понятий и терминов для сущности «Цена» приведен в таблице 2.2.
Таблица 2.2 - Цена
Термины |
Смысл |
Обозначение |
Пример значения |
|
Код цены |
Код цены в списке цен |
kod_pr |
19 |
|
Код типа цены |
Код типа цены |
kod_tp |
2 |
|
Код номенклатуры |
Код товара, цена на который указывается, по каталогу |
kod_nom |
23 |
|
Цена |
Цена на данный товар |
price |
230.0 |
Словарь понятий и терминов для сущности «Тип цены» приведен в таблице 2.3.
Таблица 2.3 - Тип цены
Термины |
Смысл |
Обозначение |
Пример значения |
|
Код типа цены |
Код типа цены в списке типов цен |
kod_tp |
2 |
|
Название типа цены |
Название типа цены |
name_tp |
Закупочная |
|
Код валюты |
Код валюты, используемой для данного типа цены |
kod_val |
3 |
Словарь понятий и терминов для сущности «Валюта» приведен в таблице 2.4.
Таблица 2.4 - Валюта
Термины |
Смысл |
Обозначение |
Пример значения |
|
Код валюты |
Код валюты |
kod_val |
4 |
|
Название валюты |
Общепринятое название для данной валюты |
name_val |
USD |
|
Курс |
Курс данной валюты по отношению к рублю |
kurs |
23.80 |
Словарь понятий и терминов для сущности «Производитель» приведен в таблице 2.5.
Таблица 2.5 - Производитель
Термины |
Смысл |
Обозначение |
Пример значения |
|
Код производителя |
Код производителя в списке производителей |
kod_proiz |
9 |
|
Название |
Название производителя |
name_proiz |
GreenMama |
|
Город |
Город |
city_pz |
Москва |
|
Улица |
Улица |
street_pz |
Суворовская |
|
Дом |
Дом |
house_pz |
25 |
|
Офис |
Офис |
office_pz |
17 |
|
Телефон |
Тел.производителя |
phone_pz |
89103121111 |
Словарь понятий и терминов для сущности «Представитель» приведен в таблице 2.6.
Таблица 2.6 - Представитель
Термины |
Смысл |
Обозначение |
Пример значения |
|
Код представителя |
Код представителя в списке представителей |
kod_pred |
9 |
|
Название |
Название представителя |
name_pred |
Солнышко |
|
Код производителя |
Код производителя в списке производителей |
kod_proiz |
9 |
|
Город |
Город (юридический адрес представителя) |
city_pr |
Москва |
|
Улица |
Улица (юридический адрес представителя) |
street_pr |
Суворовская |
|
Дом |
Дом (юридический адрес представителя) |
house_pr |
25 |
|
Офис |
Офис (юридический адрес представителя) |
office_pr |
17 |
|
Телефон |
Контактный телефон производителя |
phone_pr |
89103121111 |
Словарь понятий и терминов для сущности «Страна» приведен в таблице 2.7.
Таблица 2.7 - Страна
Термины |
Смысл |
Обозначение |
Пример значения |
|
Код страны |
Код страны в списке стран |
kod_str |
9 |
|
Название |
Название страны |
name_str |
Россия |
Словарь понятий и терминов для сущности «Рекомендация» приведен в таблице 2.8.
Таблица 2.8 - Рекомендация
Термины |
Смысл |
Обозначение |
Пример значения |
|
Код рекомендации |
Код рекомендации в списке рекомендаций |
kod_rek |
5 |
|
Код номенклатуры |
Код товара в каталоге, к которому относится рекомендация |
kod_nom |
34 |
|
Код варианта |
Код варианта рекомендации |
kod_var |
8 |
Словарь понятий и терминов для сущности «Вариант рекомендации» приведен в таблице 2.9.
Таблица 2.9 - Вариант рекомендации
Термины |
Смысл |
Обозначение |
Пример значения |
|
Код варианта рекомендации |
Код варианта рекомендации в списке вариантов рекомендаций |
kod_var |
6 |
|
Рекомендация |
Суть рекомендации |
rek |
Для жирной кожи |
Словарь понятий и терминов для сущности «Состав» приведен в таблице 2.10.
Таблица 2.10 - Состав
Термины |
Смысл |
Обозначение |
Пример значения |
|
Код состава |
Код состава в списке составов |
kod_sost |
4 |
|
Код номенклатуры |
Код товара в каталоге, к которому относится состав |
kod_nom |
22 |
|
Код вещества |
Код вещества, входящего в данный состав |
kod_vv |
14 |
Словарь понятий и терминов для сущности «Вещество» приведен в таблице 2.11.
Таблица 2.11 - Вещество
Термины |
Смысл |
Обозначение |
Пример значения |
|
Код вещества |
Код вещества в списке веществ |
kod_vv |
3 |
|
Название |
Название вещества |
name_vv |
Гидрохлорид калия |
Словарь понятий и терминов для сущности «Продажа» приведен в таблице 2.12.
Таблица 2.12 - Продажа
Термины |
Смысл |
Обозначение |
Пример значения |
|
Код продажи |
Код продажи в списке продаж |
kod_prod |
150 |
|
Дата |
Дата продажи |
date_prod |
12.03.2007 |
|
Код контрагента |
Код контрагента, которому был продан товар |
kod_ka |
12 |
|
Код типа цен |
Код типа цены, использованной при данной продаже |
kod_tp |
2 |
Словарь понятий и терминов для сущности «Строка продажи» приведен в таблице 2.13.
Таблица 2.13 - Строка продажи
Термины |
Смысл |
Обозначение |
Пример значения |
|
Код строки продажи |
Код строки продажи в списке строк продаж |
kod_spr |
108 |
|
Код продажи |
Код продажи, в которую входит данная строка |
kod_prod |
140 |
|
Код номенклатуры |
Товар, который был продан |
kod_nom |
9 |
|
Цена |
Цена, по которой был продан данный товар |
price_r |
130.90 |
|
Количество |
Количество данного товара, которое было продано |
kolvo |
1 |
Словарь понятий и терминов для сущности «Поставка» приведен в таблице 2.14.
Таблица 2.14 - Поставка
Термины |
Смысл |
Обозначение |
Пример значения |
|
Код поставки |
Код поставки в списке поставок |
kod_post |
150 |
|
Дата |
Дата поставки |
date_post |
12.03.2007 |
|
Код контрагента |
Код контрагента, у которого был куплен товар |
kod_ka |
12 |
|
Код типа цен |
Код типа цены, использованной при данной поставке |
kod_tp |
2 |
Словарь понятий и терминов для сущности «Строка поставки» приведен в таблице 2.15.
Таблица 2.15 - Строка поставки
Термины |
Смысл |
Обозначение |
Пример значения |
|
Код строки поставки |
Код строки поставки в списке строк поставок |
kod_spo |
108 |
|
Код поставки |
Код поставки, в которую входит данная строка |
kod_post |
140 |
|
Код номенклатуры |
Товар, который был куплен |
kod_nom |
9 |
|
Цена |
Цена, по которой был куплен данный товар |
price_rr |
130.90 |
|
Количество |
Количество товара |
kolvo |
1 |
Словарь понятий и терминов для сущности «Контрагент» приведен в таблице 2.16.
Таблица 2.16 - Контрагент
Термины |
Смысл |
Обозначение |
Пример значения |
|
Код контрагента |
Код контрагента в списке строк контрагентов |
kod_ka |
28 |
|
Название |
Название фирмы-контрагента |
name_ka |
Яблочко |
|
Город |
Город (юридический адрес контрагента) |
city_ka |
Москва |
|
Улица |
Улица (юридический адрес контрагента) |
street_ka |
Суворовская |
|
Дом |
Дом (юридический адрес контрагента) |
house_ka |
25 |
|
Офис |
Офис (юридический адрес контрагента) |
office_ka |
17 |
|
Телефон |
Контактный телефон контрагента |
phone_ka |
89103121111 |
|
ИНН |
Идентификационный номер налогоплательщика |
inn_ka |
463226468770 |
|
КПП |
Код причины постановки на учет |
kpp_ka |
772222222 |
Словарь понятий и терминов для сущности «Банковский счет» приведен в таблице 2.17.
Таблица 2.17 - Банковский счет
Термины |
Смысл |
Обозначение |
Пример значения |
|
Код счета |
Уникальный номер счета |
kod_sch |
40703810000000000014 |
|
Код банка |
Код банка, в котором открыт счет |
kod_bank |
047144000 |
|
Код контрагента |
Код контрагента - владельца счета |
kod_ka |
15 |
Словарь понятий и терминов для сущности «Банк» приведен в таблице 2.18.
Таблица 2.18 - Банк
Термины |
Смысл |
Обозначение |
Пример значения |
|
БИК |
Банковский идентификационный код |
kod_sch |
047144000 |
|
К/с |
Корр счет |
ks |
30101810600000000232 |
|
Название |
Название банка |
name_bank |
Промбанк |
|
Город |
Город, в котором расположено отделение, в котором открыт счет |
city_b |
Курск |
Словарь понятий и терминов для сущности «Магазин» приведен в таблице 2.19.
Таблица 2.19 - Магазин
Термины |
Смысл |
Обозначение |
Пример значения |
|
Код организации |
Код подразделения магазина |
kod_org |
7 |
|
Название |
Название подразделения |
name_org |
Курское отделение |
|
Город |
Город, в котором расположено подразделение |
city |
Курск |
|
Улица |
Улица, на которой расположено подразделение |
street |
Советская |
|
Дом |
Дом, в котором расположено подразделение |
house |
18 |
|
Офис |
Офис, в котором расположено подразделение |
office |
11 |
|
Телефон |
Тел. подразделения |
phone |
89045213468 |
|
ИНН |
Идентификационный номер налогоплательщика |
inn |
463226468770 |
|
КПП |
Код причины постановки на учет |
kpp |
772222222 |
|
Расчетный счет |
Уникальный номер счета |
rs |
40703810000000000014 |
|
БИК |
Банковский идентификационный код |
kod_sch |
047144000 |
Словарь понятий и терминов для сущности «Оплата» приведен в таблице 2.20.
Таблица 2.20 - Оплата
Термины |
Смысл |
Обозначение |
Пример значения |
|
Код оплаты |
Код оплаты в списке оплат |
kod_opl |
2 |
|
Код продажи |
Код продажи, к которой относится оплата |
kod_prod |
9 |
|
Код статуса |
Код статуса оплаты |
kod_st |
2 |
Словарь понятий и терминов для сущности «Статус оплаты» приведен в таблице 2.21.
Таблица 2.21 - Статус оплаты
Термины |
Смысл |
Обозначение |
Пример значения |
|
Код статуса |
Код статуса в списке статусов |
kod_st |
2 |
|
Название |
Название статуса |
name_st |
Оплачен |
2.1.2 Неформальное описание предметной области
Магазин реализует косметику, закупая ее по одной цене и продавая по другой (при покупке у иностранных поставщиков или продаже иностранным покупателям цены могут выражаться в валюте, отличной от рублей).
Каждая единица косметики обладает уникальным составом (перечнем веществ) и изготовлена определенным производителем, имеющим представителей. Все сделки (покупки и продажи) заключаются с контрагентами (поставщиками или покупателями), у которых есть счета в банках. При совершении сделок формируется накладная (приходная или расходная), состоящая строк - видов косметики, закупленных в определенном количестве по определенной цене. По продажам отслеживается статус оплаты. Для удобства покупателей косметика снабжается рекомендациями.
3. ER-диаграмма
ER-диаграмма представлена на рисунке 1.
Рисунок 1. ER-диаграмма
программный зависимость схема база данные
4.
4. Определения функциональных зависимостей
4.1 Ключевые зависимости
Одному коду номенклатуры не могут соответстовать номенклатуры с разными названиями, кодами стран-производителей, кодами производителей, единицами измерения, весом.
Одному коду цены не могут соответствовать цены с разным типом цены, кодом номенклатуры, ценой.
Одному коду типа цен не могут соответствовать цены с разными названиями, кодами валют.
Одному коду валюты не могут соответствовать валюты с разными названиями, курсами.
Одному коду производителя не могут соотвтетствовать производители с разными названиями, адресами - городами, улицами, домами, офисами и телефонами.
Одному коду представителя не могут соответствовать представители с разными названиями, кодами производителя, адресами - городами, улицами, домами, офисами и телефонами.
Одному коду страны не могут соответствовать страны с разными названиями.
Одному коду рекомендаций не могут соответствовать рекомендации к разным номенклатурам, с разными вариантами рекомендаций.
Одному коду варианта рекомендаций не могут соответствовать разные варианты рекомендаций.
Одному коду состава не могут соответствовать составы разных номенклатур, разные вещества.
Одному коду вещества не могут соответствовать вещества с разными названиями.
Одному коду продаж не могут соответствовать продажи с разными датами, участниками-контрагентами и кодами типа цены.
Одному коду строки продаж не могут соответствовать строки разных продаж, с разными номенклатурами, проданными в разном количестве по разным ценам.
Одному коду поставок не могут соответствовать поставки с разными датами, участниками-контрагентами и кодами типа цены.
Одному коду строки поставок не могут соответствовать строки разных поставок, с разными номенклатурами, купленными в разном количестве по разным ценам.
Одному коду контрагента не могут соотвтетствовать контрагенты с разными названиями, адресами - городами, улицами, домами, офисами и телефонами, ИНН и КПП.
Одному коду счета не могут соответствовать разные коды банка и разные коды контрагента.
Одному БИК не могут соответствовать банки с разными названиями и корр счетами, расположенные в разных городах.
Одному коду подразделения не могут соотвтетствовать подразделения с разными названиями, адресами - городами, улицами, домами, офисами и телефонами, ИНН и КПП, р/с и БИК.
Одному коду оплаты не могут соответствовать разные продажи и разные статусы.
Одному коду статуса не могут соответствовать разные названия статусов.
Ключевые зависимости представлены на рисунке 2.
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. Ключевые зависимости
4.2 Неключевые зависимости
Одному коду типа цены на одну номенклатуру может соответствовать только одно значение цены.
Одному названию номенклатуры от определенного производителя может соответствовать только одна единица измерения и вес.
Одному ИНН контрагента может соответствовать только одно название контрагента.
Одному названию валюты может соответстовать только один курс.
Одной номенклатуре в одной продаже может соответствовать только одна цена.
Одной номенклатуре в одной поставке может соответствовать только одна цена.
Неключевые зависимости представлены на рисунке 3.
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
Рисунок 3. Неключевые зависимости
4.3 Универсальные зависимости
Код цены, код типа цены, код номенклатуры и значение цены определяют запись таблицы «Цена».
Код номенклатуры, название номенклатуры, код страны-производителя, код производителя, единицы измерения и вес определяют запись таблицы «Номенклатура».
Код контрагента, название контрагента, адрес контрагента - город, улица, дом, офис, телефон; ИНН и КПП определяют запись таблицы «Контрагент».
Код валюты, название валюты, курс валюты определяют запись таблицы «Валюта».
Код строки поставок, код поставки, код номенклатуры, цена и количество определяют запись таблицы «Строки поставок».
Код строки продаж, код продажи, код номенклатуры, цена и количество определяют запись таблицы «Строки продаж».
Универсальные зависимости представлены на рисунке 4.
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 -> *
Рисунок 4. Универсальные зависимости
5. Синтез схемы базы данных на основании функциональных зависимостей
5.1 Построение неизбыточного покрытия
Этапы построения неизбыточного покрытия представлены на рисунке 5.
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
Рисунок 5. Этапы построения неизбыточного покрытия
Неизбыточное покрытие представлено на рисунке 6.
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 -> *
Рисунок 6. Неизбыточное покрытие
5.2 Построение леворедуцированного покрытия
Этапы построения леворедуцированного покрытия представлены на рисунке 7 - 8.
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 -> *
Да => множество ФЗ изменяется
Рисунок 7. Этапы построения леворедуцированного покрытия
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 -> *
Да => множество ФЗ изменяется
Рисунок 8. Этапы построения леворедуцированного покрытия
Леворедуцированное покрытие представлено на рисунке 9.
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 -> *
Рисунок 9. Леворедуцированное покрытие
5.3 Построение праворедуцированного покрытия
Этапы построения праворедуцированного покрытия представлены на рисунке 10.
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
Рисунок 10. Этапы построения праворедуцированного покрытия
Праворедуцированное покрытие представлено на рисунке 11.
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 -> *
Рисунок 11. Праворедуцированное покрытие
5.4 Построение классов эквивалентности
Этапы построения классов эквивалентности представлены на рисунках 12 - 13.
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
Рисунок 12. Этапы построения классов эквивалентности
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
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
Рисунок 13. Этапы построения классов эквивалентности
5.5 Построение минимального покрытия на основе прямой функциональной определяемости
Этапы построения минимального покрытия на основе прямой функциональной определяемости представлены на рисунке 14.
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, *.
Рисунок 14. Этапы построения минимального покрытия на основе прямой функциональной определяемости
Редуцированное минимальное покрытие представлено на рисунке 15.
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, *
Рисунок 15. Редуцированное минимальное покрытие
5.6 Построение редуцированного минимального кольцевого покрытия
Определение CF-зависимостей по классам эквивалентности
Построение кольцевого покрытия
Минимальное кольцевое покрытие представлено на рисунке 16.
( 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
Рисунок 16. Минимальное кольцевое покрытие
Получение кольцевого минимального редуцированного покрытия
Естественное характеристическое множество для кольцевого покрытия представлено на рисунке 17.
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
Рисунок 17. Естественное характеристическое множество для кольцевого покрытия
Минимальное редуцированное кольцевое покрытие представлено на рисунке 18.
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
Рисунок 18. Минимальное редуцированное кольцевое покрытие
Естественное характеристическое множество представлено на рисунке 19.
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 }
Рисунок 19. Естественное характеристическое множество
6
6. Построение запросов
6.1 Построение первого запроса
Необходимо вывести наименования косметики и соответствующие единицы измерения. Косметика должна быть произведена компанией GreenMama (офис расположен в Париже) во Франции, имеющие в составе хлорид натрия, рекомендованные для жирной кожи, при этом оптовая цена должна быть указана в долларах США.
Текст первого запроса на SQL представлен на рисунке 20.
SELECT R24.name_nom, R19.ed_izm
FROM (((((((((R24 INNER JOIN R19 ON R24.name_nom= R19.name_nom)
INNER JOIN R2 ON R2.kod_proiz= R24.kod_proiz)
INNER JOIN R4 ON R4.kod_str= R24.kod_str)
INNER JOIN R7 ON R7.kod_nom= R24.kod_nom)
INNER JOIN R8 ON R8.kod_vv= R7.kod_vv)
INNER JOIN R5 ON R5.kod_nom=R24.kod_nom)
INNER JOIN R6 ON R6.kod_var= R5.kod_var)
INNER JOIN R0 ON R0.kod_nom=R24.kod_nom)
INNER JOIN R1 ON R1.kod_tp= R0.kod_tp)
INNER JOIN R25 ON R25.kod_val= R1.kod_val
WHERE (R2.name_proiz=”GreenMama”) AND (R2.city_pz=”Париж”)
AND (R4.name_str=”Франция”) AND (R8.name_vv=”хлорид натрия”)
AND (R6.rek=”Для жирной кожи”) AND (R25.name_val=”USD”)
AND (R1.name_tp=”оптовая”)
ORDER BY R24.name_nom
Рисунок 20. Первый запрос на SQL
Исходное дерево для первого запроса
Рисунок 21. Исходное дерево запросов для первого запроса
Минимизированное дерево для первого запроса.
Рисунок 22. Минимизированное дерево для первого запроса
Текст минимизированного первого запроса на SQL
SELECT R24.name_nom, R19.ed_izm
FROM ((((((((((SELECT name_nom, kod_proiz, kod_str, kod_nom FROM R24)
INNER JOIN (SELECT name_nom, ed_izm FROM R19)
ON R24. name_nom=R19. name_nom)
INNER JOIN (SELECT kod_proiz FROM R2)
ON R24.kod_proiz = R2.kod_proiz)
INNER JOIN (SELECT kod_str, name_str FROM R4)
ON R4.kod_str=R24.kod_str)
INNER JOIN ((SELECT kod_nom, kod_vv FROM R7)
INNER JOIN (SELECT kod_vv, name_vv FROM R8)
ON R7.kod_vv=R8.kod_vv)
ON R7.kod_nom=R24.kod_nom)
INNER JOIN (SELECT kod_nom, kod_var FROM R5)
INNER JOIN (SELECT rek, kod_var FROM R6)
ON R5.kod_var=R6.kod_var)
ON R5.kod_nom=R24.kod_nom)
INNER JOIN ((SELECT kod_tp, kod_val FROM R1)
INNER JOIN (SELECT kod_val, name_val FROM R25)
ON R1.kod_val=R25.kod_val)
INNER JOIN (SELECT kod_nom, kod_tp FROM R0)
ON R0.kod_tp=R1.kod_tp)
ON R).kod_nom=R24.kod_nom
WHERE (R2.name_proiz=”GreenMama”) AND (R2.city_pz=”Париж”)
AND (R4.name_str=”Франция”) AND (R8.name_vv=”хлорид натрия”)
AND (R6.rek=”Для жирной кожи”) AND (R25.name_val=”USD”)
AND (R1.name_tp=”оптовая”)
ORDER BY R24.name_nom
Рисунок 23. Первый минимизированный запрос на SQL
6.2 Построение второго запроса
Необходимо вывести наименования косметики, на которые имеются цены всех типов.
Текст второго запроса на SQL
SELECT kod_nom, price
FROM R24 LEFT JOIN R0
ON R24.kod_nom=R0.kod_nom
WHERE kod_tp is NULL
INTO A1
SELECT name_nom
FROM R24 LEFT JOIN A1
ON R24.kod_nom=A1.kod_nom
WHERE price is NULL
Рисунок 24. Второй запрос на SQL
Исходное дерево для второго запроса
Рисунок 25. Исходное дерево запросов для второго запроса
Минимизированное дерево для второго запроса
Рисунок 26. Минимизированное дерево для второго запроса
Текст минимизированного второго запроса на SQL
SELECT kod_nom, price
FROM (SELECT kod_nom FROM R24) LEFT JOIN R0
ON R24.kod_nom=R0.kod_nom
WHERE kod_tp is NULL
INTO A1
SELECT name_nom
FROM (SELECT kod_nom, name_nom FROM R24) LEFT JOIN A1
ON R24.kod_nom=A1.kod_nom
WHERE price is NULL
Рисунок 27. Минимизированный второй запрос на SQL
6.3 Расчет сложности оптимизированного запроса
Рассчитаем сложность оптимизированного запроса. Для подзапроса q21 выпишем статистику по таблицам и произведем расчеты.
Число записей в каждом столбце таблицы Магазин:
- V (Офис, Магазин )=100.
- V (Город,Магазин)=100.
Длина одной записи в поле каждого из перечисленных типов:
- L (Офис)=4 байтa.
- L (Город)=4 байта.
Расчет сложности подзапроса q21отображен на рисунке 28.
T(q21)=T(Магазин)/V(tab_num_lab, Магазин)=100/50=2.
Vol (q21)=T(q21)*L(q21);
L(q21)= L(Офис) + L(Город) =8 байт
Vol (q21)=2*8=16 байт.
Рисунок 28. Сложность подзапроса q21
Для подзапроса q22 статистика по таблице не меняется, поскольку осуществляется операция проекции над результатом подзапроса q21.
T(q23)=T(ПК)*1/3=100*1/3?33.
L(q23)= L(Город) + L(Офис) = 4+4= 8 байта.
Vol (q23)=33*8= 284 байта.
Рисунок 29. Сложность подзапроса q23
Для подзапроса q23 выпишем статистику по таблицам и произведем расчеты. Число записей в каждом столбце, необходимом для запроса, из таблицы Оплата:
- V (Орловская, Оплата) = 100.
- V (Офис, Оплата) = 100.
Длина одной записи в поле каждого из перечисленных типов:
- L (Орлоская) = 20 байт.
- L (Офис) = 4 байт.
Для подзапроса q23 статистика по таблице не меняется, поскольку осуществляется операция проекции над результатом подзапроса q22.
T(q23)=T(ПК)*1/3=100*1/3?33.
L(q23)= L(Орловская) + L(Офис) = 4+20= 24 байта.
Vol (q23)=33*24= 792 байта.
Рисунок 30. Сложность подзапроса q23
Расчет сложности подзапроса показан на рисунке 31.
T(q22)=T(ПК)*1/3=100*1/3?33.
Статистика по запросу:
Vol (q22)=T(q22)*L(q22);
L(q22)= L(Офис) + L(Орловская) = 24 байта
Vol (q22)=33*24= 792 байта.
Рисунок 31. Сложность подзапроса q22
Для подзапроса q24 статистика по таблице не меняется, поскольку осуществляется операция проекции над результатом подзапроса q23.
T(q24)=T(Техника)/V(Офис, Магазин)=100/50=2.
L(q24)= L(Офис) + L(Город) = 8 байт.
Vol (q24)=2*8=16 байт.
Рисунок 32. Сложность подзапроса q24
Подзапрос q25 - естественное слияние результатов подзапросов q23 и q24. Расчет сложности подзапроса q25 показан на рисунке 33.
T(q25)=T(q23)*T(q24)/max(V(Офис,номер,q23),V(num_part,q24))= =33*2/max(20,25)=3.
L(q25)= L(Офис + L(Офис) =4+4= 8 байт.
Vol (q25)=3*8=24 байт.
Рисунок 33. Сложность подзапроса q25
Подзапрос q26 не меняет статистику подзапроса q25, поскольку это операция проекции. Расчет сложности подзапроса q26 показан на рисунке 34.
T(q26)=T(q25)=3.
L(q26)= L(Офис) + L(Офис) =4+4=8 байт.
Vol (q26)=3*8=24 байт.
Рисунок 34. Сложность подзапроса q26
Сложность всего оптимизированного запроса рассчитывается как сумма сложностей промежуточных подзапросов. Таким образом, она составляет: Vol(q2) =1823 байт.
Заключение
В ходе выполнения курсовой работы была достигнута цель работы - проектирование базы данных магазина косметики.
Для достижения цели был решен ряд задач: составление описания предметной области; составление словаря понятий и терминов; построение исходной модели (ER-диаграммы) базы данных; определение функциональных зависимостей; синтез схемы базы данных на основании функциональных зависимостей; построение оптимизированной концептуальной модели; построение запросов на выборку.
Размещено на Allbest.ru
Подобные документы
Базы данных, содержащие информацию о графических редакторах. Предметная область, словарь понятий и терминов. Построение функциональных зависимостей. Синтез схемы базы данных на основании функциональных зависимостей. Построение неизбыточного покрытия.
курсовая работа [190,8 K], добавлен 12.05.2009Анализ предметной области, ее формализации с помощью функциональных зависимостей. Этапы минимизации системы функциональных зависимостей и на основании полученной редуцированной системы проектирование модели базы данных. Создание и моделирование запросов.
курсовая работа [1,7 M], добавлен 21.06.2010Разработка базы данных магазина косметики, позволяющей вести учёт и анализ поставок и продаж. Описание предметной области, составление словаря понятий и терминов и системы функциональных зависимостей. Запись минимизированных запросов на языке SQL.
курсовая работа [612,6 K], добавлен 18.07.2012Словесное описание предметной области. Построение схемы функциональных зависимостей. Реализация базы данных средствами утилиты Enterprise Manager в формате SQL Server Management Studio. Разработка алгоритмов работы программы и приложения пользователя.
дипломная работа [1,8 M], добавлен 26.03.2015Определение функциональных зависимостей. Разработка структуры базы данных. Организация запросов к базе данных. Использование триггеров для поддержки данных в актуальном состоянии. Разработка хранимых процедур и функций. Ограничения ведения базы данных.
курсовая работа [113,2 K], добавлен 17.06.2014Ограничения на связи между таблицами базы данных хлебной базы. Проектирование оптимальной структуры базы данных методом синтеза. Исходное множество функциональных зависимостей. Многотабличный запрос на выборку по условию. Расчет сложности запроса.
дипломная работа [488,5 K], добавлен 30.08.2012Системный анализ предметной области. Разработка концептуальной модели базы данных. Построение схемы функциональных зависимостей. Создание таблиц базы данных в Database Desktop и псевдонима в BDE Administrator. Разработка алгоритма работы программы.
курсовая работа [911,3 K], добавлен 20.12.2014Исследование теоретических основ проектирования и разработки баз данных. Выявление функциональных зависимостей, построение инфологической модели. Обзор языковых и программных средств, предназначенных для создания, ведения и совместного использования БД.
курсовая работа [1,5 M], добавлен 22.02.2012Составление схемы концептуальной модели данных. Разработка структуры реляционной базы данных и интерфейса пользователя. Особенности главных этапов проектирования базы данных. Способы реализации запросов и отчетов. Специфика руководства пользователя.
курсовая работа [186,9 K], добавлен 18.12.2010Понятие и структура физической базы данных, особенности работы с конструктором СУБД Access. Разработка проекта по созданию базы данных, которая хранит журнал посещаемости занятий студентами. Определение функциональных зависимостей и организация запросов.
курсовая работа [30,5 K], добавлен 24.03.2011