Хранилища данных - Задачи к Коллокв…

advertisement
Коллоквиум 1
30 октября 2011 г.
20:38
Задачи
OLAP
Краткое описание предметной области.
Продажа билетов на авиарейсы.
Сущности - номер рейса, время рейса, класс билета, аэропорт вылета, аэропорт прибытия.
Характеристики аэропорта - название, город, страна
1. Требуется построить OLAP схему с нормализованными измерениями.
2. Требуется построить OLAP схему с ненормализованными измерениями.
3. Требуется построить OLAP схему с нормализованными измерениями и хранением агрегатов
(1-2 для примера) в отдельных таблицах.
SQL запросы:
a. ROLLUP, CUBE
b. Windowsing - функции
c. Иерархические запросы (connect by .. Prior ..)
Есть таблицы
товар(номер, название)
покупатель(номер, имя)
продажа(номер_товар, номер_покупатель, дата, кол-во проданного товара, цена за единицу
товара)
1. Построить запрос, выбирающий покупателя из числа купивших максимальное кол-во
телевизоров, который заплатил за них самую дешевую цену. Указать необходимые индексы
для оптимального выполнения запроса.
2. Построить запрос, выбирающий товар, не купленный за последний месяц ни одним
покупателем. Указать необходимые индексы для оптимального выполнения запроса.
3. Построить запрос, выбирающий общее количество денег, потраченное каждым первым
покупателем года. Указать необходимые индексы для оптимального выполнения запроса.
Индексы
Есть таблица test(i number, j number, s varchar2(100))
На таблице созданы индексы
i1(i, j)
i2(i)
i3(j)
i4(i, s)
i5(j, s)
i6(s, i)
i7(s, j)
Необходимо указать, какие индексы могут быть использованы в следующих запросах
1. select * from test where i > 10 and j < 100
2. select * from test where i = 10
3. select * from test where j between 10 and 20 and s like '%data'
4. select * from test where i is null and j > 100 and j < 300
5. select * from test where i is null
6. select * from test where j-100 = 50
7. select * from test where j*2 > 50
8. select * from test where s = '%data'
9. select * from test where s like '%data' and i = 30
10. select * from test where s like 'data%' and i*j = 30
11. select * from test where i*j = 30
12. select * from test where to_char(i) = '111'
13. select * from test where to_char(i) = '111' and to_number(s) > 0
14. select * from test where to_number(s) > 0
15. select * from test where i = to_number('123')
16. select * from test where s = to_char(sysdate)
17. select * from test where i is null or j > 100 and j < 300
18. select * from test where s like '%data' or i = 30
19. select * from test where s like 'data%' or i*j = 30
20. select * from test where s like 'data%' order by i, j
21. select * from test where s like '%data%' order by j
22. select * from test where i*j = 10 order by i
Eсть таблица student(id number not null primary key, family varchar2(100), grp number check (grp
between 1 and 10))
В таблице содержатся данные о студентах 8 факультета 1-6 курсов.
Необходимо создать индексы нужного типа для эффективного выполнения запросов
1. select * from student where id > 100
2. select * from student where id = and grp = 3
3. select * from student where family like 'ИВАНОВ%'
4. select * from student where family like '%ОВА'
5. select * from student where family like 'ИВАНОВ%' and grp in (1, 6)
6. select * from student where family like '%ОВА' and grp in (1, 6)
7. select * from student where family = 'ИВАНОВ' and grp = 1
8. select * from student where id = 12 and grp = 4
9. select * from student where grp = 4
10. select * from student where grp > 0
11. select * from student where family = 'ИВАНОВ' and grp = 4
12. select * from student where id between 1 and 30 and grp = 4
Download