Смекни!
smekni.com

База данный Хозяйственный учет футбольного клуба (стр. 4 из 6)

Минимальное кольцевое покрытие представлено на рисунке 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.5 Концептуальная модель

Исходная концептуальная модель базы данных представлена на рисунке 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.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.


Рисунок 2.20 - Операционное дерево для минимизированного первого запроса

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



Рисунок 2.21- Оценка стоимости минимизированного первого запроса


2.6.2 Построение второго запроса

Словесная формулировка запроса следующая: «Вывести номера спортивных залов, в которых хранится инвентарь, принадлежащий обеим партиям: 522715, 413998».

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

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