Григорьев Ю.А., Ермаков Е.Ю. и др. - Методические указания к выполнению курсовой работы по дисциплине «структурное проектирование АСОИУ» (1034714), страница 4
Текст из файла (страница 4)
1. Запросы Q2, Q4 с подзапросом в условии where необходимо предварительно преобразовать в запросы с соединением таблиц – как это происходит при оптимизации (см. Примечания к соответствующим запросам).
2. Запросы Q7, Q8, Q9 с подзапросом за ключевым словом from необходимо предварительно преобразовать (см. Примечания к соответствующим запросам).
1. Запрос Q1
select l_returnflag,
l_linestatus,
sum(l_quantity) as sum_qty,
sum(l_extendedprice) as sum_base_price,
sum(l_extendedprice*(1-l_discount)) as sum_disc_price,
sum(l_extendedprice*(1-l_discount)*(1+l_tax)) as sum_charge,
avg(l_quantity) as avg_qty,
avg(l_extendedprice) as avg_price,
avg(l_discount) as avg_disc,
count(*) as count_order
from lineitem
where l_shipdate <= date '1998-12-01' - interval '[DELTA]' day (3) // P=0,96
group by
l_returnflag,
l_linestatus
order by
l_returnflag,
l_linestatus;
2. Запрос Q2
select s_acctbal,
s_name,
n_name,
p_partkey,
p_mfgr,
s_address,
s_phone,
s_comment
from part,
supplier,
partsupp,
nation,
region
where p_partkey = ps_partkey
and s_suppkey = ps_suppkey
and p_size = [SIZE] // P=1/50
and p_type like '%[TYPE]' // P=30/150
and s_nationkey = n_nationkey
and n_regionkey = r_regionkey
and r_name = '[REGION]' // P=1/5
and ps_supplycost = (
select min(ps_supplycost)
from partsupp, supplier,
nation, region
where p_partkey = ps_partkey
and s_suppkey = ps_suppkey
and s_nationkey = n_nationkey
and n_regionkey = r_regionkey
and r_name = '[REGION]' // P=1/5
)
order by
s_acctbal desc,
n_name,
s_name,
p_partkey;
Примечание к запросу Q2.
Этот запрос необходимо преобразовать в запрос с соединением таблиц:
1. Дополнительно описать следующий запрос Q21 (см. подзапрос выше) и включить его в транзакцию, куда входит запрос Q2:
select p_partkey, min(ps_supplycost) as psmin
from part, partsupp, supplier,
nation, region
where p_partkey = ps_partkey
and s_suppkey = ps_suppkey
and s_nationkey = n_nationkey
and n_regionkey = r_regionkey
and r_name = '[REGION]' // P=1/5
and p_size = [SIZE] // P=1/50
and p_type like '%[TYPE]' // P=30/150
group by p_partkey;
2. Описать в базе данных (пункт «Данные») дополнительную таблицу tablQ21, которая соответствует запросу Q21. Число записей можно рассчитать по формулам, которые приведены в Приложении 8.
3. Изменить исходный запрос Q2:
- добавить во from таблицу tablQ21,
- вместо равенства «and ps_supplycost= (подзапрос select)» добавить в where следующие строки:
and part. p_partkey=tablQ21.p_partkey
and ps_supplycost= tablQ21.psmin // P= 1/99900
3. Запрос Q3
select
l_orderkey,
sum(l_extendedprice*(1-l_discount)) as revenue,
o_orderdate,
o_shippriority
from
customer,
orders,
lineitem
where
c_mktsegment = '[SEGMENT]' // P=1/5
and c_custkey = o_custkey
and l_orderkey = o_orderkey
and o_orderdate < date '[DATE]' // P=0,49
and l_shipdate > date '[DATE]' // P=0,51
group by
l_orderkey,
o_orderdate,
o_shippriority
order by
revenue desc,
o_orderdate;
4. Запрос Q4
select
o_orderpriority,
count(*) as order_count
from
orders
where
o_orderdate >= date '[DATE]' // в интервале
and o_orderdate < date '[DATE]' + interval '3' month // P=0,04
and exists (
select *
from
lineitem
where
l_orderkey = o_orderkey
and l_commitdate < l_receiptdate // P= 0,98
)
group by
o_orderpriority
order by
o_orderpriority;
Примечание к запросу Q4.
Этот запрос необходимо преобразовать в запрос с соединением таблиц:
1. Дополнительно описать следующий запрос Q41 (см. подзапрос выше) и включить его в транзакцию, куда входит запрос Q4:
select o_orderkey, count(*) as ocount
from
orders,
lineitem
where
l_orderkey = o_orderkey
and l_commitdate < l_receiptdate // P= 0,98
and o_orderdate >= date '[DATE]' // в интервале
and o_orderdate < date '[DATE]' + interval '3' month// P=0,04
group by o_orderkey;
2. Описать в базе данных (пункт «Данные») дополнительную таблицу tablQ41, которая соответствует запросу Q41. Число записей можно рассчитать по формулам, которые приведены в Приложении 8.
3. Изменить исходный запрос Q4:
- добавить во from таблицу tablQ41,
- вместо квантора «and exists (подзапрос select)» добавить в where следующие строки:
and orders. o_orderkey =tablQ41.o_orderkey
and tablQ41.ocount>0 // P=1
5. Запрос Q5
select
n_name,
sum(l_extendedprice * (1 - l_discount)) as revenue
from
customer,
orders,
lineitem,
supplier,
nation,
region
where
c_custkey = o_custkey
and l_orderkey = o_orderkey
and l_suppkey = s_suppkey
and c_nationkey = s_nationkey
and s_nationkey = n_nationkey
and n_regionkey = r_regionkey
and r_name = '[REGION]' // P=1/5
and o_orderdate >= date '[DATE]' // в интервале
and o_orderdate < date '[DATE]' + interval '1' year // P= 0,15
group by
n_name
order by
revenue desc;
6. Запрос Q6
select
sum(l_extendedprice*l_discount) as revenue
from
lineitem
where
l_shipdate >= date '[DATE]' // в интервале
and l_shipdate < date '[DATE]' + interval '1' year // P= 0,14
and l_discount between [DISCOUNT] - 0.01 and [DISCOUNT] + 0.01 // P= 0,3
and l_quantity < [QUANTITY]; // P= 0,5
7. Запрос Q7
select supp_nation,
cust_nation,
l_year, sum(volume) as revenue
from ( select n1.n_name as supp_nation,
n2.n_name as cust_nation,
extract(year from l_shipdate) as l_year,
l_extendedprice * (1 - l_discount) as volume
from supplier,
lineitem,
orders,
customer,
nation n1,
nation n2
where s_suppkey = l_suppkey
and o_orderkey = l_orderkey
and c_custkey = o_custkey
and s_nationkey = n1.n_nationkey
and c_nationkey = n2.n_nationkey
and (
(n1.n_name = '[NATION1]' and n2.n_name = '[NATION2]') //P1=P2= 1/25
or (n1.n_name = '[NATION2]' and n2.n_name = '[NATION1]') //P3=P4=1/25
)
and l_shipdate between date '1995-01-01' and date '1996-12-31' // P=0,29
) as shipping
group by
supp_nation,
cust_nation,
l_year
order by
supp_nation,
cust_nation,
l_year;
Примечание к запросу Q7.
Последовательность преобразования запроса:
1. Дополнительно описать запрос Q71, который соответствует подзапросу select, указанному за from, и включить его в транзакцию, куда входит запрос Q7 (для n1.n_name положить P=2P1=2/25, для n2.n_name положить P=P2=1/25).
2. Описать в базе данных (пункт «Данные») дополнительную таблицу tablQ71, которая соответствует запросу Q71. Число записей можно рассчитать по формулам, которые приведены в Приложении 8 (условие с вероятностями P1÷P4 применять к декартовому произведению n1 и n2).
3. Заменить подзапрос select за ключевым словом from на таблицу tablQ71.
8. Запрос Q8
select o_year,
sum(case
when nation = '[NATION]'
then volume
else 0
end) / sum(volume) as mkt_share
from ( select extract(year from o_orderdate) as o_year,
l_extendedprice * (1-l_discount) as volume,
n2.n_name as nation
from part,
supplier,
lineitem,
orders,
customer,
nation n1,
nation n2,
region
where p_partkey = l_partkey
and s_suppkey = l_suppkey
and l_orderkey = o_orderkey
and o_custkey = c_custkey
and c_nationkey = n1.n_nationkey
and n1.n_regionkey = r_regionkey
and r_name = '[REGION]' // P=1/5
and s_nationkey = n2.n_nationkey
and o_orderdate between date '1995-01-01' and date '1996-12-31' // P=0,3
and p_type = '[TYPE]' // P=1/150
) as all_nations
group by
o_year
order by
o_year;
Примечание к запросу Q8.
Последовательность преобразования запроса:
1. Дополнительно описать запрос Q81, который соответствует подзапросу select, указанному за from, и включить его в транзакцию, куда входит запрос Q8.
2. Описать в базе данных (пункт «Данные») дополнительную таблицу tablQ81, которая соответствует запросу Q81. Число записей можно рассчитать по формулам, которые приведены в Приложении 8.
3. Заменить подзапрос select за ключевым словом from на таблицу tablQ81.
9. Запрос Q9
Select nation,
o_year,
sum(amount) as sum_profit
from (
select
n_name as nation,
extract(year from o_orderdate) as o_year,
l_extendedprice * (1 - l_discount) - ps_supplycost * l_quantity as amount
from
part,
supplier,
lineitem,
partsupp,
orders,
nation
where
s_suppkey = l_suppkey
and ps_suppkey = l_suppkey
and ps_partkey = l_partkey
and p_partkey = l_partkey
and o_orderkey = l_orderkey
and s_nationkey = n_nationkey
and p_name like '%[COLOR]%' // P= 5/91
) as profit
group by
nation,
o_year
order by
nation,
o_year desc;
Примечание к запросу Q9.
Последовательность преобразования запроса:
1. Дополнительно описать запрос Q91, который соответствует подзапросу select, указанному за from, и включить его в транзакцию, куда входит запрос Q9.
2. Описать в базе данных (пункт «Данные») дополнительную таблицу tablQ91, которая соответствует запросу Q91. Число записей можно рассчитать по формулам, которые приведены в Приложении 8.
3. Заменить подзапрос select за ключевым словом from на таблицу tablQ91.
10. Запрос Q10
select
c_custkey,
c_name,
sum(l_extendedprice * (1 - l_discount)) as revenue,
c_acctbal,
n_name,
c_address,
c_phone,
c_comment
from
customer,
orders,
lineitem,
nation
where
c_custkey = o_custkey
and l_orderkey = o_orderkey
and o_orderdate >= date '[DATE]' // в интервале
and o_orderdate < date '[DATE]' + interval '3' month // P=0,04
and l_returnflag = 'R' // P=0,25
and c_nationkey = n_nationkey
group by
c_custkey,
c_name,
c_acctbal,
c_phone,
n_name,
c_address,
c_comment
order by
revenue desc;
Приложение 3. Транзакции.
Варианты транзакций.
Транзакция=
(запрос1, запрос2)
1 ТР1= (Q1, Q2) ТР2= (Q3, Q7) | 2 ТР1= (Q1, Q4) ТР2= (Q5, Q9) | 3 ТР1= (Q1, Q2) ТР2= (Q6, Q7) | 4 ТР1= (Q1, Q4) ТР2= (Q10, Q9) | 5 ТР1= (Q3, Q2) ТР2= (Q5, Q7) |
6 ТР1= (Q3, Q4) ТР2= (Q6, Q9) | 7 ТР1= (Q3, Q2) ТР2= (Q10, Q7) | 8 ТР1= (Q5, Q4) ТР2= (Q6, Q9) | 9 ТР1= (Q5, Q2) ТР2= (Q10, Q7) | 10 ТР1= (Q6, Q4) ТР2= (Q10, Q9) |
11 ТР1= (Q1, Q2) ТР2= (Q3, Q8) | 12 ТР1= (Q1, Q4) ТР2= (Q5, Q8) | 13 ТР1= (Q1, Q2) ТР2= (Q6, Q8) | 14 ТР1= (Q1, Q4) ТР2= (Q10, Q8) | 15 ТР1= (Q3, Q2) ТР2= (Q5, Q8) |
16 ТР1= (Q3, Q4) ТР2= (Q6, Q8) | 17 ТР1= (Q3, Q2) ТР2= (Q10, Q8) | 18 ТР1= (Q5, Q4) ТР2= (Q6, Q8) | 19 ТР1= (Q5, Q2) ТР2= (Q10, Q8) | 20 ТР1= (Q6, Q4) ТР2= (Q10, Q8) |
21 ТР1= (Q1, Q2) ТР2= (Q3, Q9) | 22 ТР1= (Q1, Q4) ТР2= (Q5, Q7) | 23 ТР1= (Q1, Q2) ТР2= (Q6, Q9) | 24 ТР1= (Q1, Q4) ТР2= (Q10, Q7) | 25 ТР1= (Q3, Q2) ТР2= (Q5, Q9) |
26 ТР1= (Q3, Q4) ТР2= (Q6, Q7) | 27 ТР1= (Q3, Q2) ТР2= (Q10, Q9) | 28 ТР1= (Q5, Q4) ТР2= (Q6, Q7) | 29 ТР1= (Q5, Q2) ТР2= (Q10, Q9) | 30 ТР1= (Q6, Q4) ТР2= (Q10, Q7) |
31 ТР1= (Q1, Q4) ТР2= (Q3, Q7) | 32 ТР1= (Q1, Q2) ТР2= (Q5, Q9) | 33 ТР1= (Q1, Q4) ТР2= (Q6, Q7) | 34 ТР1= (Q1, Q2) ТР2= (Q10, Q9) | 35 ТР1= (Q3, Q4) ТР2= (Q5, Q7) |
36 ТР1= (Q3, Q2) ТР2= (Q6, Q9) | 37 ТР1= (Q3, Q4) ТР2= (Q10, Q7) | 38 ТР1= (Q5, Q2) ТР2= (Q6, Q9) | 39 ТР1= (Q5, Q4) ТР2= (Q10, Q7) | 40 ТР1= (Q6, Q2) ТР2= (Q10, Q9) |
41 ТР1= (Q1, Q4) ТР2= (Q3, Q8) | 42 ТР1= (Q1, Q2) ТР2= (Q5, Q8) | 43 ТР1= (Q1, Q4) ТР2= (Q6, Q8) | 44 ТР1= (Q1, Q2) ТР2= (Q10, Q8) | 45 ТР1= (Q3, Q4) ТР2= (Q5, Q8) |
46 ТР1= (Q3, Q2) ТР2= (Q6, Q8) | 47 ТР1= (Q3, Q4) ТР2= (Q10, Q8) | 48 ТР1= (Q5, Q2) ТР2= (Q6, Q8) | 49 ТР1= (Q5, Q4) ТР2= (Q10, Q8) | 50 ТР1= (Q6, Q2) ТР2= (Q10, Q8) |
51 ТР1= (Q1, Q4) ТР2= (Q3, Q9) | 52 ТР1= (Q1, Q2) ТР2= (Q5, Q7) | 53 ТР1= (Q1, Q4) ТР2= (Q6, Q9) | 54 ТР1= (Q1, Q2) ТР2= (Q10, Q7) | 55 ТР1= (Q3, Q4) ТР2= (Q5, Q9) |
56 ТР1= (Q3, Q2) ТР2= (Q6, Q7) | 57 ТР1= (Q3, Q4) ТР2= (Q10, Q9) | 58 ТР1= (Q5, Q2) ТР2= (Q6, Q7) | 59 ТР1= (Q5, Q4) ТР2= (Q10, Q9) | 60 ТР1= (Q6, Q2) ТР2= (Q10, Q7) |
61 ТР1= (Q1, Q7) ТР2= (Q3, Q8) | 62 ТР1= (Q1, Q8) ТР2= (Q5, Q9) | 63 ТР1= (Q1, Q7) ТР2= (Q6, Q8) | 64 ТР1= (Q1, Q8) ТР2= (Q10, Q9) | 65 ТР1= (Q3, Q7) ТР2= (Q5, Q8) |
66 ТР1= (Q3, Q8) ТР2= (Q6, Q9) | 67 ТР1= (Q3, Q7) ТР2= (Q10, Q8) | 68 ТР1= (Q5, Q7) ТР2= (Q6, Q8) | 69 ТР1= (Q5, Q8) ТР2= (Q10, Q9) | 70 ТР1= (Q6, Q7) ТР2= (Q10, Q8) |
71 ТР1= (Q1, Q7) ТР2= (Q3, Q9) | 72 ТР1= (Q1, Q7) ТР2= (Q5, Q8) | 73 ТР1= (Q1, Q7) ТР2= (Q6, Q9) | 74 ТР1= (Q1, Q7) ТР2= (Q10, Q8) | 75 ТР1= (Q3, Q7) ТР2= (Q5, Q9) |
76 ТР1= (Q3, Q7) ТР2= (Q6, Q9) | 77 ТР1= (Q3, Q8) ТР2= (Q10, Q9) | 78 ТР1= (Q5, Q7) ТР2= (Q6, Q9) | 79 ТР1= (Q5, Q7) ТР2= (Q10, Q8) | 80 ТР1= (Q6, Q7) ТР2= (Q10, Q9) |
81 ТР1= (Q1, Q8) ТР2= (Q3, Q9) | 82 ТР1= (Q1, Q7) ТР2= (Q5, Q9) | 83 ТР1= (Q1, Q8) ТР2= (Q6, Q9) | 84 ТР1= (Q1, Q7) ТР2= (Q10, Q9) | 85 ТР1= (Q3, Q8) ТР2= (Q5, Q9) |
86 ТР1= (Q3, Q7) ТР2= (Q6, Q8) | 87 ТР1= (Q3, Q7) ТР2= (Q10, Q9) | 88 ТР1= (Q5, Q8) ТР2= (Q6, Q9) | 89 ТР1= (Q5, Q7) ТР2= (Q10, Q9) | 90 ТР1= (Q6, Q8) ТР2= (Q10, Q9) |
91 ТР1= (Q1, Q2) ТР2= (Q3, Q4) | 92 ТР1= (Q1, Q2) ТР2= (Q5, Q4) | 93 ТР1= (Q1, Q2) ТР2= (Q6, Q4) | 94 ТР1= (Q1, Q2) ТР2= (Q10, Q4) | 95 ТР1= (Q3, Q2) ТР2= (Q5, Q4) |
96 ТР1= (Q3, Q2) ТР2= (Q6, Q4) | 97 ТР1= (Q3, Q2) ТР2= (Q10, Q4) | 98 ТР1= (Q5, Q2) ТР2= (Q6, Q4) | 99 ТР1= (Q5, Q2) ТР2= (Q10, Q4) | 100 ТР1= (Q6, Q2) ТР2= (Q10, Q4) |
Приложение 4. Характеристики узлов и сетей
Характеристики кластера (Cluster)
№ | Тип узла | Количество машин в узле (процессоров) | Мод (Модель) | ЦПУ, ГГц | ОП (Мбайт/с) | Пропускной канал сети (внутренней), Мбит/с | Диск, Мбайт/с | Количество дисков | Цена кластера( тыс.$) |
1 | кластер | 20 | SE | 3,0 | 10000 | 10000 | 200 | 16 | 221 |
2 | кластер | 64 | SD | 2,7 | 10000 | 10000 | 150 | 31 | 1000 |
3 | кластер | 36 | SN | 2,3 | 10000 | 10000 | 200 | 36 | 375 |
4 | кластер | 32 | SE | 2,7 | 13300 | 10000 | 200 | 16 | 300 |
5 | кластер | 64 | SD | 3,6 | 13300 | 10000 | 50 | 288 | 2000 |
6 | кластер | 80 | SN | 2,4 | 13300 | 10000 | 30 | 640 | 3500 |
Характеристики клиента (PC)
№ | Тип | Количество машин в узле (рабочих станций) | Мод (Модель) | ЦПУ, ГГц | ОП (Мбайт/с) | Пропускной канал сети (внутренней), Мбит/с | Диск, Мбайт/с | Количество дисков |
1 | клиент | 5 | - | - | - | - | - | - |
2 | клиент | 10 | - | - | - | - | - | - |
3 | клиент | 20 | - | - | - | - | - | - |
Характеристики сетей
№ | Скорость сети (Мбит/с) | Узлы в сети |
1 | 1000 | Cluster#№, PC#№ |
2 | 100 | Cluster#№, PC#№ |
Варианты:
1. Cluster #1, PC#1, Сеть#1 2. Cluster #2, PC#1, Сеть#1 3. Cluster #3, PC#1, Сеть#1 4. Cluster #4, PC#1, Сеть#1 5. Cluster #5, PC#1, Сеть#1 6. Cluster #6, PC#1, Сеть#1 7. Cluster #1, PC#1, Сеть#2 8. Cluster #2, PC#1, Сеть#2 9. Cluster #3, PC#1, Сеть#2 10. Cluster #4, PC#1, Сеть#2 11. Cluster #5, PC#1, Сеть#2 12. Cluster #6, PC#1, Сеть#2 | 13. Cluster #1, PC#2, Сеть#1 14. Cluster #2, PC#2, Сеть#1 15. Cluster #3, PC#2, Сеть#1 16. Cluster #4, PC#2, Сеть#1 17. Cluster #5, PC#2, Сеть#1 18. Cluster #6, PC#2, Сеть#1 19. Cluster #1, PC#2, Сеть#2 20. Cluster #2, PC#2, Сеть#2 21. Cluster #3, PC#2, Сеть#2 22. Cluster #4, PC#2, Сеть#2 23. Cluster #5, PC#2, Сеть#2 24. Cluster #6, PC#2, Сеть#2 |
Приложение 5. Параметры обращений к транзакциям.
REQUEST № | Частота (кол/ч) – для online, Число пакетов – для offline | тип request | узел (откуда) | транзакция |
1 | 2 | online | PC#№ | ТР1 |
2 | 4 | online | PC#№ | ТР2 |
3 | 10 | offline | Cluster#№ | ТР1 |
4 | 20 | offline | Cluster#№ | ТР2 |
Варианты обращений к транзакциям: