Лабораторная работа № 6 Изучение возможностей СУБД Cache по созданию и ведению баз данных 1. Цель работы Целью работы является изучение возможностей СУБД Cache по созданию и ведению баз данных. 2. Задачи Задачами лабораторной работы являются овладение навыками работы с классами объектно-ориентированной СУБД Cache, управления экземплярами классов, освоение программных технологий доступа к базам данных Cache на основе технологии Cache Server Pages. 3. Теоретическая часть Объектный подход. Наряду с реляционным подходом к разработке информационных приложений для баз данных все большее распространение получает объектный подход. Это связано с ограниченностью самой реляционной модели, например, при описании и манипулировании сложными структурами данных, усложнением запросов при выборках данных из нескольких таблиц, снижением производительности при соединениях больших таблиц и др. Объектный подход дает такие преимущества как: естественное представление данных; возможность разработки структур любого уровня сложности; высокую производительность процесса разработки; использование объектно-ориентированных CASE-средств проектирования и разработки приложений. Классы. В объектных системах объекты одного типа принято объединять в классы объектов. Отдельные сущности этих классов – индивидуальные объекты – называют экземплярами класса. Например, с точки зрения объектной технологии, каждый человеческий индивидуум – это экземпляр класса «Человек». Класс объектов определяет свойства и методы, то есть тот интерфейс, который является единым для всех его экземпляров. Экземпляры одного класса могут отличаться лишь значениями своих свойств, но не своими методами. Методы устанавливаются для всех экземпляров при определении класса. О наследовании говорят, когда класс объектов порождается из другого класса. Порожденный класс (подкласс) находится со своим родительским классов (суперклассом) в отношении «подкласс есть суперкласс» и наследует все его свойства и методы. Далее подкласс конкретизируется путем добавления новых свойств и методов, отсутствующих в суперклассе. Кроме того, переписывая унаследованные методы, можно изменять поведение подкласса по сравнению с его суперклассом. Классы, которые могут служить лишь основой для определения подклассов, называются абстрактными и не допускают создания своих экземпляров. Классы, от которых нельзя порождать подклассы, называются финальными. Когда за неким общим интерфейсом скрывается различный образ действий, говорят о полиморфизме. Единая архитектура данных. В рамках этой архитектуры существует единое описание объектов и таблиц, отображаемых непосредственно в многомерные структуры ядра базы данных, ориентированного на обработку транзакций. Имеющиеся серверы Cache Objects и Cache SQL предоставляют в распоряжение разработчика все наиболее популярные интер1 фейсы, посредством которых и унаследованные реляционные, и новые объектноориентированные прикладные системы получают равноправный доступ к данным. Объектная модель Cache соответствует стандарту ODMG (Object Data Management Group). При этом основные операции Cache Objects базируются на определении классов объектов в Cache Studio (или непосредственно на языке CDL) и последующей компиляции в исполняемый код (Run-Time). Важнейшее свойство объектной базы данных – хранимость: объекты длительное время хранятся в дисковой памяти и при необходимости могут оттуда извлекаться. СУБД Cache. Высокопроизводительная постреляционная СУБД Cache появилась в 1997 году, фирмой-разработчиком является компания InterSystems. Эта СУБД позиционируется как постреляционная. Она поддерживает как объектную модель данных, ориентирующуюся на стандарт ODMG 2.0, так и реляционную модель данных, ориентирующуюся на стандарт SQL-92. Обе эти модели опираются непосредственно на оригинальную многомерную структуру данных и максимально синхронизированы. Это отличает идеологию построения СУБД Cache от идеологии построения так называемых объектно-реляционных систем, в которых объектная абстракция опирается на реляционную модель данных. Главные свойства Cache – развитая объектная технология, быстрота разработки Webприложений, усовершенствованная база SQL и уникальная технология получения данных – позволяют достичь такого высокого уровня производительности и масштабируемости, который был недоступен в рамках реляционной технологии. Среда разработки Cache. Для разработки приложений и работы с базами данных система Cache предлагает следующий набор утилит: Редактор конфигурации Studio Terminal Проводник Панель управления SQL-менеджер Все утилиты запускаются из Cache-куба, который располагается в правой части экрана, щелчком правой кнопки мыши. Cache Studio. Классы в Cache обычно определяются с помощью интегрированной среды разработки классов Cache Studio. Благодаря единой архитектуре данных, определения классов с их свойствами и методами автоматически превращаются в таблицы со столбцами и ключевыми полями. Полное определение класса формируется на языке CDL (Class Definition Language) и сохраняется в базе данных во внутреннем представлении. Элементы определения класса Cache: Имя класса. Имя класса состоит из пакета (package) и собственно имени, разделенных точкой, например, Book.Reader. Ключевые слова. Определение класса может быть изменено посредством ключевых слов. Все ключевые слова не обязательны и имеют стандартные значения на тот случай, если они не заданы. Свойства класса. Данные, хранимые в объектах. Свойства могут быть константами, встроенными объектами, ссылками на хранимые объекты. Классы типов данных не содержат свойств. Методы класса. Программный код Cache ObjectScript, реализующий те или иные функции. Параметры класса. Значения, которые используются при компиляции класса для его настройки. Например, параметр PROPERTYVALIDATION=2 указывает на то, что проверку значений свойств надо производить при сохранении объекта. Запросы класса. Подбор множества объектов с заданными свойствами. 2 Индексы класса. Структуры, оптимизирующие доступ к объектам. Каждый элемент класса должен иметь отличное от других имя. Имя case-чувствительно, но должна сохраняться однозначность имен при написании их прописными (большими) буквами. Имена, начинающиеся со знака процент (%) зарезервированы за элементами системных классов. Расширенные типы данных. Коллекция – многократно повторяемое свойство. Поток данных (Binary Large Objects – BLOBs) – большие неструктурированные множества данных. Встроенный объект – класс в классе. Утилита Cache Terminal может быть использована для отладки программ, процедур, функций, проверки работы отдельных операторов. Работа ведется в режиме командной строки. Утилита чрезвычайно проста. После приглашения набирается команда и нажимается ENTER. Здесь же выводится результат выполнения команды. Cache ObjectScript. В СУБД Cache реализован собственный язык программирования Cache Object Script (COS). COS – это расширенная и переработанная версия языка программирования M (ANSI MUMPS). В первую очередь, COS предназначен для написания исходного кода методов класса. Кроме этого, в Cache вводится понятие Cache-программы. Cacheпрограмма не является составной частью классов и предназначена для написания прикладного программного обеспечения для текстовых терминальных систем. Веб-программирование в Cache. Базовой технологией, используемой для организации веб-доступа к базам данных Cache, является технология Cache Server Pages (CSP – серверные страницы Cache). Технология CSP предлагает изящные средства для создания ыстродействующих, хорошо масштабируемых веб-приложений за короткое время. Она также упрощает дальнейшее сопровождение и развитие таких приложений. Технология CSP позволяет создавать динамическое веб-содержимое в зависимости от времени, отношений между сохраненными данными и т. д. В ее основе лежат HTMLстраницы – так называемые CSP- страницы – содержащие специальные теги, которые выполняются на сервере Cache каждый раз, когда происходит обращение к ним, и возвращают индивидуальное содержимое. Технология CSP может быть интегрирована не только с HTML, но также и с XML, графическими и другими двоичными файлами. CSP-страницы могут быть созданы двумя различными путями: – как HTML/XML-файлы с внедренными CSP-тегами и другими элементами CSP (тегориентированная разработка); – непосредственно как классы Cache, унаследованные от %CSP.Page (кодориентированная разработка). Чтобы сервер Cache и веб-сервер могли работать вместе, нужно инсталлировать на вебсервере интерфейс (шлюз) с Cache – шлюз CSP. Cache предоставляет такие шлюзы для Microsoft IIS и Apache Web Server, а также для некоторых других веб-серверов. После установки это шлюз сможет перенаправлять запросы браузера в Cache. Основываясь на расширениях файлов, шлюз определяет, предназначен ли запрос веб-серверу или Cache. Данные, отправленные браузером, интерпретируются сервером Cache. В зависимости от этих данных приложение Cache генерирует код HTML (или код другого типа, например, XML), который возвращается через веб-сервер для отображения в браузере клиента. Веб-сервер не является обязательным компонентом среды разработки, именно поэтому Cache поставляется со встроенным веб-сервером. Однако использовать его рекомендуется только для целей отладки в однопользовательской среде, поскольку в нем реализована минимальная часть протокола HTTP. Веб-сервер Cache устанавливается автоматически при инсталляции Cache и может быть использован через порт с номером 1972. 3 4. Порядок выполнения работы А. Классы, свойства, методы 1. Запустить СУБД Cache: Пуск | Программы | Cache | Cacheweb | Старт Cache 2. Открыть визуальную среду Cache Studio: Пуск | Программы | Cache | Cacheweb | Studio ► ф. Studio 3. Установить соединение с сервером: ф. Соединение с сервером | Выберите из списка сервер Cache ← Cacheweb(localhost(1972)); кн. OK ► ф. Установить соединение с Cacheweb; Имя пользователя ← _system; Пароль ← SYS; кн. OK ► ф. Менеджер соединений Cache; Область ← USER; кн. OK ► ф. _SYSTEM – CACHEWEB/USER-Default __system – Studio 4. Создать класс Person (персона): ф. Studio | ф. Рабочая поверхность | пр. кн. на Классы; выбр. Создание класс ► ф. Мастер создания класса | Укажите имя Класса ← Person; Введите описание данного Класса ← описание участников учебного процесса; кн. Далее ► ф. Тип класса ← Persistent (может храниться в базе данных); кн. Далее ► Имя таблицы SQL ← Person; кн. Готово ► ф. _SYSTEM-CACHEWEB/USER/User.Person.cls с кодом создания класса 5. Определить свойства класса Person – задать свойство persID (идентификатор персоны, уникальное число): ф. Studio | ф. Рабочая поверхность | Классы | User | выделить Person; панель инструментов | кн. Новое свойство ► ф. Мастер создания свойств | Укажите имя нового свойства ← persID; Введите описание нового свойства ← Идентификатор персоны; кн. Далее ► ф. Тип свойства | уст. Единичное значение типа ← %Counter; кн. Далее ► ф. Характеристики свойства | уст. Это свойство обязательное (не пустое); Индексируемое. Создать индекс для этого свойства; Уникально. Создать уникальный индекс для этого свойства; имя поля для SQL ← persID; кн. Готово ► – задать свойство fam (фамилия персоны, текстовое, до 20 символов): ф. Studio | ф. Рабочая поверхность | Классы | User | выделить Person; панель инструментов | кн. Новое свойство ► ф. Мастер создания свойств | Укажите имя нового свойства ← fam; Введите описание нового свойства ← Фамилия персоны; кн. Далее ► ф. Тип свойства | уст. Единичное значение типа ← %String; кн. Далее ►ф. Характеристики свойства | уст. Это свойство обязательное (не пустое); имя поля для SQL ← fam; кн. Далее ►ф. Параметры свойства | MAXLEN ← 20; кн. Готово ► – аналогичным образом создать свойства im (имя) и ot (отчество). 6. Создать подкласс Student (Студент) родительского класса Person: ф. Studio | ф. Рабочая поверхность | Классы | User | пр. кн. на Person; выбр. Создание подкласса… ► ф. Мастер создания Класса | 4 Укажите имя Класса ← Student; Введите описание данного Класса ← Данные студентов; кн. Далее ► ф. Тип класса ← Расширения: Имя СуперКласса ← User.Person; кн. кн. Готово ► ф. _SYSTEM-CACHEWEB/USER/User.Student.cls с кодом создания класса 7. Определить свойства класса Student: – задать свойство noZK (номер зачетной книжки, ровно 6 символов): ф. Studio | ф. Рабочая поверхность | Классы | User | выделить Student; панель инструментов | кн. Новое свойство ► ф. Мастер создания свойств | Укажите имя нового свойства ← noZK; Введите описание нового свойства ← Номер зачетной книжки; кн. Далее ► ф. Тип свойства | уст. Единичное значение типа ← %String; кн. Далее ► ф. Характеристики свойства | уст. Это свойство обязательное (не пустое); Уникально. Создать уникальный индекс для этого свойства; имя поля для SQL ← noZK; кн. Далее ►ф. Параметры свойства | MINLEN ← 6; MAXLEN ← 6; кн. Готово ► – задать свойство spec (название специальности, до 7 символов): ф. Studio | ф. Рабочая поверхность | Классы | User | выделить Student; панель инструментов | кн. Новое свойство ► ф. Мастер создания свойств | Укажите имя нового свойства ← spec; Введите описание нового свойства ← Название специальности; кн. Далее ► ф. Тип свойства | уст. Единичное значение типа ← %String; кн. Далее ► ф. Характеристики свойства | уст. Это свойство обязательное (не пустое); имя поля для SQL ← spec; кн. Далее ►ф. Параметры свойства | MAXLEN ← 7; кн. Готово ► – задать свойство gr (номер группы, число от 1 до 99): ф. Studio | ф. Рабочая поверхность | Классы | User | выделить Student; панель инструментов | кн. Новое свойство ► ф. Мастер создания свойств | Укажите имя нового свойства ← gr; Введите описание нового свойства ← Номер группы; кн. Далее ► ф. Тип свойства | уст. Единичное значение типа ← %Integer; кн. Далее ► ф. Характеристики свойства | уст. Это свойство обязательное (не пустое); имя поля для SQL ← gr; кн. Далее ►ф. Параметры свойства | MAXVAL ← 99; MINVAL ← 1; кн. Готово ► – задать свойство kurs (название специальности, до 7 символов): ф. Studio | ф. Рабочая поверхность | Классы | User | выделить Student; панель инструментов | кн. Новое свойство ► ф. Мастер создания свойств | Укажите имя нового свойства ← kurs; Введите описание нового свойства ← Курс; кн. Далее ►ф. Тип свойства | уст. Единичное значение типа ← %Integer; кн. Далее ►ф. Характеристики свойства | уст. Это свойство обязательное (не пустое); имя поля для SQL ← kurs; кн. Далее ►ф. Параметры свойства | MAXVAL ← 6; MINVAL ← 1; кн. Готово ► – задать свойство data_r (дата рождения): ф. Studio | ф. Рабочая поверхность | Классы | User | выделить Student; панель инструментов | кн. Новое свойство ► ф. Мастер создания свойств | Укажите имя нового свойства ← data_r; Введите описание нового свойства ← Номер зачетной книжки; кн. Далее ► 5 ф. Тип свойства | уст. Единичное значение типа ← %Date; кн. Далее ►ф. Характеристики свойства | не уст. Это свойство обязательное (не пустое); имя поля для SQL ← data_r; кн. Готово ► – задать свойство biogr (биография): ф. Studio | ф. Рабочая поверхность | Классы | User | выделить Student; панель инструментов | кн. Новое свойство ► ф. Мастер создания свойств | Укажите имя нового свойства ← biogr; Введите описание нового свойства ← Биография; кн. Далее ► ф. Тип свойства | уст. Единичное значение типа ← %Text; кн. Далее ►ф. Характеристики свойства | не уст. Это свойство обязательное (не пустое); имя поля для SQL ← biogr; кн. Готово ► 8. Определить первичный ключ класса Person: ф. Studio | ф. Рабочая поверхность | Классы | User | выделить Person; панель инструментов | кн. Новый индекс ► ф. Мастер создания Индекса | Выберите имя Индекса ← pkPerson; кн. Далее ► ф. Тип индекса | уст. Это первичный ключ для класса; кн. Далее ► ф. Свойства индекса; кн. Атрибут (правый верхний угол) ► ф. Атрибут | Свойство ← id; кн. OK ► ф. Свойства индекса; кн. Далее ► ф. Данные индекса | выбр. id; кн. [>]; кн. OK 9. Создать уникальный индекс fio класса Person: ф. Studio | ф. Рабочая поверхность | Классы | User | выделить Person; панель инструментов | кн. Новый индекс ► ф. Мастер создания Индекса | Выберите имя Индекса ← UniqueFIO; кн. Далее ► ф. Тип индекса | уст. Это уникальный индекс; кн. Далее ► ф. Свойства индекса; кн. Атрибут (правый верхний угол) ► ф. Атрибут | Свойство ← fam; кн. OK ► ф. Свойства индекса; кн. Атрибут (правый верхний угол) ► ф. Атрибут | Свойство ← im; кн. OK ► ф. Свойства индекса; кн. Атрибут (правый верхний угол) ► ф. Атрибут | Свойство ← ot; кн. OK ► ф. Свойства индекса; кн. Далее ► ф. Данные индекса | выбр. fam; кн. [>];выбр. im; кн. [>]; выбр. ot; кн. [>]; кн. OK 10. Создать метод Report класса Person, выводящий на экран значения фамилии, имени и отчества: ф. Studio | ф. Рабочая поверхность | Классы | User | выделить Person; панель инструментов | кн. Новый метод ► ф. Мастер создания Метода | Укажите имя нового Метода ← Report; кн. Далее ► ф. Подпись метода; кн. Далее ► ф. Характеристики метода; уст. Class Method; кн. Далее ► ф. Реализация; ввести код: write "Фамилия"_..fam write ! write "Имя"_..im write ! write "Отчество"_..ot write ! кн. Готово 11. Сохранить все изменения: Файл | Сохранить все 6 12. Выполнить компиляцию классов: ф. Studio | ф. Рабочая поверхность | Классы | User | пр. кн. на Person; выбр. Компиляция 'Person' ► ф. Вывод – Компиляция успешно завершена аналогичным образом – для класса Student; 13. Аналогичным образом создать класс Subject (справочник предметов) со свойствами: – Идентификатор предмета predmID (числовое, обязательное, первичный ключ) – Название name (название предмета (текстовое, обязательное)); – Цикл cycle (цикл дисциплин, к которым относится предмет (текстовое, обязательное)); – Объем hrs (количество часов (числовое, обязательное)); – Кафедра dept (название кафедры, на которой ведется преподавание предмета (текстовое, необязательное)). – указать первичный ключ класса Subject; – определить метод Report для вывода информации о предмете. 14. Создать класс Uspev (успеваемость студентов по предметам): ф. Studio | ф. Рабочая поверхность | пр. кн. на Классы; выбр. Создание класс ► ф. Мастер создания класса | Укажите имя Класса ← Uspev; Введите описание данного Класса ← Успеваемость студентов; кн. Далее ► ф. Тип класса ← Persistent (может храниться в базе данных); кн. Далее ► Имя таблицы SQL ← Person; кн. Готово ► ф. _SYSTEM-CACHEWEB/USER/User.Uspev.cls с кодом создания класса 15. Определить свойства класса Uspev: – задать свойство student (ссылка на класс Student): ф. Studio | ф. Рабочая поверхность | Классы | User | выделить Uspev; панель инструментов | кн. Новое свойство ► ф. Мастер создания свойств | Укажите имя нового свойства ← student; Введите описание нового свойства ← Название специальности; кн. Далее ► ф. Тип свойства | уст. Единичное значение типа ← Student; кн. Далее ► ф. Характеристики свойства | уст. Это свойство обязательное (не пустое); имя поля для SQL ← student; кн. Готово ► – аналогичным образом задать свойство predmet (ссылка на класс Subject) – задать свойство ocenka (оценка, число от 2 до 5): ф. Studio | ф. Рабочая поверхность | Классы | User | выделить Uspev; панель инструментов | кн. Новое свойство ► ф. Мастер создания свойств | Укажите имя нового свойства ← ocenka; Введите описание нового свойства ← Оценка; кн. Далее ►ф. Тип свойства | уст. Единичное значение типа ← %Integer; кн. Далее ►ф. Характеристики свойства | уст. Это свойство обязательное (не пустое); имя поля для SQL ← kurs; кн. Далее ► ф. Параметры свойства | MAXVAL ← 5; MINVAL ← 2; кн. Готово ► – задать свойство data (дата получения оценки): ф. Studio | ф. Рабочая поверхность | Классы | User | выделить Uspev; панель инструментов | кн. Новое свойство ► ф. Мастер создания свойств | Укажите имя нового свойства ← data; Введите описание нового свойства ← дата получения оценки; кн. Далее ► ф. Тип свойства | уст. Единичное значение типа ← %Date; кн. Далее ► 7 ф. Характеристики свойства | не уст. Это свойство обязательное (не пустое); имя поля для SQL ← data; кн. Готово ► – определить составной первичный ключ класса Uspev (свойства student и predmet). 16. Связать классы, сделав классы студентов и предметов родительскими, а класс успеваемости – дочерним: ф. Studio | ф. Рабочая поверхность | Классы | User | выделить Uspev; панель инструментов | кн. Новый Внешний Ключ ► ф. Мастер создания Внешнего Ключа | Укажите имя для нового внешнего ключа ← FKUspevSubjects; кн. Далее ► ф. Атрибуты | выбр. Predmet; кн. [>]; кн. Далее ► ф. Создание ключа | Класс ← User.Subject; Индекс ← PKSubjects; кн. Готово аналогичным образом связать классы Uspev и Student. Б. Экземпляры классов 1. Создать экземпляры классов Student (не менее 3), Subject (не менее 2) и Uspev (не менее 7). Проверить работоспособность ограничений значений полей, уникальности и др., предусмотренные при задании структуры классов: – запустить терминал Cache Пуск | Программы | Cache | Cacheweb | Studio ► ф. Терминал – создать экземпляр класса Student: после приглашения на ввод USER> ввести код: Set student=##class(User.Student).%New() нажать клавишу [Enter] ►если нет сообщения об ошибке, то экземпляр создан – присвоить свойству id экземпляра класса Student значение "1": после приглашения на ввод USER> ввести код: set student.id=1 нажать клавишу [Enter] ►если нет сообщения об ошибке, то значение присвоено – присвоить свойству fam экземпляра класса Student значение "Фамилия": после приглашения на ввод USER> ввести код: set student.fam="Фамилия" нажать клавишу [Enter] ►если нет сообщения об ошибке, то значение присвоено аналогичным образом присвоить значения остальным свойствам экземпляра класса – одному из свойств экземпляра класса Student присвоить заведомо некорректные данные: после приглашения на ввод USER> ввести код: set student.kurs=9 нажать клавишу [Enter] ► отобразить сообщение об ошибке: после приглашения на ввод USER> ввести код: do $system.OBJ.DisplayError() нажать клавишу [Enter] ►сообщение об ошибке на экране – отобразить значения свойств экземпляра класса Student: 8 после приглашения на ввод USER> ввести код: write student.fam нажать клавишу [Enter] ►если нет сообщения об ошибке, то результат на экране аналогичным образом вывести значения остальных свойств экземпляра – сохранить экземпляр класса Student: после приглашения на ввод USER> ввести код: do student.%Save() нажать клавишу [Enter] ►если нет сообщения об ошибке, то экземпляр сохранен. – освободить переменную student: после приглашения на ввод USER> ввести код: kill student нажать клавишу [Enter] ►если нет сообщения об ошибке, то переменная освобождена. аналогичным образом создать остальные экземпляры класса Student и Subject. – загрузить в переменную st экземпляр класса Student (индекс = 1): после приглашения на ввод USER> ввести код: set st = ##class(User.Student).%OpenId(1) нажать клавишу [Enter] ►переменная создана – вывести данные студента с помощью метода Report: после приглашения на ввод USER> ввести код: do st.Report() нажать клавишу [Enter] ►результаты на экране – загрузить в переменную p экземпляр класса Subject (индекс = 1): после приглашения на ввод USER> ввести код: set st = ##class(User.Subject).%OpenId(1) нажать клавишу [Enter] ►переменная создана – создать экземпляр класса Uspev: после приглашения на ввод USER> ввести код: Set uspev=##class(User.Uspev).%New() нажать клавишу [Enter] ►если нет сообщения об ошибке, то экземпляр создан – присвоить свойству student экземпляра класса Uspev значение из переменной st: после приглашения на ввод USER> ввести код: set uspev.student=st нажать клавишу [Enter] ►если нет сообщения об ошибке, то значение присвоено аналогичным образом присвоить значения оставшимся свойствам класса и создать оставшиеся экземпляры класса Uspev. В. Cache Server Pages 1. Создать статическую CSP-страницу в Cache Studio: – создать новую CSP-страницу: ф. Studio | ф. Рабочая поверхность | пр. кн. на CSP файлы; выбр. Создание CSP файл ► ф. _SYSTEM-CACHEWEB/User/Untitled1.CSP заменить код 9 My page body на Добро пожаловать в Cache Server Pages! – скомпилировать CSP-страницу ф. Studio | ф. Рабочая поверхность | раскр. CSP файлы; пр. кн. на Untitled1.CSP; выбр. Компиляция 'Untitled1.CSP' ► ф. Сохранить как | выбр. CSP/USER; Имя файла ← static.CSP; кн. Сохранить как ► ф. Результат | Компиляция успешно завершена – проверить работоспособность страницы: ф. Studio | ф. Рабочая поверхность | раскр. CSP файлы; пр. кн. на static.CSP; выбр. Показать веб-страницу ► окно браузера с загруженной страницей 2. Создать динамическую CSP-страницу в Cache Studio: – создать новую CSP-страницу: ф. Studio | ф. Рабочая поверхность | пр. кн. на CSP файлы; выбр. Создание CSP файл ► ф. _SYSTEM-CACHEWEB/User/Untitled1.CSP заменить код My page body на <h1>Сведения о студентах</h1> – выполнить запрос к базе данных (класс Student, отображенный в одноименную таблицу): ф. Studio | ф. Рабочая поверхность | ф. _SYSTEM-CACHEWEB/User/Untitled1.CSP ввести код <script language="SQL" name="StudentsInfo"> SELECT id, fam, im, ot, spec, kurs, gr FROM SQLUser.Student </script> – определить HTML-разметку таблицы для отображения результатов запроса: ф. Studio | ф. Рабочая поверхность | ф. _SYSTEM-CACHEWEB/User/Untitled1.CSP ввести код <table border="1"> <tr> <td>ID</td> <td>Фамилия</td> <td>Имя</td> <td>Отчество</td> <td>Специальность</td> <td>Курс</td> <td>Группа</td> </tr> </table> – построить цикл по результату запроса для отображения строк таблицы: ф. Studio | ф. Рабочая поверхность | ф. _SYSTEM-CACHEWEB/User/Untitled1.CSP ввести код: <CSP:WHILE CONDITION="StudentsInfo.Next()"> <tr> <td>#(StudentsInfo.Data("id"))#</td> 10 <td>#(StudentsInfo.Data("fam"))#</td> <td>#(StudentsInfo.Data("im"))#</td> <td>#(StudentsInfo.Data("ot"))#</td> <td>#(StudentsInfo.Data("spec"))#</td> <td>#(StudentsInfo.Data("kurs"))#</td> <td>#(StudentsInfo.Data("gr"))#</td> </tr> </CSP:WHILE> – скомпилировать CSP-страницу и проверить ее работоспособность. Аналогичным образом запрограммировать динамические страницы для отображения данных о предметах (код, название, цикл, объем и кафедра) и успеваемости студентов (фамилия, специальность и группа студента, название предмета, оценка и дата ее получения). 5. Контрольные вопросы 1. К какому классу СУБД относится Cache? 2. Каковы особенности Cache? 3. Как реализуются классы в Cache? 4. Что представляют собой методы в классах Cache? 5. Для чего используются языки программирования Cache Object Script и CPS? 6. Содержание и оформление отчета Отчет должен содержать: – титульный лист, название и цель работы; – скриншоты результатов работы с СУБД Cache; – выводы по работе. 11