Минимальное кольцевое покрытие представлено на рисунке 2.7
( sp, np; Fam, Im, Otch, dateborn, country, city, street, numstreet, numflat; ) |
-> pol, datevidachi, kemvidan, dolgnost, num_room |
( sp_pl, np_pl; date, staff, number, status; ) -> rost, ves |
( num_p; ) -> square, naznachenie |
( num_room; ) -> room |
( num_zal; ) -> type_zal, num_p |
( code_obj; ) -> kol, date, balance |
( code_inv; ) -> firm_inv, model_inv, code_obj |
( code_tec; ) -> firm_tec, model_tec, code_obj |
( code_meb; ) -> firm_meb, dlina, width, height, color, code_obj |
( inv_number_INV; ) -> code_inv |
( inv_number_TEC; ) -> code_tec |
( inv_number_MEB; ) -> code_meb |
( inv_number_INV_out; ) -> inv_number_INV, date_out_inv |
( inv_number_TEC, _out; ) |
( inv_number_MEB_out; ) -> inv_number_MEB, date_out_meb |
( inv_number_TEC_out; ) -> date_out_tec |
( inv_number_INV, date_IinZal; ) -> num_zal |
( inv_number_TEC, date_TecInP; ) -> num_р |
( inv_number_MEB, date_MebInP; ) -> num_р |
( code_balls; ) -> material, code_inv |
( code_gate; ) -> height_gate, shirina, kind, code_inv |
( code_trenager; ) -> type, code_inv |
( code_TV; ) -> diagonal, screen, code_tec |
( code_refreg; ) -> height_ref, widht_ref, depht_ref, sum_sq_polok, |
com_volume, user_volume, code_tec |
( code_vacuum; ) -> moshnost_v, code_tec |
( code_bed; ) -> type_bed, code_meb |
( code_table; ) -> type_table, material_table, code_meb |
( code_shkaf; ) -> type_shkaf, code_meb |
Рисунок 2.7 - Минимальное кольцевое покрытие
Получение кольцевого минимального редуцированного покрытия
Естественное характеристическое множество для кольцевого покрытия представлено на рисунке 2.8.
f(C): |
sp, np -> Fam, Im, Otch, dateborn, country, city, street, numstreet, |
numflat |
Fam, Im, Otch, dateborn, country, city, street, numstreet, numflat -> sp, |
np |
Fam, Im, Otch, dateborn, country, city, street, numstreet, numflat -> pol, |
datevidachi, kemvidan, dolgnost, num_room |
sp_pl, np_pl -> date, staff, number, status |
date, staff, number, status -> sp_pl, np_pl |
date, staff, number, status -> rost, ves |
code_tec -> firm_tec, model_tec, code_obj |
code_meb -> firm_meb, dlina, width, height, color, code_obj |
inv_number_INV -> code_inv |
inv_number_TEC -> code_tec |
inv_number_MEB -> code_meb |
inv_number_INV_out -> inv_number_INV, date_out_inv |
inv_number_MEB_out -> inv_number_MEB, date_out_meb |
inv_number_TEC_out -> date_out_tec |
inv_number_INV, date_IinZal -> num_zal |
inv_number_TEC, date_TecInP -> num_р |
inv_number_MEB, date_MebInP -> num_р |
code_balls -> material, code_inv |
code_gate -> height_gate, shirina, kind, code_inv |
code_trenager -> type, code_inv |
code_TV -> diagonal, screen, code_tec |
code_refreg -> height_ref, widht_ref, depht_ref, sum_sq_polok, |
com_volume, user_volume, code_tec |
code_vacuum -> moshnost_v, code_tec |
code_bed -> type_bed, code_meb |
code_table -> type_table, material_table, code_meb |
code_shkaf -> type_shkaf, code_meb |
Рисунок 2.8 - Естественное характеристическое множество для кольцевого покрытия
Минимальное редуцированное кольцевое покрытие представлено на рисунке 2.9.
( sp, np; Fam, Im, Otch, dateborn, country, city, street, numstreet, |
numflat; ) -> pol, datevidachi, kemvidan, dolgnost, num_room |
( sp_pl, np_pl; date, staff, number, status; ) -> rost, ves |
( num_p; ) -> square, naznachenie |
( num_room; ) -> room |
( num_zal; ) -> type_zal, num_p |
( code_obj; ) -> kol, date, balance |
( code_inv; ) -> firm_inv, model_inv, code_obj |
( code_tec; ) -> firm_tec, model_tec, code_obj |
( code_meb; ) -> firm_meb, dlina, width, height, color, code_obj |
( inv_number_INV; ) -> code_inv |
( inv_number_TEC; ) -> code_tec |
( inv_number_MEB; ) -> code_meb |
( inv_number_INV_out; ) -> inv_number_INV, date_out_inv |
( inv_number_TEC, _out; ) |
( inv_number_MEB_out; ) -> inv_number_MEB, date_out_meb |
( inv_number_TEC_out; ) -> date_out_tec |
( inv_number_INV, date_IinZal; ) -> num_zal |
( inv_number_TEC, date_TecInP; ) -> num_р |
( inv_number_MEB, date_MebInP; ) -> num_р |
( code_balls; ) -> material, code_inv |
( code_gate; ) -> height_gate, shirina, kind, code_inv |
( code_trenager; ) -> type, code_inv |
( code_TV; ) -> diagonal, screen, code_tec |
( code_refreg; ) -> height_ref, widht_ref, depht_ref, sum_sq_polok, |
com_volume, user_volume, code_tec |
( code_vacuum; ) -> moshnost_v, code_tec |
( code_bed; ) -> type_bed, code_meb |
( code_table; ) -> type_table, material_table, code_meb |
( code_shkaf; ) -> type_shkaf, code_meb |
Рисунок 2.9 - Минимальное редуцированное кольцевое покрытие
Естественное характеристическое множество представлено на рисунке 2.10.
R0 = ( sp, np; Fam, Im, Otch, dateborn, country, city, street, numstreet, |
numflat, pol, datevidachi, kemvidan, dolgnost, num_room ) K0 = { sp, np; Fam, Im, Otch, dateborn, country, city, street, numstreet, numflat } |
R1 = ( sp_pl, np_pl; date, staff, number, status, rost, ves ) K1 = { sp_pl, np_pl; date, staff, number, status } |
R2 = ( num_p, square, naznachenie ) K2 = { num_p } |
R3 = ( num_room, room ) K3 = { num_room } |
R4 = ( num_zal, type_zal, num_p ) K4 = { num_zal } |
R5 = ( code_obj, kol, date, balance ) K5 = { code_obj } |
R6 = ( code_inv, firm_inv, model_inv, code_obj ) K6 = { code_inv } |
R7 = ( code_tec, firm_tec, model_tec, code_obj ) K7 = { code_tec } |
R8 = ( code_meb, firm_meb, dlina, width, height, color, code_obj ) K8 = { code_meb } |
R9 = ( inv_number_INV, code_inv ) K9 = { inv_number_INV } |
R10 = ( inv_number_TEC, code_tec ) K10 = { inv_number_TEC } |
R11 = ( inv_number_MEB, code_meb ) K11 = { inv_number_MEB } |
R12 = ( inv_number_INV_out, inv_number_INV, date_out_inv ) K12 = { inv_number_INV_out } |
R13 = ( inv_number_TEC, _out ) K13 = { inv_number_TEC, _out } |
R14 = ( inv_number_MEB_out, inv_number_MEB, date_out_meb ) K14 = {inv_number_MEB_out } |
R15 = ( inv_number_TEC_out, date_out_tec ) K15 = { inv_number_TEC_out } |
R16 = ( inv_number_INV, date_IinZal, num_zal ) K16 = { inv_number_INV, date_IinZal } |
R17 = ( inv_number_TEC, date_TecInP, num_р ) K17 = { inv_number_TEC, date_TecInP } |
R18 = ( inv_number_MEB, date_MebInP, num_р ) K18 = { inv_number_MEB, date_MebInP } |
R19 = ( code_balls, material, code_inv ) K19 = { code_balls } |
R20 = ( code_gate, height_gate, shirina, kind, code_inv ) K20 = { code_gate } |
R21 = ( code_trenager, type, code_inv ) K21 = { code_trenager } |
R22 = ( code_TV, diagonal, screen, code_tec ) K22 = { code_TV } |
R23 = ( code_refreg, height_ref, widht_ref, depht_ref, sum_sq_polok, |
com_volume, user_volume, code_tec ) K23 = { code_refreg } |
R24 = ( code_vacuum, moshnost_v, code_tec ) K24 = { code_vacuum } |
R25 = ( code_bed, type_bed, code_meb ) K25 = { code_bed } |
R26 = ( code_table, type_table, material_table, code_meb ) K26 = { code_table } |
R27 = ( code_shkaf, type_shkaf, code_meb ) K27 = { code_shkaf } |
Рисунок 2.10 - Естественное характеристическое множество
Исходная концептуальная модель базы данных представлена на рисунке 2.15.
Рисунок 2.15 - Концептуальная модель (ER-диаграмма) базы данных
После проведения всех этапов минимизации концептуальная модель не изменилась.
2.6 Построение запросов
2.6.1 Построение первого запроса
2.6.1.1 Исходный запрос
Первый запрос формулируется следующим образом: «Вывести коды партий футбольных ворот типа «юниорские», которые производятся фирмой Star, относятся к модели K325, поступили не раньше 2007 года и находятся в спортивных залах «Общей физической подготовки» ».
Текст первого запроса на языке SQL представлен на рисунке 2.16.Риунок 2.16 - Текст первого запроса на языке SQL
Исходное операционное дерево для первого запроса представлено на рисунке 2.17.
Рисунок 2.17 - Исходное операционное дерево для первого запроса
Оценка стоимости исходного запроса представлена на рисунке 2.18.2.6.1.2 Минимизированный запрос
Текст минимизированного первого запроса на SQL представлен на рисунке 2.19.
SELECT code_obj from gate WHERE gate.kind="Стандартные" |
INTO CURSOR C1 |
SELECT code_obj FROM inventar WHERE |
(ALLTRIM(inventar.firm)="Mizuno" AND |
ALLTRIM(inventar.model)="K235") INTO CURSOR C2 |
SELECT code_obj from arrival_object WHERE |
((arrival_object.date)>={^2007-01-01}) INTO CURSOR d5 |
SELECT * FROM c1 INNER JOIN c2 ON c1.code_obj=c2.code_obj |
INTO CURSOR C3 |
SELECT * FROM c3 INNER JOIN d5 ON d5.code_obj=c3.code_obj_a |
INTO CURSOR C6 |
SELECT code_obj_a,inv_number from invnum_inv INNER JOIN C6 |
ON ALLTRIM(code_obj_a)==ALLTRIM(invnum_inv.code_obj) |
INTO CURSOR C7 |
SELECT code_obj_a,num_p from inv_in_zal INNER JOIN C7 ON inv_in_zal.inv_number=c7.inv_number INTO CURSOR C9 |
SELECT num_p from zal WHERE |
ALLTRIM(zal.type_zal)="Общей физической подготовки" |
INTO CURSOR C10 |
SELECT DISTINCT code_obj_a from C9 INNER JOIN C10 |
ON C9.num_p=C10.num_p |
Рисунок 2.19 – Текст минимизированного первого запроса
Минимизированное операционное дерево для первого запроса представлено на рисунке 2.20.
SELECT num_p FROM zal WHERE ALLTRIM(zal.type_zal)='' |
INTO CURSOR CR1 |
SELECT num_p,code_del FROM del,CR1 INTO CURSOR CR4 |
SELECT CR1.num_p,inv_number FROM CR1 INNER JOIN inv_in_zal |
ON CR1.num_p==inv_in_zal.num_p INTO CURSOR CR2 |
SELECT num_p,code_obj FROM CR2 INNER JOIN invnum_inv |
ON (invnum_inv.inv_number==CR2.inv_number) DISTINCT |
INTO CURSOR CR3 |
SELECT DISTINCT num_p from CR4 WHERE NOT EXISTS |
(SELECT CR3.num_p FROM CR3 WHERE (CR4.num_p==CR3.num_p |
AND CR4.code_del==CR3.code_obj))into CURSOR CR5 |
SELECT CR1.num_p,CR5.num_p FROM CR1 LEFT JOIN CR5 ON |
CR1.num_p=CR5.num_p INTO CURSOR CR6 |
SELECT DISTINCT num_p FROM CR1 WHERE NOT EXISTS (Select CR6.num_p_b from CR6 WHERE CR1.num_p=CR6.num_p_b) |
Рисунок 2.22 - Текст запроса на языке SQL
Операционное дерево для второго запроса представлено на рисунке 2.23.
Рисунок 2.23 - Операционное дерево для второго запроса
3 Рабочий проект
3.1 Структура проекта
3.1.1 Связь таблиц
Схема связей таблиц представлена на рисунке 3.1