Лабораторная работа №3. Распределенные запросы. Синонимы. Представления. Цель работы. Изучить понятия и механизмы использования распределенных запросов, синонимов и представлений в СУБД INFORMIX-Online. Предварительные условия 1. На сервере ol_serv3 существует база данных, созданная пользователем Informix на предыдущей лабораторной работе. 2. В этой базе данных существуют таблицы citizen, doctype, sells. При необходимости создать. Порядок выполнения работы Задание 1. Выполнение запроса к таблицам, размещенным на разных серверах. Структура распределенного запроса на выбор данных в общем случае выглядит следующим образом: SELECT [UNIQUE] <список выборки> FROM [OUTER] <имя_базы_данных_1>[@<имя_сервера_1>]:<имя_таблицы_1> <имя_псевдонима_1>, <имя_базы_данных_2>[@<имя_сервера_2>]:<имя_таблицы_2> <имя_псевдонима_2> [WHERE <условия>] [GROUP BY <список атрибутов>] [HAVING <условия>] [ORDER BY <список атрибутов>] [INTO TEMP <имя таблицы>] 1. В качестве примера используется следующий запрос: select c.family, c.name, cfname, dt.doctype, s.product_name, sum(summa) summa from sells s, citizen c, outer(doctype dt) where c.citizen_id=s.citizen_id and dt.doctype_id=c.doctype_id group by 1,2,3,4,5 2. Открыть соединение со вторым экземпляром сервера Informix с именем ol_serv3a (имя сервера и параметры соединения указывает преподаватель): a. запустить утилиту Informix dbaccess; b. создать соединение с сервером Informix с помощью меню Connection/Connect. Выбрать сервер с именем ol_serv3a. Имя пользователя и пароль указывает преподаватель. 3. Создать на сервере ol_serv3a новую базу данных, для этого в меню Database/Create указать имя создаваемой базы данных. 4. В созданной базе данных создать таблицу sells. 5. Модифицировать SQL-запрос таким образом, чтобы первая таблица выбиралась из базы данных, созданной на сервере ol_serv3a, остальные – из базы данных, созданной на сервере ol_serv3, использованной в предыдущих лабораторных работах. Выполнить запрос. Месторасположение таблиц, к которым обращается запрос до и после модификации, схематично представлено на рисунке ниже: Сервер ol_serv3 Сервер ol_serv3a <Таблица_1_old> <Таблица_1_new> <Таблица_2_old> <Таблица_3_old> Запрос до модификации Запрос после модификации Задание 2. Использование синонимов таблиц. Синоним – это имя, которое можно использовать вместо другого имени. Понятие синонима существует не в любой СУБД. Синонимы служат в основном для удобства обращения к таблицам внешних баз данных. Рекомендация. Синонимы также могут использоваться для скрытия местонахождения таблиц. Синоним создается командой: CREATE SYNONYM <имя синонима> FOR <полное имя таблицы> При выполнении указанной команды синоним помещается в таблицу системного каталога с именем syssyntable в текущей базе данных. После этого он становится доступным любому запросу в пределах этой базы данных. Модифицировать запрос, созданный по заданию 5-1: 1. Создать в базе данных на сервере ol_serv3a синоним для второй запроса - таблицы citizen: a. запустить утилиту Informix dbaccess; b. создать соединение с сервером Informix с помощью меню Выбрать сервер с именем ol_serv3a. Выбрать базу данных. Connection/Connect. c. создать синоним с помощью команды CREATE SYNONYM <имя_синонима> FOR <имя_базы_данных_1>@ol_serv3:<имя_таблицы_1> где имя синонима формируется по следующему правилу: <имя_синонима> = <имя_таблицы_1>_syn а <имя_базы_данных_1> - это имя базы данных на сервере ol_serv3. 2. Модифицировать SQL-запрос таким образом, чтобы вместо второй таблицы использовался созданный синоним. Выполнить запрос. Задание 3. Использование представлений. Представление, или «псевдотаблица» (VIEW) - это таблица, базирующаяся на других существующих таблицах. Понятие представления существует практически в любой реляционной СУБД. Представление формируется в результате синтеза данных либо только из таблиц базы данных, либо из таблиц и других представлений. Для создания представления необходимо выполнить следующий запрос: CREATE VIEW <имя_представления> [(перечень наименований колонок, разделенных запятой)] AS <SQL-запрос на выборку данных из существующих таблиц> В представленном ниже примере создается представление с именем Stuff для выборки списка сотрудников с указанием ФИО, должности и отдела. Пример демонстрирует, что колонки представления могут иметь имена, не совпадающие с именами соответствующих им базовых колонок. CREATE VIEW Stuff (otdel, dolgnost, fam) AS SELECT t2.department_num, t1.position, t1.second_name FROM person t1, departments t2 WHERE t1.department_id = t2.department_id Модифицировать запрос, созданный по заданию 5-1: 1. Создать в базе данных на сервере ol_serv3 представление, базирующееся на первой по порядку таблице выбранного запроса (таблице с именем <имя_таблицы_1_old>) (см. шаг 4 задания 5-1): a. запустить утилиту Informix dbaccess; b. создать соединение с сервером Informix с помощью меню Connection/Connect. Выбрать сервер с именем ol_serv3. Выбрать базу данных, в которой находится таблица с именем <имя_таблицы_1_old>; c. создать представление с помощью команды CREATE VIEW <имя_представления> AS SELECT * FROM <имя_таблицы_1_old> , где имя представления формируется по следующему правилу: <имя_представления> = <имя_таблицы_1_old>_view Созданное представление должно содержать все столбцы исходной таблицы, а также дополнительный столбец, вычисляемый по формуле: (quantity * (price * 10/100)). 2. Модифицировать SQL-запрос таким образом, чтобы вместо первой таблицы использовалось созданное представление. Выполнить запрос.