Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Создайте уникальный кластерный индекс для таблицы книги. Обоснуйте выбор полей для индексирования.Содержание книги
Похожие статьи вашей тематики
Поиск на нашем сайте
Т.к. кластеризация дает преимущество в том случае, если большую часть данных, которые выбираются из таблицы, составляют группы индексированных данных, а не случайно выбранные отдельные данные, т.к. такие группы располагаются на одной и той же физической странице (или последовательных страницах). Для таблицы Book естественной представляется выборка групп записей по полю Author, поэтому и создадим кластерный индекс по этому полю.
CREATE INDEX idx_author ON "Book" (author); CLUSTER "Book" USING idx_author
Создайте представление для вывода трех заказчиков, имеющих наибольшее количество заказов.
CREATE VIEW max_zakaz_3 AS SELECT COUNT(zakaz.*) AS kolvo, client.name FROM client, zakaz WHERE zakaz.num_client=client.num_client GROUP BY client.num_client ORDER BY kolvo DESC LIMIT 3
Создайте представление, которое выводило бы данные о поставках, упорядоченные по наименованию издательства и количеству книг.
CREATE VIEW postavka_cnt AS SELECT postavchik.name, "Book".name, postavka.cnt FROM postavchik, postavka, "Book" WHERE postavka.num_postavchik=postavchik.num_suppl AND postavka.num_book="Book".num_book ORDER BY postavchik.name, postavka.cnt
Создайте представление, которое выводило бы информацию о неоплаченных заказах.
CREATE VIEW neoplata_zakaz AS SELECT client.name AS zakazchik, "Book".name AS Kniga, zakaz.data AS data_zakaz FROM "Book", client, zakaz WHERE zakaz.num_book="Book".num_book AND zakaz.num_client=client.num_client AND zakaz.pay='Нет' ORDER BY zakazchik
Напишите инструкцию, результатом выполнения которой была бы вставка нескольких строк в таблицу Сотрудники, созданную ранее.
INSERT INTO "Sotrudnik" (fam_im) VALUES ('Кротов Игорь'); INSERT INTO "Sotrudnik" (fam_im, doljnost) VALUES ('Силко Валерий', 'консультант'); INSERT INTO "Sotrudnik" (fam_im, doljnost, komission) VALUES ('Стельмах Алексей', 'младший продавец', 4); INSERT INTO "Sotrudnik" (fam_im, doljnost, data_priem) VALUES ('Стельмах Алексей', 'младший продавец', '2014-03-21');
Напишите инструкцию, результатом выполнения которой было бы удаление всех неоплаченных на текущую дату заказов из таблицы Заказы.
DELETE FROM zakaz WHERE pay='Нет'
17. Создайте таблицу такой же структуры, что и таблица Сотрудники, и напишите инструкцию для вставки в нее данных обо всех сотрудниках из таблицы Сотрудники, оформивших более трех заказов и имеющих стаж не менее 5 лет.
CREATE TABLE sotrudniki2 AS SELECT "Sotrudnik".* FROM "Sotrudnik", zakaz WHERE zakaz.lic_sotrudnik ="Sotrudnik".lic_nomer AND "Sotrudnik".data_priem < (now()-interval '5 year') GROUP BY "Sotrudnik".lic_nomer HAVING COUNT("Sotrudnik".*)>3
Напишите инструкцию, результатом выполнения которой было бы удаление из таблицы Заказчики тех заказчиков, которые сделали последний заказ более 1 года тому назад. Удалите соответствующие заказы из таблицы Заказы.
CREATE TEMPORARY TABLE ttt AS (SELECT client.num_client FROM client, zakaz WHERE client.num_client=zakaz.num_client GROUP BY client.num_client HAVING MAX(zakaz.data)<(now()-interval '1 year'));
DELETE FROM client WHERE num_client IN (SELECT num_client FROM temp);
DELETE FROM zakaz WHERE num_client IN (SELECT num_client FROM temp);
DROP TABLE IF EXISTS ttt;
19. Создайте представления для ролей «Директор», «Закупщик», «Продавец», исходя из того, что им необходимо создавать отчеты:
CREATE VIEW dir_reiting_book AS SELECT "Book".name, COUNT(zakaz.*) AS kolvo FROM "Book", zakaz WHERE "Book".num_book=zakaz.num_book GROUP BY "Book".num_book ORDER BY kolvo DESC, name;
CREATE VIEW dir_reiting_sotr AS SELECT "Sotrudnik".fam_im, COUNT(zakaz.*) AS kolvo, SUM("Book".price) AS cena FROM "Sotrudnik", zakaz, "Book" WHERE zakaz.lic_sotrudnik="Sotrudnik".lic_nomer AND zakaz.num_book="Book".num_book GROUP BY "Sotrudnik".lic_nomer ORDER BY cena DESC;
CREATE VIEW zak_postavchiki AS SELECT postavchik.name, postavka.cnt AS kolvo, postavka.data, "Book".price AS cena FROM postavchik, postavka, "Book" WHERE postavchik.num_suppl=postavka.num_postavchik AND postavka.num_book="Book".num_book AND "Book".name='Іван Богун'
CREATE VIEW zak_knigi AS SELECT * FROM "Book" ORDER BY name;
Для проверки возможности добавлять информацию: INSERT INTO zak_knigi (name, author, publish, price, balance) VALUES ('Москва 2042', 'Войнович', 'UAPRINT', 98, 100);
CREATE VIEW prod_prodazha AS SELECT "Sotrudnik".fam_im, COUNT(zakaz.*) as kolvo FROM "Sotrudnik", zakaz WHERE zakaz.lic_sotrudnik="Sotrudnik".lic_nomer AND zakaz.data='2016-03-20' GROUP BY "Sotrudnik".lic_nomer ORDER BY "Sotrudnik".fam_im
CREATE ROLE direktor LOGIN PASSWORD '1111'; GRANT SELECT ON dir_reiting_book TO direktor; GRANT SELECT ON dir_reiting_sotr TO direktor; GRANT SELECT ON "Book" TO direktor; GRANT SELECT ON zakaz TO direktor; GRANT SELECT ON "Sotrudnik" TO direktor;
CREATE ROLE zakupchik LOGIN PASSWORD '1111'; GRANT SELECT, INSERT ON zak_knigi TO zakupchik; GRANT SELECT ON zak_postavchiki TO zakupchik; GRANT SELECT ON "Book" TO zakupchik; GRANT SELECT ON postavka TO zakupchik; GRANT SELECT ON postavchik TO zakupchik;
CREATE ROLE prodavec LOGIN PASSWORD '1111' GRANT SELECT, INSERT ON zak_knigi TO prodavec; GRANT SELECT ON prod_prodazha TO prodavec; GRANT SELECT ON "Book" TO prodavec; GRANT SELECT ON zakaz TO prodavec; GRANT SELECT ON "Sotrudnik" TO prodavec;
Выводы Выполняя эту лабораторную работу я углубил свои знания в командах SQL. Больше работая не с мастерами построения каких либо объектов, а непосредственно в окне выполнения пользовательских запросов. Тем самым выработал навыки программирования в среде PostgreSQL.
Раздел «Ход работы» должен содержать инфологическую модель БД (на языке таблица-связь) для своего варианта и БД BookShop; отчеты DDL для всех таблиц БД BookShop и БД своего варианта; скрипты и результаты выполнения запросов для БД BookShop и БД своего варианта.
**************************************************************************
5 Контрольные вопросы
|
||||||||||
|
Последнее изменение этой страницы: 2017-01-25; просмотров: 574; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.156 (0.006 с.) |