Uploaded by ShestovPV

Постреляционные базы данных

advertisement
3
Содержание
1. Постреляционные СУБД – основные понятия. ................................................................. 6
1.1. Что такое СУБД? ........................................................................................................... 6
Требования, предъявляемые к СУБД ............................................................................. 6
Языки обработки данных ................................................................................................. 7
Язык определения данных ............................................................................................... 7
Язык манипулирования данными ................................................................................... 8
Язык запросов к данным .................................................................................................. 8
Язык управления данными .............................................................................................. 9
Обеспечение целостности хранимых данных ................................................................ 9
Быстрый поиск данных .................................................................................................. 10
Обеспечение многопользовательской работы ............................................................. 11
Архитектура «клиент-сервер» ....................................................................................... 11
Трехзвенная архитектура «клиент-сервер».................................................................. 12
Безопасность хранения данных ..................................................................................... 12
Мягкий сбой .................................................................................................................... 13
Жесткий сбой .................................................................................................................. 13
Обеспечение защиты данных ........................................................................................ 15
1.2. Модели и структуры данных ...................................................................................... 15
Модели и структуры данных ......................................................................................... 15
Основные подходы к реализации СУБД ...................................................................... 15
Реляционные СУБД ........................................................................................................ 16
Реляционная алгебра ...................................................................................................... 17
Недостатки реляционных баз данных .......................................................................... 17
Объектно-ориентированые базы данных ..................................................................... 19
Достоинства объектно-ориентированных СУБД ........................................................ 20
Недостатки объектно-ориентированных СУБД .......................................................... 20
Объектно-реляционные СУБД ...................................................................................... 21
Постреляционные СУБД................................................................................................ 21
1.3. Примеры и упражнения .............................................................................................. 22
2. Структура и свойства объектов СУБД Cache .................................................................. 25
2.1. Основные элементы Cache Objects ........................................................................... 25
Основные компоненты Cache Objects........................................................................... 26
Функции основных компонентов Cache Objects ......................................................... 27
Cache Object Architect ..................................................................................................... 27
Библиотека классов ........................................................................................................ 28
Компилятор классов ....................................................................................................... 29
Макропроцессор ............................................................................................................. 29
Cache ObjectServer для ActiveX ..................................................................................... 30
Cache ObjectServer для Java ........................................................................................... 31
2.2. Виды классов СУБД Cache ......................................................................................... 31
Классы объектов ............................................................................................................. 32
Виды зарегистрированных классов .............................................................................. 33
Временные классы .......................................................................................................... 33
Хранимые классы ........................................................................................................... 34
Встроенные классы ........................................................................................................ 34
Встроенные классы ........................................................................................................ 35
Применение встроенных классов.................................................................................. 36
Хранение встроенного объекта в базе данных ............................................................ 36
4
Сериализация и подкачка объектов .............................................................................. 37
2.3. Структура классов Cache Objects ............................................................................... 37
Имя класса ....................................................................................................................... 37
Ключевые слова .............................................................................................................. 38
Свойства .......................................................................................................................... 38
Методы ............................................................................................................................ 39
Параметры класса ........................................................................................................... 39
Запросы ............................................................................................................................ 40
Индексы ........................................................................................................................... 40
2.4. Типы данных Cache Objects ........................................................................................ 41
Основные типы данных Cache Objects ......................................................................... 41
Форматы данных ............................................................................................................ 45
2.5. Примеры и упражнения .............................................................................................. 45
3. Введение в язык программирования Cache ObjectScript ................................................ 49
3.1. Особенности программирования в Cache Objects .................................................... 49
Типы программ ............................................................................................................... 49
Источники объектного кода .......................................................................................... 50
3.2. Переменные и операторы Cache ObjectScript ....................................................... 50
Имена переменных ......................................................................................................... 51
Типы данных Cache ObjectScript ................................................................................... 51
Преобразование типов ................................................................................................... 52
Системные переменные ................................................................................................. 52
Операторы ....................................................................................................................... 54
3.3. Выражения и команды Cache ObjectScript ................................................................ 57
Простейшие выражения ................................................................................................. 57
Порядок выполнения операций..................................................................................... 57
Команды Cache ObjectScript .......................................................................................... 58
Группы команд Cache ObjectScript ............................................................................... 58
Команды управления последовательностью выполнения программы. .................... 59
Команды операций с переменными. ............................................................................. 61
Команды ввода/вывода .................................................................................................. 63
3.4. Примеры и упражнения .............................................................................................. 63
4. Среда проектирования Cache Studio ................................................................................. 67
4.1. Утилиты СУБД Cache ................................................................................................. 67
Запуск утилит СУБД Cache ........................................................................................... 67
Редактор конфигурации ................................................................................................. 67
Cache Terminal................................................................................................................. 68
Cache Проводник ............................................................................................................ 68
Cache SQL – Менеджер .................................................................................................. 69
4.2. Использование утилиты Cache Studio ....................................................................... 69
Возможности утилиты Cache Studio ............................................................................. 69
4.3. Примеры и упражнения .............................................................................................. 77
5. Организация доступа к данным в СУБД Cache ............................................................... 80
5.1. Организация доступа к объектам ............................................................................... 80
Идентификатор объекта OID ......................................................................................... 80
Объектная ссылка OREF ................................................................................................ 80
Открытие объекта ........................................................................................................... 81
Доступ к свойствам объекта .......................................................................................... 81
Запись объекта в базу данных ....................................................................................... 82
Удаление объекта из базы данных ................................................................................ 82
5.2. Организация доступа к таблицам............................................................................... 82
5
Соответствие элементов объектной и реляционной моделей данных ...................... 83
Расширения языка SQL в СУБД Cache ........................................................................ 83
Дополнительные операторы языка SQL в СУБД Cache ............................................. 84
Операция «Соединение» в СУБД Cache ...................................................................... 85
Поля-списки .................................................................................................................... 85
Связь между таблицами ................................................................................................. 85
5.3. Примеры и упражнения .............................................................................................. 86
Пример 5.1. ...................................................................................................................... 86
Пример 5.2. ...................................................................................................................... 86
Пример 5.3. ...................................................................................................................... 86
Пример 5.4. ...................................................................................................................... 87
Упражнение 5.1. .............................................................................................................. 88
Упражнение 5.2. .............................................................................................................. 88
Упражнение 5.3. .............................................................................................................. 88
Задания ............................................................................................................................ 89
Задание 5.1....................................................................................................................... 89
Задание 5.2....................................................................................................................... 89
6. Сервер приложений и другие возможности СУБД Caché .............................................. 90
7. Глоссарий. ........................................................................................................................... 91
Литература .............................................................................................................................. 93
6
1. Постреляционные СУБД – основные понятия.
1.1. Что такое СУБД?
Любая программа в той или иной степени обрабатывает
данные. Тем не менее, в последней трети прошлого века
появились программы, для которых хранение и обработка
данных являются основными задачами – системы обработки баз
данных (СУБД). Эти программы обычно являются посредниками
между прикладной программой пользователя и нужной ему
информацией.
ЗОВА
ТЕ
ЛЬ
ПОЛЬ
Роль СУБД
в информационной системе
Прикладная программа
СУБД
Данные
Требования, предъявляемые к СУБД
Чем отличаются системы управления базами данных от
других видов программного обеспечения? Прежде всего,
7
специфическим набором требований, которым СУБД должна
удовлетворять.






Перечислим некоторые из них:
Наличие специального языка обработки данных
Обеспечение целостности хранимых данных
Быстрый поиск данных
Обеспечение многопользовательской работы
Безопасность хранения данных
Обеспечение защиты данных
Языки обработки данных
СУБД должна обеспечить обработку любого, самого
оригинального запроса пользователя. А так как заранее
неизвестно, что именно нужно пользователю, остается только
использовать в СУБД язык программирования, на котором
можно запрограммировать любой запрос.
Самым распространенным языком программирования для СУБД
является язык структурированных запросов SQL (Structed Querry
Language). Он включает:
 язык определения данных DDL (Data Definition Language),
 язык манипулирования данными DML (Data Manipulation
Language),
 язык запросов к данным DQL (Data Qerry Language),
 язык управления данными DCL (Data Control Language),
 служебные команды и операторы.
Язык определения данных
Язык определения данных позволяет создавать объекты
базы данных: собственно базы данных (команда Create database),
таблицы (команда Create Table) и удалять эти структуры
(команда Drop Table).
8
SQL: язык определения данных
SQL
Создание объектов базы данных
Язык определения данных
Create table T1 (FIO:char, Dolgnost: char);
Язык манипулирования данными
Язык запросов к данным
Таблица Т1
FIO Dolgnost
Язык управления данными
Язык манипулирования данными
Язык манипулирования данными позволяет записывать
данные в таблицы, обновлять и стирать их командами Insert,
Update и Delete.
SQL: язык манипулирования данными
SQL
Вставка, обновление и удаление записей
Язык определения данных
Insert into T1 (“Иванов”,”Директор”);
Язык манипулирования данными
Язык запросов к данным
Язык управления данными
Таблица Т1
FIO
Dolgnost
Иванов Директор
Язык запросов к данным
Язык запросов к данным позволяет сформулировать самые
разнообразные запросы, извлекающие нужную пользователю
информацию из базы данных. В SQL язык запросов предстален
командой Select, имеющей многочисленные параметры,
позволяющие задавать различные условия выборки.
9
SQL: язык запросов к данным
SQL
Язык определения данных
Выборка по заданному условию
Select FIO from where Dolgnost= ”Директор”;
Язык манипулирования данными
Язык запросов к данным
Ответ на запрос
FIO
Иванов
Язык управления данными
Язык управления данными
Язык управления данными позволяет предоставлять права
на обработку данных тому или иному пользователю, для чего
используются команды Grant (предоставление прав) и Revoke
(отменить предоставление прав).
SQL: язык управления данными
SQL
Язык определения данных
Язык манипулирования данными
Предоставление прав
Команды Grant и Revoke
Язык запросов к данным
Язык управления данными
Обеспечение целостности хранимых данных
Под термином целостность базы данных (database
integrity), как правило, понимают соответствие хранимой в базе
данных информации заранее заданному набору ограничений.
Эти ограничения – ограничения целостности – могут
накладываться как на значения элементов базы данных, так и на
связи между ними.
В первом случае, ограничение целостности определяет
диапазон допустимых значений элемента. Например, «Стаж
10
работы», очевидно, величина неотрицательная и, едва ли может
превышать 100 лет. Введение подобных ограничений на этапе
разработки базы данных предотвращает внесение в нее заведомо
ошибочных сведений.
Во втором случае, ограничения контролируют связи между
объектами базы данных, не позволяя безсистемно изменять
объекты, имеющие связь с другими объектами.
Механизмы обеспечения целостности базы данных, хотя и
не гарантируют достоверности хранимой информации, но могут
значительно снизить вероятность ошибки при вводе и обработке
данных.
Быстрый поиск данных
СУБД долна обеспечивать быстрый поиск нужных
пользователю данных. Это требование входит в противоречие с
тем фактом, что записи в базе данных обычно неупорядочены, да
и неизвестно заранее, по какому атрибуту их стоило бы
упорядочить. Выходом является, как правило, хранение не
только самих данных, но и своеобразных «путеводителей» по
ним – индексов.
Использование индекса ускоряет поиск
Индекс
по атрибуту Dolgnost
Index_Dolgnost
Дворник
Директор
Инженер
Механик
Данные хранятся в
неупорядоченном виде
FIO
Иванов
Сидоров
Петров
Семенов
Сергеев
Dolgnost
Директор
Механик
Дворник
Инженер
Механик
11
Обеспечение многопользовательской работы
Вообще говоря, существуют СУБД, не рассчитанные на
многопользовательскую работу. Но и в них приходится решать
характерные «многопользовательские» проблемы, так как разные
приложения, используемые одним пользователем, могут
конкурировать за ресурсы базы данных.
Большинство
современных
СУБД
предполагают
одновременную работу со многими пользователями и должны
уметь так изолировать их друг от друга, чтобы каждый
пользователь думал, что работает с базой данных в одиночку.
Чаще всего, многопользовательская работа обеспечивается
построением СУБД по архитектуре «клиент-сервер».
Архитектура «клиент-сервер»
В архитектуре «клиент-сервер» основная, серверная, часть
СУБД устанавливается на мощном компьютере – сервере. На
рабочих
станциях
устанавливаются
нужные
данному
пользователю прикладные программы и клиент СУБД –
небольшая программа, отвечающая за связь прикладных
программ с сервером СУБД.
Архитектура “Клиент-сервер”
Рабочие станции
Клиентская
часть
СУБД
Запросы
Ответы
на запросы
Сервер БД
Серверная
часть
СУБД
Вся обработка данных
производится на сервере
12
Трехзвенная архитектура «клиент-сервер»
Прикладные программы иногда выносят с рабочих станций
на отдельный компьютер – сервер приложений. Тогда на рабочей
станции остаётся только небольшая клиентская часть
прикладной программы, иногда всего лишь браузер. Такой
подход называется трехзвенной архитектурой «клиент-сервер».
Трехзвенная архитектура “Клиент-сервер”
Рабочие станции
Клиентская
часть
прикладной
программы
Сервер Приложений
Прикладные
программы,
Клиентская
часть СУБД
Сервер БД
Серверная
часть
СУБД
Архитектура
«клиент-сервер»
позволяет,
за
счет
централизованной обработки всех запросов на сервере, надежно
контролировать обработку запросов от разных пользователей, не
позволяя им мешать друг другу.
Безопасность хранения данных
Обеспечение безопасности хранения данных это защита
данных пользователя от разнообразных сбоев в работе
оборудования и программных средств. Необходимость защиты
от этой опасности очевидна – известны случаи, когда небольшие
компании даже разорялись из-за потери базы данных. Причины
подобных проблем достаточно разнообразны – сбой в
электропитании, поломка оборудования, некорректная работа
программного обеспечения.
13
Как правило, все эти проблемы с точки зрения СУБД сводятся
к двум ситуациям:
 Мягкий сбой
 Жесткий сбой
Мягкий сбой
Мягкий сбой – потеря содержимого оперативной памяти –
возникает, например, при «подвисании» компьютера, сбое в
электропитании или внезапной перезагрузке. Файл данных на
жестком диске при этом сохраняется, но теряются результаты
последних операций.
Обеспечение
безопасности
хранения данных
Мягкий сбой
Потеря содержимого
оперативной памяти
Восстановление
данных по журналу
Ситуацию спасает постоянное ведение журнала, причем
сведения обо всех завершенных транзакциях сразу сохраняются
в файле журнала на жестком диске.
Жесткий сбой
Жесткий сбой – потеря содержимого жесткого диска –
возникает при поломке жеского диска, при повреждении
14
файловой системы жесткого диска, например, из-за действия
вирусов или некорректной работы программ, при физическом
повреждении компьютера и т.д.
Обеспечение
безопасности
хранения данных
Жесткий сбой
Потеря содержимого
жесткого диска
Восстановление
данных по журналу
и резервному
файлу данных
Восстановить базу данных при этом можно при наличии
файла журнала и резервной копии файла данных.
Следовательно, СУБД долна поддерживать ведение файлов
данных и журнала на разных физических дисках и обеспечивать
резервное копирование.
Обеспечение безопасности хранения данных
Меры обеспечения безопасности хранения данных
Регулярное резервное
копирование
Ведение файлов на
разных физических дисках
Использование источников
бесперебойного питания
Постоянное ведение
журнала
Грамотная эксплуатация
технических средств
15
Обеспечение защиты данных
Защитой данных, как правило, называют комплекс средств
и мероприятий по защите данных от несанкционированного
доступа. Современная СУБД не должна предоставлять
возможность злоумышленнику использовать или уничтожать
чужие данные. Для этого в СУБД обязательно реализуются
средства аутентификации и авторизации пользователей,
используется
система
предоставления
прав.
Причем,
пользователям могут предоставляться, и соответствено,
ограничиваться, права не только на объекты базы данных –
таблицы, файлы и т.д., но и на определенные операции –
например, право просмотра без права изменения.
1.2. Модели и структуры данных
Модели и структуры данных
Информация, хранимая в базе данных – это, в некотором
роде, модель реального мира. А так как в реальном мире все, так
или иначе, взаимосвязано, то и в базе данных помимо значений
атрибутов прочих цифр обязательно должна храниться
структурная информация, показывающая, как объекты базы
данных связанны друг с другом. Трудность в том, что в реальном
мире существует большое разнообразие структур, тогда как в
СУБД все способы связи объектов должны быть формализованы,
сведены к некоторому набору правил.
Существуют
разнообразные
структуры
данных:
информацию можно хранить, используя списки, иерархические
структуры (деревья), сетевые структуры, таблицы и т.д. Все они
используются в самых разных областях информатики и имеют
свои достоинства и недостатки.
Основные подходы к реализации СУБД
16
В настоящее время наибольшее развитие получили три
подхода к созданию СУБД.
 Объектно-ориентированная модель – представление данных
в виде набора объектов и методов их обработки.
 Реляционная модель – представление данных в виде набора
таблиц.
 Постреляционная модель – представление данных,
объединяющее свойства объектно-ориентированной и
реляционной модели.
Существуют разнообразные структуры данных
Иерархическая модель
Сетевая модель
Список
Реляционные СУБД
Реляционная СУБД представляет данные в виде двумерных
таблиц. Каждая такая таблица (отношение) состоит из набора
столбцов (атрибутов) и хранит строки данных (кортежи).
Реляционная база данных
Таблица Т1
Атрибут
Кортеж
Отношение
Таблица Т2
Dolgnost
Oklad
Иванов Директор
Директор
70000
Петров Дворник
Дворник
5000
FIO
Dolgnost
17
Отношение должно быть нормализованным: все кортежи
уникальны, все атрибуты простые, должен существовать ключ –
набор атрибутов, по которым можно различать кортежи в
отношении.
Реляционная алгебра
Над отношениями реляционной
выполнять теоретико-множественные
реляционной алгебры: объединение,
декартово произведение, проекция,
соединение и т.д.
базы данных можно
операции и операции
пересечение, разность,
выборка по условию,
Теоретико-множественные операции
Пересечение
R1
R2
R1 R2
Объединение
R1
R2
R1 R2
Разность
R1
R2
R2 - R1
Практически все манипуляции над двумерными таблицами
можна описать в виде набора операций реляционной алгебры.
Реализация с помощью языка SQL всех теоретикомножественных операций и операций реляционной алгебры дает
реляционным базам данных огромные преимущества –
достаточно описать объект реального мира в виде таблицы и
становится доступна любая его обработка.
Недостатки реляционных баз данных
При всех безусловных достоинствах реляционных баз
данных им присущи и серьезные недостатки. И первый из них –
это очевидная условность табличной структуры. Объекты
реального мира мало похожи на двумерные таблицы, где каждый
18
элемент должен быть простым – т.е. не может сам быть таблицей
или списком.
Обычно объекты имеют сложную многоуровневую
структуру и приведение их к реляционной модели или заставляет
создавать очень сложные и громоздкие системы из десятков
связанных таблиц, или прибегать к упрощениям, искажая
картину реального мира.
Обработка базы данных, состоящей из десятков таблиц,
требует времени и больших аппартных ресурсов.
Вывод: реляционная модель подходит только для
отображения сравнительно простых объектов.
Реляционная алгебра
Естественное соединение
Т1
Т2
Dolgnost
Oklad
Иванов Директор
Директор
70000
Петров Дворник
Дворник
5000
FIO
Dolgnost
FIO
Dolgnost
Oklad
Иванов Директор 70000
Петров Дворник
5000
Другая проблема связана с тем, что реляционные базы
данных создавались, прежде всего, для хранения и обработки
цифр и символьных строк. Но в настоящее время в базах данных
все чаще приходится хранить мультимедийные данные: видео,
звук и т.д. Их приходится хранить в отдельных файлах, а команд
обработки таких данных в SQL практически нет.
19
Объектно-ориентированые базы данных
В объектно-ориентированных базах данных для каждого
объекта реального мира создается структура, которая так и
называется – объект. Объект принадлежит к некоторому классу
объектов. Каждый класс имеет определенные свойства и методы
обработки объектов данного класса.
На основе существующего класса можно создать новый.
При этом происходит наследование – новый класс наследует
свойства и методы родителя, к которым добавляются свои.
Наследование
Класс Мебель
Свойства
Материал: дерево
Методы
Купить, Продать
Класс Шкаф
Свойства
Материал: дерево, стекло
Емкость, количество полок
Методы
Купить, Продать,
Положить, достать
При множественном наследовании новый класс наследует
свойства и методы нескольких классов.
Класс достаточно замкнутая структура, однако в ряде
случаев допускается использование одного метода для объектов
разного класса, причем для каждого класса объектов этот метод
трактуется
по-своему.
Такая
особенность
называется
полиморфизм.
На объектно-ориентированные базы данных существуют
стандарты, например стандарт ODMG (Object Data Management
Group)
20
Достоинства объектно-ориентированных СУБД
К достоинствам объектно-ориентированных СУБД относят
способность хранить в одном объекте не только свойства, но и
методы его обработки.
Объектно-ориентированная модель не ограничивает
уровень сложности отображаемого объекта реального мира, при
этом сам принцип отображения - объект со своими свойствами и
методами – остается достаточно простым.
Обработка данных в объектно-ориентированных СУБД
требует меньше ресурсов, чем в реляционных, так как не
требуется собирать нужные данные из множества таблиц с
помощью весьма ресурсоемкой операции «соединение».
При разработке прикладных программ давно и широко
применяется именно объектно-ориентированный подход и
использование подобного подхода при разработке баз данных
позволяет добиться большей интеграции программных средств.
Недостатки объектно-ориентированных СУБД
Несмотря на все свои преимущества, объектноориентированные СУБД не пользуются большой популярностью.
Причин тому несколько.
Во-первых, объектно-ориентированным базам данных не
хватает языка, подобного языку SQL в реляционной модели,
который позволяет с помощью фиксированного набора команд
выполнять почти любую операцию над данными. Это
объясняется тем, что реляционные базы данных опираются на
мощный математический фундамент в виде реляционной
алгебры, а для объектно-ориентированных баз данных
математический аппарат проработан не столь подробно.
Во-вторых, переход с реляционных СУБД на объектноориентированные приводит к потере существующих наработок:
уже написанных программ и процедур, а значит, к потере
вложенных в их создание инвестиций.
Наконец, значительное количество специалистов привыкло
работать именно с реляционными СУБД и решить эту проблему
еще сложнее, чем сменить программное обеспечение.
21
Объектно-реляционные СУБД
К концу прошлого века технологии баз данных оказались на
распутье. С одной стороны, необходимость описания все более
сложных систем столкнулась с ограниченностью реляционной
модели и требовала перехода к объектно-ориентированным
СУБД.
С другой стороны, практическое использование объектноориентированных СУБД тормозилось по причинам, указанным
выше. Вполне естественно, что появилось желание найти
компромиссный путь, объединяющий достоинства объектноориентированной и реляционной моделей.
И первым способом стала модернизация существующих
реляционных СУБД за счет встраивания в них некоторых
объектно-ориентированных технологий. Подобные СУБД стали
позиционироваться на рынке как объектно-реляционные. Однако
этот компромисс не решал проблему по-существу –
«навешивание» на реляционную СУБД некоторых «объектных»
функций делал СУБД еще более громоздкой и ресурсоемкой.
Постреляционные СУБД
Более
перспективным
выглядит
направление
постреляционных СУБД, реализованное фирмой Intersystems при
создании СУБД Cache.
Основой постреляционной СУБД является единая
архитектура данных, позволяющая описывать одну и ту же
информацию и как систему объектов, и как набор таблиц. При
этом «табличное» и «объектное» описание легко отображаются
друг в друга и в особые многомерные структуры ядра СУБД,
удобные для быстрого поиска и обработки данных.
Таким образом, пользователь может описывать данные в
виде объекта, формулировать запрос к ним на языке SQL, как к
таблицам, а обрабатываться они будут ядром СУБД как удобные
для обработки многомерные структуры.
Использование
единой
архитектуры
данных
в
постреляционных СУБД дополняется развитыми средствами
22
интерфейса, позволяющими легко преобразовывать данные в
нужный формат и использовать для их обработки удобные для
пользователя приложения, например, Java или XML.
Отображение данных в постреляционных СУБД
Многомерные
структуры
ядра
Таблица Действия со шкафом
Таблица Шкаф
Материал Емкость Количество полок
Класс Шкаф
Свойства
Материал, Емкость,
Количество полок
Методы
Купить, Продать,
Положить, достать
Использование удобных для обработки многомерных
структур ядра, свободное отображение данных в табличную и
объектную форму и развитый интерфейс с другими
приложениями делает постреляционные СУБД одним из
наиболее перспективных направлений развития технологий баз
данных.
1.3. Примеры и упражнения
Пример 1.1. Создание реляционной базы данных
Достоинство постреляционных СУБД – возможность
использовать приемы создания и обработки данных, уже
отработанные как на «объектных», так и на реляционных СУБД.
Создадим базу данных по учету персонала, содержащую
сведения о фамилии, годе рождения, должности, стаже и окладе.
Затем запросим сведения об окладах сотрудников.
Отношение реляционной базы данных должно состоять из
уникальных кортежей, все атрибуты должны быть простыми,
должен существовать ключ, различающий кортежи.
Решение:
23
1. Сведем все данные в одну таблицу, следя только за
уникальностью строк, выберем атрибут Фамилия в качетве
ключа (условно будем считать фамилии сотрудников
уникальными).
Получилась таблица - отношение Т1:
Первый шаг нормализации
Таблица Т1
Фамилия
Должность Год рождения Стаж Оклад
Иванов
директор
1960
35
15000
Петров
дворник
1975
10
7000
Проверяем условия нормализации отношения:
 в таблице нет одинаковых строк – все кортежи
уникальны;
 все элементы – простые, т.е. не являются таблицами
или иными сложными структурами;
 выбран ключ – атрибут Фамилия; ключ может
состоять и из нескольких атрибутов.
2. Получившееся отношение имеет очевидный недостаток:
если год рождения и стаж соответствуют конкретному
человеку (значению атрибута Фамилия), то значение атрибута
Оклад скорее соответствует значению атрибута Должность.
Такая ситуация нежелательна – сложно, например, удалить
данные о дворнике Петрове не стирая данные об окладе
дворника.
Произведем декомпозицию исходного отношения: разобъем
таблицу Т1 на две: Т2 и Т3.
24
Декомпозиция исходного отношения
Таблица Т3
Таблица Т2
Фамилия
Должность Год рождения Стаж
Должность
Оклад
Иванов
директор
1960
35
директор
15000
Петров
дворник
1975
10
дворник
7000
3. С помощью SQL запросов создадим отношение Т2:
Create table T2 («Фамилия» char, «Должность» char, «Год
рождения» int, «Стаж» int);
где тип int обозначает целочисленные переменные, тип char –
символьные строки.
Создадим отношение Т3:
Create table T3 («Должность» char, «Оклад» int);
Создадим запрос окладах сотрудников:
Select T2.«Фамилия», T3. «Оклад» from T2,T3
Where T2.«Должность»= T3.«Должность»;
Результат запроса
Таблица Т3
Фамилия
Оклад
Иванов
15000
Петров
7000
Упражнение 1.1.
С помощью команды create table языка SQL создайте
отношение, соответствующее следующей таблице:
25
Упражнение 1.1.
Таблица Т5
Производитель
Модель Пробег Цена
Задания
Ответьте на следующие вопросы:
Задание 1.1.
Напишите, в чем основные достоинства постреляционных
баз данных?
Задание 1.2.
Перечислите известные Вам СУБД.
Задание 1.3.
Коротко опишите достоинства и недостатки реляционных и
объектно-ориентированных СУБД.
2. Структура и свойства объектов СУБД Cache
2.1. Основные элементы Cache Objects
Единая архитектура данных – характерная четра
постреляционных СУБД. Она позволяет использовать как
реляционный, так и объектно-ориентированный подходы к
созданию и использованию баз данных, а также значительно
облегчает взаимодействие с существующими приложениями.
В
СУБД
Cache
взаимодействие
с
объектноориентированными
приложениями
производится
через
26
компонент Cache Objects, реализующий все «объектные»
функции СУБД Cache.
Роль Cache Objects в Единой архитектуре данных
Взаимодействие с
реляционными
базами данных
Взаимодействие с
объектно-ориентированными
приложениями
Единая архитектура данных
Cache Objects
Ядро
СУБД
Cache SQL
Основные компоненты Cache Objects
Модуль Cache Objects отвечает в СУБД Cache за всю работу с
объектно-ориентированными структурами. Его основные задачи:
 обеспечивать
создание
любых
классов
объектов,
описывающих самые сложные объекты реального мира;
 обеспечивать выполнение всех видов обработки объектов;
 экспортировать объекты СУБД Cache в формат популярных
объектно-ориентированных приложений, прежде всего, в
форматы ActiveX и Java.
Cache Objects включает несколько компонентов:
 Cache Object Architect
 Компилятор классов
 Библиотека классов
 Макропроцессор
 Cache ObjectServer для ActiveX
 Cache ObjectServer для Java
27
Функции основных компонентов Cache Objects
Функции
основных
компонентов
представлены на следующем рисунке:
Cache
Objects
Компоненты Cache Objects
Cache Objects
Создание классов
Хранение классов
Cache Object Architect
Библиотека классов
Экспорт в другие форматы
Компиляция программного кода
Cache ObjectServer для ActiveX
Компилятор классов
Cache ObjectServer для Java
Макропроцессор
Cache Object Architect
Cache Object Architect – интерактивная среда разработки
классов. В принципе, классы в СУБД Cache можно создавать и
без использования Cache Object Architect. Для этого существует
специальный формат определения классов CDL.
грам м
ист
Созданный класс
может храниться в
Библиотеке классов
Пр о
Функции Cache Object Architect
Созданный класс
может храниться в
файле формата CDL
Создание классов
Библиотека
классов
Cache Object Architect
cdl-файл
28
Но использование специальной среды разработки
значительно упрощает работу программиста и повышает
производительность его труда.
Классы, созданные с помощью Cache Object Architect,
помещаются в Библиотеку классов и могут быть экспортированы
в файл формата CDL.
Библиотека классов
Библиотека классов служит для хранения всех классов СУБД
Cache. Она может пополняться несколькими путями:
 Созданием классов с помощью Cache Object Architect;
 Вводом классов в формате CDL;
 Импортом объектов в формате ActiveX, Java и др.
Функции Библиотеки классов
Библиотека классов
Хранилище
cdl-файл
Компилятор
классов
Интерфейсы API
Cache Object Architect
Java, ActiveX и другие форматы
Хранящиеся в библиотеки классы могут передаваться
компилятору для преобразования в исполняемый код или
экспортироваться
в
другие
форматы.
Операции
экспорта/импорта выполняются через API-интерфейсы.
29
Компилятор классов
Компилятор классов берет описание классов из библиотеки
и преобразует его в программый код, реализующий свойства и
методы данного класса.
Функции Компилятора классов
Компиляция программного кода
Библиотека
классов
Компилятор классов
Программый код, реализующий свойства и
методы компилируемых классов
Макропроцессор
Описание данных и операции над ними в СУБД Cache
могут быть запрограммированы на языке Cache ObjectScript.
Этот язык, как и многшие языки высокого уровня, позволяет
описывать повторяющиеся фрагменты как макровызовы, а также
использовать опереаторы встроенного SQL.
Но для выполнения программы, написанной на языке Cache
ObjectScript, ее необходимо пропустить через Макропроцессор,
который подставляет вместо макровызовов и команд SQL
соответствующий программый код.
30
Функции Макропроцессора
Программа на языке Cache ObjectScript
Макропроцессор
Готовый к исполнению программный код
Cache ObjectServer для ActiveX
Для
создания
сетевых
приложений
традиционно
используется разработанная Microsoft технология ActiveX. Эта
технология включает наборы стандартных библиотек,
позволяющих программным компонентам взаимодействовать
друг с другом по сети независимо от языка программирования,
на котором они написаны.
ActiveX включает в себя следующие основные элементы:
 клиентскую часть Active Desktop,
 серверную часть Active Server,
 библиотеки для разработчика.
Популярность технологии ActiveX делает желательным
интеграцию этой технологии с СУБД. В СУБД Cache за
интеграцию с технологией ActiveX отвечает компонент Cache
ObjectServer для ActiveX.
Cache ObjectServer для ActiveX преобразует объекты СУБД
Cache в объекты ActiveX. В качестве источника объектов СУБД
Cache выступают как Библиотека классов, так и программный
код.
31
Cache ObjectServer для Java
При разработке объектно-ориентированных приложений
широко применяется язык Java и связанные с ним средства
разработки. В СУБД Cache за интеграцию с технологией ActiveX
отвечает компонент Cache ObjectServer для Java. Cache
ObjectServer для Java преобразует объекты СУБД Cache в
объекты Java.
Функции Cache ObjectServer для ActiveX и для Java
Объект ActiveX
Объект Java
Cache ObjectServer для ActiveX
Cache ObjectServer для Java
Объект СУБД Cache
2.2. Виды классов СУБД Cache
СУБД Cache позволяет создавать и обрабатывать объекты
базы данных, используя как реляционный, так и объектноориентированный подходы. При проектировании базы данных
часто используют именно объектно-ориентированую часть
постреляционной СУБД – т.е. Cache Objects, так как объектноориентированный подход позволяет описывать самые сложные
объекты.
Соответственно,
все
данные
в
Cache
Objects
представляются в виде объектов. Каждый объект является
экземпляром определенного класса и имеет характерные для
этого класса свойства и методы. Отметим, что в Cache Objects
типы данных (целый, логический дата и др.) представлены также
в виде особых классов – классов типов.
32
Виды классов СУБД Cache
Классы СУБД Cache
Классы объектов
Классы типов
Классы объектов
Классы объектов в Cache Objects делятся на
зарегистрированные и незарегистрированные.
Незарегистрированные классы полностью создаются
программистом «с нуля». Программист сам должен определять
все их свойства и методы, сам следит за корректностью ссылок
на объекты и назначением идентификаторов объекта, а также
выделением памяти для хранения свойств объекта.
Классы объектов СУБД Cache
Классы объектов
Зарегистрированные классы
Незарегистрированные классы
Зарегистрированные классы
Зарегистрируемые классы представляют своего рода
заготовки для программиста, который вместо создания
полностью нового незарегистрированного класса, может
подобрать уже имеющийся зарегистрированный класс, для
которого уже решен ряд задач:
 Определен порядок размещения объекта в памяти и
автоматизирована выдача ссылок на него.
 При вызове объекта зарегистрированного класса в память
автоматически подкачиваются связанные с ним ссылками
33
другие объекты.
 Поддерживается полиморфизм.
 Существует готовый набор методов для обработки
объектов этих классов, например, метод %New() создает
новый объект зарегистрированного класса, а метод
%Close() удаляет его.
Основные свойства и методы зарегистрированных классов
наследуются от системного класса %Library.RegisteredObject.
Виды зарегистрированных классов
По способу использования все зарегистрованные классы
можно разделить на три группы:
 Временные классы, объекты которых существуют только
в оперативной памяти;
 Встраиваемые классы, объекты которых встроены в
другие объекты;
 Хранимые классы, объекты которых храняться в базе
данных как независимые объекты.
Зарегистрированные классы объектов СУБД Cache
Зарегистрированные классы объектов
Встраиваемые классы
Временные классы
Хранимые классы
Временные классы
Временные классы позволяют порождать объекты
(экземпляры классов), существующие лишь временно в
оперативной памяти и не могут храниться в базе данных, но
могут использоваться в вычислениях. Объекты временных
классов создаются методом %New(), после чего программист
34
получает ссылку на созданный объект – объектную ссылку
OREF.
Удаление экземпляров временных классов производится
методом %Close().
Временные и хранимые классы объектов
Оперативная память
Временный класс
Временный объект
Хранимый объект
Хранимый класс
База данных
Хранимый объект
Хранимые классы
Хранимые классы объектов наследуют от системного
класса %Library.Persistent методы хранения в файле данных.
Соответственно, экземпляры хранимых классов могут храниться
в базе данных.
К основным особенностям хранимых классов относятся:
 Наличие у каждого объекта хранимых классов
однозначного объектного идентификатора OID.
 Возможность использовать хранимый объект как
свойство класса, что позволяет связывать хранимые
объекты между собой.

Встроенные классы
Экземпляры встроенных классов, как и экземпляры
хранимых классов, могут храниться в базе данных. Но если в
оперативной памяти они существуют как независимые объекты,
35
то в базе данных объекты, порожденные встроенным классом,
могут храниться только как элементы других объектов.
Использование объекта как свойства класса
Хранимый класс
Сотрудник
Хранимый класс
Образование
Свойства
Свойства
ФИО
Адрес
Вид образования
Учебное заведение
Образование
Дата окончания
Должность
Специальность
Встроенные классы
Экземпляры встроенных классов, как и экземпляры
хранимых классов, могут храниться в базе данных. Но если в
оперативной памяти они существуют как независимые объекты,
то в базе данных объекты, порожденные встроенным классом,
могут храниться только как элементы других объектов.
Основные особенности встроенных классов определяются
свойствами и методами системного класса %Library.SerialObject.
Свойства встроенного объекта
Оперативная память
Хранимый объект
Сотрудник
ФИО
Встроенный
объект
Образование
Образование
Вид образования
Квалификация
Должность
Специальность
В оперативной памяти встроенный
объект хранится отдельно
36
Применение встроенных классов
Применение встроенных классов выгодно, если несколько
хранимых классов имеют некоторый общий набор свойств.
Основные достоинства такого подхода:
 Достаточно один раз описать набор свойств как
встроенный класс, и мы можем в дальнейшем легко
вставлять его в любые хранимые объекты.
 Если этот набор свойств надо изменить, лучше один раз
изменить встроенный объект, чем менять эти свойства в
каждом хранимом объекте поотдельности.
Особенности встроенного объекта определяют и способы
доступа к нему. Так как в памяти экземпляр встроенного класса
хранится как самостоятельный объект, то при его создании
программист получает ссылку на него – OREF.
Хранение встроенного объекта в базе данных
В базе данных экземпляр встроенного класса хранится как
часть другого объекта, поэтому он не имеет своего
идентификатора OID.
Хранение встроенного объекта
База данных
Хранимый объект
Сотрудник
Хранимый объект
Вакансия
ФИО
Должность
Встроенный
объект
Образование
Встроенный
объект
Образование
Вид образования
Квалификация
Вид образования
Квалификация
Специальность
Специальность
Должность
Стаж
В базе данных встроенный объект
хранится как часть другого объекта
37
Сериализация и подкачка объектов
Важный вопрос, в каком виде хранить объект? Так как все
объекты одного класса отличаются друг от друга лишь
значениями свойств, то объект можно записать в виде
символьной строки, содержащий значения свойств объекта.
Такую запись объекта в виде символьной строки называют
сериализацией объекта.
Если объект зарегистрированного класса, загружаемый в
память из базы данных, имеет ссылки на другие объекты, то они
автоматически загружаются в память. Это действие принято
называть подкачкой (swizzling).
2.3. Структура классов Cache Objects
Часто говорят, что класс характеризуется свойствами и
методами. Но на самом деле структура класса в постреляционной
СУБД может быть сложнее. Понятие класса Cache Objects
складывается, в общем случае, из следующих компонентов:
 Имя класса
 Ключевые слова
 Свойства
 Методы
 Параметры класса
 Запросы
 Индексы
Имя класса
Каждый класс и каждый элемент класса имеет уникальное
имя.
Имя класса в Cache Objects состоит из латинских букв и
цифр и должно начинаться с букв. Регистр букв не имеет
значения, т.е. слова Spisok и SPISOK будут восприниматься как
одно и тоже имя.
Имена системных классов и их элементов начинаются с
символа «%». Например, %Library.SerialObject – системный
38
класс, содержащий свойства и методы встроенных классов, а
%Library.Persistent – системный класс, содержащий свойства и
методы хранимых классов.
Ключевые слова
Зарегистрированные классы обычно могут предоставляться
в нескольких вариантах, слегка отличающихся друг от друга
своими свойствами и методами. Эти варианты различаются друг
от друга значением ключевых слов.
При создании нового класса на основе зарегистрированного
класса, можно задать значение ключевых слов и получить
нужный вариант свойств и методов этого класса. Если при
определении класса ключевые слова не указываются, их
значения задаются поумолчанию.
Свойства
Набор свойств характеризует класс объекта, а значения
свойств объекта определяют его состояние. В качестве свойств
объекта Cache Objects могут использоваться:
 Константы
 Встроенные объекты
 Ссылки на хранимые объекты
 Коллекции констант
 Коллекции объектов
 Потоки данных
Свойства, определенные как закрытые (private), видны
только внутри своего класса. По умолчанию все свойства
открытые (public).
Каждое свойство Cache Objects характеризуется следующим
набором признаков:
 Имя свойства
 Тип данных
 Ключевые слова и параметры, набор которых
зависит от типа данных.
39
Методы
Методами называют операции, выполняемые над объектом
данного класса. Как правило, метод включает следующие
элементы:
 Имя, одназно идентифицируещее этот метод.
 Аргументы – переменные, над которыми производится
операция. Метод может и не требовать аргументов, а, в
ряде случаев, значения аргументов могут задаваться по
умолчанию. Аргумент должен относиться к какому-то
типу данных (по умолчанию %Library.String). Если перед
аргументом стоит знак «&», передается ссылка на
аргумент, иначе – его значение.
 Возвращаемое значение – значение, возвращаемое в
результате работы метода. В качестве возвращаемого
значения часто используют статус завершения метода.
 Программый код на языке Cache ObjectScript.
Методы, определенные как закрытые (private), вызываются
только методами своего класса. Открытые (public) методы могут
вызываться извне своего класса.
Параметры класса
При создании класса для него могут быть заданы
параметры класса - набор констант, значение которых будет
одинаково и неизменно у всех экземпляров этого класса.
Типичное применение параметров класса – указание на
необходимость проверки значений свойств. Если параметр
класса PROPERTYVALYDATION равен нулю, проверка не
производится, если этот параметр равен «1», топроверка
производится в момент присвоения значения, а если параметр
класса PROPERTYVALYDATION равен «2», то проверка
значений свойств объекта производится только при его
сохранении.
40
Запросы
Запросы позволяют отобрать из множества экземпляров
данного класса те, что отвечают заданным критериям.
Формулировка запроса задается несколькими способами:
 Операторами языка Cache ObjectScript.
 Операторами языка SQL.
 С помощью приложения Cache Object Architect,
включающего мастер SQL-запросов SQL Querry Wizard.
Просмотр и обработка результата запроса выполняется с
помощью:
 Использования специального интерфейса ResultSet,
позволяющего обрабатывать результат запроса в
приложениях Java, ActiveX, или Cache ObjectScript.
 Представления запроса в виде традиционных для
реляционных
СУБД
хранимых
процедур
или
представлений с последующей обработкой на SQL.
Индексы
Индексы служат для ускорения поиска нужного экземпляра
класса. Класс может быть проиндексирован по любым из своих
свойств. При индексации класса, индексируются не только все
экземпляры этого класса, но и все экземпляры порожденных от
него классов. Индекс допускает несколько вариантов
сортировки: алфавитная сортировка для чисел и букв,
сортировка по убыванию и т.д.
Интересной особенностью индексов Cache Objects является
возможность хранить в индексе не только те свойства, по
которым производилась индексация, но и значения других
свойств этого класса. Это позволяет, в ряде случаев, получать
нужную информацию прямо из индексов, без доступа к,
собственно, объектам.
41
2.4. Типы данных Cache Objects
В Cache Objects каждый тип данных представляет собой
класс. Такой подход позволяет программисту создавать свои
типы данных и делает количество и разнообразие типов данных
практически неограниченным. Классы типов, в отличе от классов
объектов, не имеют свойств и не позволяют создать экземпляры
этого класса.
Данные всех типов Cache Objects могут преобразовываться
в данные, соответствующие форматам Java, ActiveX и SQL. Для
этого каждый тип данных может иметь ключевые слова,
показывающие соответствие типов:
 CLIENTDATATYPE – для клиентов Java и ActiveX;
 ODBCTYPE – для использования ODBC;
 SQLCATEGORY – для SQL- приложений.
Рассмотрим некоторые из основных типов данных Cache
Objects, которые могут использоваться непостредственно или
служить основой для новых, пользовательских типов.
Основные типы данных Cache Objects
%Library.Binary
Тип %Library.Binary предназначен для представления
двоичных значений, имеет опциональные параметры:
 MINLEN – минимальная длина в байтах;
 MAXLEN – максимальная длина в байтах.
Ключевые слова:
 CLIENTDATATYPE BINARY;
 ODBCTYPE BINARY;
 SQLCATEGORY STRING.
%Library.Boolean
Тип %Library.Boolean предназначен для представления
логических значений, Допустимые значения:
 0 – ложь;
 1 – истина.
42
Опциональных параметров не имеет.
Ключевые слова:
 CLIENTDATATYPE INTEGER;
 ODBCTYPE INTEGER;
 SQLCATEGORY INTEGER.
%Library.Data
Тип %Library.Data предназначен для представления даты,
имеет опциональные параметры:
 MINLVAL – минимальное значение;
 MAXVAL – максимальное значение;
 FORMAT – формат аргумента функции $Zdata
Ключевые слова:
 CLIENTDATATYPE DATA;
 ODBCTYPE DATA;
 SQLCATEGORY DATA.
%Library.Float
Тип %Library.Float предназначен для представления чисел с
плавающей точкой, имеет опциональные параметры:
 MINLVAL – минимальное значение;
 MAXVAL – максимальное значение;
 FORMAT – формат аргумента функции $Fnumber;
 SCALE – количество цифр после десятичной точки.
Ключевые слова:
 CLIENTDATATYPE DOUBLE;
 ODBCTYPE DOUBLE;
 SQLCATEGORY DOUBLE.
%Library.Name
Тип %Library.Name предназначен для представления имен в
формате «Фамилия, Имя», имеет опциональный параметр
MAXLEN – максимальная длина.
Ключевые слова:
 CLIENTDATATYPE VARCHAR;
43
 ODBCTYPE VARCHAR;
 SQLCATEGORY NAME.
%Library.Status
Тип %Library.Status предназначен для отображения кода
ошибки выполнения операции. Опциональных параметров не
имеет.
%Library.TimeStamp
Тип %Library.TimeStamp предназначен для представления
отметки времени, включает дату (гггг-мм-дд) и время (чч:мм:сс)
и имеет опциональные параметры:
 MINLVAL – минимальное значение;
 MAXVAL – максимальное значение;
Ключевые слова:
 CLIENTDATATYPE TIMESTAMP;
 ODBCTYPE TIMESTAMP;
 SQLCATEGORY TIMESTAMP.
%Library.Time
Тип %Library.Time предназначен для представления
времени, имеет опциональные параметры:
 MINLVAL – минимальное значение;
 MAXVAL – максимальное значение;
 FORMAT – формат аргумента функции $Ztime
Ключевые слова:
 CLIENTDATATYPE TIME;
 ODBCTYPE TIME;
 SQLCATEGORY TIME.
%Library.Numeric
Тип %Library.Numeric предназначен для представления
чисел с фиксированной точкой, имеет опциональные параметры:
 MINLVAL – минимальное значение;
44
 MAXVAL – максимальное значение;
 FORMAT – формат аргумента функции $Fnumber;
 SCALE – количество цифр после десятичной точки.
Ключевые слова:
 CLIENTDATATYPE NUMERIC;
 ODBCTYPE NUMERIC;
 SQLCATEGORY NUMERIC.
%Library.String
Тип %Library.String предназначен для представления
символьной строки, имеет опциональные параметры:
 MINLVAL – минимальное значение;
 MAXVAL – максимальное значение;
 TRUNCATE – обрезка строки по максимальной длине (0
– не обрезать, 1 – обрезать)
 PATTERN – формат проверки по шаблону.
Ключевые слова:
 CLIENTDATATYPE VARCHAR;
 ODBCTYPE VARCHAR;
 SQLCATEGORY STRING.
%Library.Currency
Тип %Library.Currency предназначен для представления
валюты, имеет опциональные параметры:
 MINLVAL – минимальное значение;
 MAXVAL – максимальное значение;
 FORMAT – формат аргумента функции $Fnumber.
Ключевые слова:
 CLIENTDATATYPE CURRENCY;
 ODBCTYPE CURRENCY;
 SQLCATEGORY CURRENCY.
%Library.Integer
Тип %Library.Integer предназначен для представления
целых чисел, имеет опциональные параметры:
45
 MINLVAL – минимальное значение;
 MAXVAL – максимальное значение;
 FORMAT – формат аргумента функции $Fnumber.
Ключевые слова:
 CLIENTDATATYPE INTEGER;
 ODBCTYPE INTEGER;
 SQLCATEGORY INTEGER.
Форматы данных
Данные в Cache Objects может представляться в четырех
форматах:
 Формат внутреннего представления данных (Logical)
 Формат представления пользователю (Display)
 Формат хранения данных (Storage)
 Формат SQL и ODBC (ODBC)
Переход между форматами выполняется преобразованиями
LogicalToDisplay,
DisplayToLogical,
LogicalToStorage,
StorageToLogical, LogicalToODBC и OdbcToLogical.
2.5. Примеры и упражнения
Пример 2.1.
Определение свойства объекта на языке CDL.
Пусть создаваемый объект представляет описание
автомобиля. Определим для него свойство «максимальная
скорость» - Speed, используя язык CDL.
Решение:
1) Создание свойства начинается с оператора Attribute.
2) За оператором Attribute пишется имя свойства.
3) Выберем подходящий тип данных - %Library.Numeric – число
с фиксированной точкой.
4) Введем ограничение – максимальная скорость не может быть
менее 50 км/ч – это не позволит ввести по ошибке слишком
малые или отрицательные значения.
46
Ответ:
Attribute Speed {Type=%Library.Numeric(MINLVAL=50);}
Пример 2.2.
Определение свойства – ссылки на хранимый объект
Пример 2.2.
Хранимый класс
Sotrudnik
Хранимый класс
Person.Obrazovanie
Свойства
.............
Свойства
Obrazovanie
.............
.............
Как показано на рисунке, свойство может представлять
собой ссылку на хранимый объект. Определим свойство
Obrazovanie как ссылку на хранимый класс Person.Obrazovanie.
Решение:
Attribute Obrazovanie {Type=Person.Obrazovanie;}
Пример 2.3.
Определение свойства – ссылки на встроенный объект
При тех же условиях, что и в предыдущем примере, класс
Person.Obrazovanie является встроенным. Тогда определение
свойства идентично предыдущему:
Решение:
Attribute Obrazovanie {Type=Person.Obrazovanie;}
47
Пример 2.3.
Хранимый класс
Sotrudnik
Свойства
.............
Obrazovanie
Встроенный класс
Person.Obrazovanie
Свойства
.............
.............
Демонстрационный пример 2.4.
Определение класса
Определим хранимый класс Sotrudnik для хранения данных о
персонале.
Решение:
1) Напишем слово class и имя класса: class Sotrudnik
2) Описание класса ограничено фигурными скобками: {}
3) Напишем комментарий-описание: descrition = «Данные о
персонале»;
4) Наследуем свойства класса %Library.Persistent: super=
%Library.Persistent;
5) Для хранимого класса укажем слово Persistent;
6) Далее определяются свойства и методы этого класса.
48
Ответ:
class Sotrudnik
{
descrition = «Данные о персонале»;
super= %Library.Persistent;
Persistent;
………………………………………….
}
Упражнение 2.1.
Определить свойство объекта на языке CDL.
Задание:
Пусть создаваемый объект представляет описание мебели.
Определим для него свойство «материал» - Material, используя
язык CDL.
Дано:
Имя свойства: Material;
Тип данных: %Library.String
Задания
Задание 2.1.
Создать с помощью языка CDL определение хранимого
класса для описания книги. Определить следующие свойства:
 Автор
 Название
 Количество страниц
Задание 2.2.
Свойство Material хранимого класса Detal является ссылкой
на хранимый класс Zavod.Materialy:
Напишите на языке CDL определение этого свойства.
49
3. Введение в язык программирования Cache
ObjectScript
3.1. Особенности программирования в Cache Objects
Для создания и обработки данных в Cache Objects
используются 4 типа программ:
Программы для СУБД Cache
Типы программ
Промежуточный код
Макропрограмма
.int
.inc
Макрокод
.mac
Объектный код
.obj
Как правило, программа создается с использованием
макропрограмм и макрокода, а сохраняется и распространяется в
виде объектного кода. Программный код Caché ObjectScript
хранится в базе данных Caché. Любые изменения
кода распространяются по всем серверам приложений
автоматически.
Типы программ
Создание и обработка данных в Cache Objects происходит
при выполнении объектного кода, написанного на языке Cache
ObjectScript.
При написании программы можно кроме, собственно,
команд Cache ObjectScript, использовать команды встроенных
языков HTML и SQL, макросы и макродирективы. Программа с
их использованием называется макрокод. Для исполнения ее
нужно компилировать в промежуточный код, а затем в
объектный.
50
Команды Cache ObjectScript, с использованием команд
встроенных языков HTML и SQL, макросов и макродиректив
может объединяться в макропрограммы, сохраняемые в
специальной макробиблиотеке.
Компиляция макрокода в объектный код происходит в два
этапа: сначала макрокод преобразуется в промежуточный код,
затем промежуточный код превращается в объектный код.
Источники объектного кода
Классы, хранящиеся в библиотеке классов, также
преобразуются, с помощью компилятора классов, в объектный
код на языке Cache ObjectScript.
Объектно-ориентированные приложения, написанные на
других языках, могут быть преобразованы в объектный код на
языке Cache ObjectScript с помощью Cache ObjectServer для Java
или Cache ObjectServer для ActiveX.
Источники объектного кода
Библиотека классов
Макрокод
Java-приложения
Приложения ActiveX
Преобразование в объектный код
Готовый к исполнению программный код на языке Cache ObjectScript
3.2. Переменные и операторы Cache ObjectScript
Переменные в языке Cache ObjectScript делятся на две группы:
 Локальные переменные, которые не могут храниться в базе
данных, и связаны только с одним процессом.
 Глобальные переменные (глобалы), которые могут
храниться в базе данных, и могут использоваться разными
процессами.
51
Переменные в Cache ObjectScript
Виды переменных Cache ObjectScript
Глобалы
Локальные
Хранятся только в
оперативной памяти
Хранятся как в
оперативной памяти,
так и в базе данных
Обрабатываются только
одним процессом
Обрабатываются
одним или
многими процессами
Имена переменных
Каждая переменная в языке Cache ObjectScript имеет
уникальное имя, удовлетворяющее следующим правилам:
 Длина имени не ограничена.
 Переменные различаются по первому 31 символу.
 Первый символ – буква или символ «%».
 Точка (символ «.») не может быть первым или последним
символом имени.
 Остальные символы – буквы, цифры или точки («.»).
 Перед именем глобалов ставится символ «^».
 Регистр имеет значение.
Типы данных Cache ObjectScript
В отличие от многих языков программирования, таких как
Pascal или C++, в языке Cache ObjectScript типы данных в явном
виде не задаются. Один и тот же набор символов в зависимости
от контекста может восприниматься как символьная строка или
как число.
Символьная строка содержит буквы, цифры, знаки
препинания и другие символы.
52
Число может быть представлено:
 Целым числом, например, «60».
 Десятичной дробью, например, «8.60» или «.60» (ноль
целых можно не писать).
 Числом с плавающей точкой, например, «25.7E-1» или
«2.15е7».
Перед числом может стоять неограниченное количество
нулей, что не влияет на его значение, и неограниченное число
знаков плюс или минус, при этом каждый знак минус меняет
значение числа на противоположное.
Преобразование типов
По
умолчанию,
переменная
Cache
ObjectScript
воспринимается как символьная строка переменной длины. Если
над переменной выполняется числовая операциция, то
переменная воспринимается как число. Соответственно,
существует набор правил преобразования символьной строки в
число:
 Строка символов просматривается слева направо.
 Если текущий символ соответствует формату записи числа
(см. предыдущий кадр), то он воспринимается как
очередная цифра числа.
 Если текущий символ несоответствует формату записи
числа, преобразование заканчивается.
Так, строка «+-05.4.8fgDb» может восприниматься как
десятичная дробь со значением «-5.4».
Так как тип данных в явном виде не задается, то и
объявление переменных в Cache ObjectScript не требуется.
Системные переменные
В Cache ObjectScript существуют особые, системные
переменные, значения которых программист может использовать
в своей программе. Перед именем системной переменной
ставится символ «$». Рассмотрим некоторые из них.
53
$HALT
Системная переменная $HALT содержит имя программы,
которая будет вызвана командой HALT.
$Horolog
Системная переменная $Horolog содержит счетчики даты и
времени.
Имя переменной может быть сокращено до $H
$IO
Системная переменная $IO содержит имя текущего устройства
ввода/вывода.
Имя переменной может быть сокращено до $I
$Job
Системная переменная $Job содержит идентификатор текущего
процесса.
Имя переменной может быть сокращено до $J
$Key
Системная переменная $Key содержит символьную строку,
которой завершилась последняя команда Read.
Имя переменной может быть сокращено до $K
$Principal
Системная переменная $Principal содержит имя устройства, с
которого запущен текущий процесс.
Имя переменной может быть сокращено до $P
$Quit
Системная переменная $Quit содержит значение «1», если
выполняется пользовательская функция и «0» в остальных
случаях.
Имя переменной может быть сокращено до $Q
$Storage
Системная переменная $Storage содержит число байтов,
отведенных для хранения локальных переменных текущего
процесса.
54
Имя переменной может быть сокращено до $S
$Test
Системная переменная $Test содержит значение последнего
вычисленного логического условия.
Имя переменной может быть сокращено до $T
$X
Системная переменная $X содержит значение горизонтальной
координаты позиции курсора (0..255 символов от начала строки).
$Y
Системная переменная $Y содержит значение вертикальной
координаты позиции курсора (0..255 символов).
$ZA
Системная переменная $ZA содержит статус последней команды
Read на текущем устройстве ввода.
$ZName
Системная переменная $ZName содержит имя программы,
исполняемой в данный момент.
Имя переменной может быть сокращено до $ZN
Операторы
Операции над переменными и константами задаются
соответствующими операторами.
Унарные операторы задают операцию над одним
операндом. К унарным операторам Cache ObjectScript относятся:
 Арифметические унарные операторы «+» и «-». Наличие
этих операторов перед переменной или константой
означает, что эту переменную или константу, надо
воспринимать как число с соответствующим знаком.
Например, «12fG4» - это символьная строка, а «+12fG4» это число 12.
55
 Логический унарный оператор «"» - оператор
логического отрицания – задает операцию «Не».
Результатом логических операций могут быть значения «1»
– «Истина», или «0» - «Ложь».
Бинарные операторы задают операцию над двумя
операндами. К бинарным арифметическим операторам Cache
ObjectScript относятся:





Оператор «+» - соответсвует операции сложения.
Оператор «-» - соответсвует операции вычитания.
Оператор «*» - соответсвует операции умножения.
Оператор «/» - соответсвует операции деления.
Оператор «\» - соответсвует операции целочисленного
деления.
 Оператор «#» - соответсвует операции получения остатка от
целочисленного деления.
 Оператор «**» - соответсвует операции возведения в
степень. Например, 42 записывается как 4**2.
Строковые операторы задают операцию над двумя
символьными строками. К бинарным строковым операторам
Cache ObjectScript относятся:
 Оператор «=» - задает операцию проверки равенства строк.
 Оператор «[» - задает операцию проверки условия: правая
строка содержит левую.
 Оператор «]» - задает операцию проверки условия: левая
строка следует за правой. Например, b]a – истина, а d]k –
ложь.
 Оператор «]]» - задает операцию проверки условия: при
сортировке по алфавиту левая строка будет стоять после
правой.
 Оператор «_» - задает операцию конкатенации: правая
строка присоединяется к концу левой.
56
Бинарные арифметические операторы сравнения задают
логическую операцию над двумя числами. К бинарным
арифметическим операторам сравнения Cache ObjectScript
относятся:
 Оператор «<» - задает операцию проверки условия:
значение левого выражения меньше значения правого.
 Оператор «>» - задает операцию проверки условия:
значение правого выражения меньше значения левого.
 Оператор «=» - задает операцию проверки условия:
значение левого выражения равно значению правого. При
этом оба выражения должны восприниматься как числовое
значение, например, благодаря знаку «+» перед ними, иначе
они будут сравниваться как символьные строки.
Логические операторы задают логическую операцию над
операндами-условиями. К бинарным логическим операторам
Cache ObjectScript относятся:
 Оператор «&» - задает логическую операцию «И». Ее
результатом является «1», если истинны оба условия и «0»
в остальных случаях.
 Оператор «&&» - также задает логическую операцию «И».
При этом если левое условие ложно, правое не проверяется.
 Оператор «!» - задает логическую операцию «ИЛИ». Ее
результатом является «0», если ложны оба условия и «1» в
остальных случаях.
 Оператор «||» - также задает логическую операцию «ИЛИ».
При этом если левое условие истинно, правое не
проверяется.
57
3.3. Выражения и команды Cache ObjectScript
Выражения в Cache ObjectScript представляют собой набор
простейших выражений, связанных операторами. Результатом
вычисления выражения является значение.
Например, следующая строка, с помощью команды Set,
присваивает переменной x значение выражения ad+c-b:
Set x = a * d + c - b
Отметим, что между командой Set и именем переменной x
должен быть один пробел. В остальных случаях количество
пробелов между элементами выражения может быть
произвольным.
Простейшие выражения
К простейшим выражениям Cache ObjectScript, в частности,
относятся:







Переменные – как локальные, так и глобальные.
Системные переменные.
Функции
Пользовательские функции
Пользовательские переменные функции
Числовые константы
Строковые константы
Порядок выполнения операций
В отличие от большинства популярных языков
программирования, в языке Cache ObjectScript все бинарные
операции имеют одинаковый приоритет и выполняются слева
направо.
Например, в выражении 44-2*2 сначала будет вычислена
операция 44-2=42, затем операция 42*2=84. Поэтому необходимо
внимательно следить за порядком операций в выражении, или
задавать приоритет операции в явном виде, с помощью скобок.
58
Команды Cache ObjectScript
Программные конструкции языка Cache ObjectScript, как и
любого другого, определяются командами. Отметим ряд
особенностей команд Cache ObjectScript:
 Команды состоят из командных слов и аргументов
команды.
 Если в команде несколько аргументов, они разделяются
запятыми и обрабатываются по порядку.
 После командного слова может стоять условие – т.н.
постусловие – в этом случае команда выполняется,
только если постусловие истинно.
 Все команды могут быть сокращены до одной-двух букв.
 Между командным словом и первым аргументом должен
быть один пробел.
 Если в команде нет аргументов, перед следующей
командой должно быть не менее двух пробелов, чтобы
следующая команда не воспринималась как аргумент
предыдущей.
Группы команд Cache ObjectScript
Команды языка Cache ObjectScript принято делить на
несколько групп:
 Команды управления последовательностью выполнения
программы.
 Команды операций с переменными.
 Команды ввода/вывода.
 Другие команды – команды не входящие в перечисленные
выше группы.
Рассмотрим основные группы команд языка Cache ObjectScript.
59
Команды управления последовательностью выполнения
программы.
Команда If
Команда If – команда условного перехода. Аргументом
является логическое условие. Если оно выполняется (при этом
системная переменная $Test получает значение «1»), то
выполняются остальные команды в этой строке программы. При
невыполнении условия системная переменная $Test получает
значение «0».
Например, If x>10 Set FIO=”Иванов”
Команда If может использоваться без аргумента, в этом
случае остальные команды в этой строке программы будут
выполнены, если системная переменная $Test уже имеет
значение «1».
Например, If Set FIO=”Иванов”
Команда Else
Команда Else – команда условного перехода. Аргументов не
имеет. Если системная переменная $Test имеет значение «0», то
выполняются остальные команды в этой строке программы.
Команда Else значение системной переменной $Test не изменяет.
Например, Else Set FIO=”Петров”
Команда For
Команда For – команда организации цикла. Параметры цикла
и условия его завершения можно задать несколькими способами:
 Задать переменной-параметру цикла список значений: For
i=5,15, -3,8
 Задать переменной-параметру цикла начальное значение,
шаг и конечное значение: For i=5:2:80
 Задать переменной-параметру цикла только начальное
значение и шаг: For =5:2 В этом случае выход из цикла
возможен по условию команды Quit.
 Не задавать не начального значения, ни шага: For . Выход
60
из цикла возможен по условию команды Quit.
Тело цикла ограничивается фигурными скобками.
Команда Quit
Команда Quit – команда выхода из цикла. Может
использоваться двумя способами:
Без аргументов команда Quit используется как операторная
скобка, ограничивающая тело цикла или блоков команд Do и
Xecute: Quit.
С аргументом-условием команда Quit используется как
условие выхода из цикла.
Команда Do
Команда Do – команда вызова программ и подпрограмм.
Аргументами команды являются имя вызываемой программы и
список фактических параметров:
Do Prog1(x1,y1)
В качестве фактических параметров могут использоваться
константы, переменные, системные переменные и др.
выражения. Перед именем программы может быть указана
метка, с которой эту программу исполнять.
Do Label1 Prog1(x1,y1)
В одной команде Do может быть перечислено несколько
программ, которые вызываются последовательно.
Выполнение программ может быть обусловлено постусловием:
Do:x>3 Prog1(x1,y1)
Команда Goto
Команда Goto – команда безусловного перехода на
указанную в качестве аргумента метку:
Goto Label1
Хотя команда Goto – команда безусловного перехода, она,
как и другие команды Cache ObjectScript, может иметь
постусловие:
Goto:x>3 Label1
61
Постусловие может накладываться и на отдельные
аргументы команды Goto:
Goto Label1:x=1,Label2:x=0,
в последнем случае, при x=1 будет выполнен переход на метку
Label1, а при x=0 будет выполнен переход на метку Label2.
Команда Xecute
Команда Xecute позволяет выполнить подпрограмму,
заданную в виде символьной строки:
Xecute “Set L=34”
Символьная строка может быть задана не только в виде
константы, но и в виде выражения:
Set F=“Set L=34”
Xecute F
Команда Break
Команда Break приостанавливает выполнение программы.
Она позволяет программисту при отладке программы задать
точку останова. Часто используется в следующих вариантах:
 Break – команда без аргументов – точка останова
программы.
 Break 1 – допускает прерывание программы нажатием
клавиш «Ctrl+C».
 Break 0 – запрещает прерывание программы нажатием
клавиш «Ctrl+C».
Команды операций с переменными.
Команда Set
Команда Set – команда присвоения значений переменным.
Например,
Set F=36
Set str2=”fgdg”
С помощью одной команды можно задать значения
нескольких переменных:
62
Set (str1,str2,str3)=”Москва”
Присвоение значения переменной может быть обусловлено
выполнением постусловия:
Set:x>0 f=38
Команда Kill
Команда Kill – команда удаления переменных. При
удалении переменных, как локальных, так и глобальных,
используемые ими участки памяти возвращаются операционной
системе. Например, переменные a, f и str2 удаляются следующей
командой:
Kill a,f,str2
С помощью команды Kill можно наоборот, удалить все
переменные, кроме указанных в скобках. Удалим, например, все
переменные, кроме str1 и str2:
Kill (str1,str2)
Чтобы удалить все локальные переменные, достаточно
использовать команду Kill без аргументов.
Команда Lock
Команда Lock позволяет процессу захватить глобальную
переменную, заблокировав доступ к ней других процессов.
Существуют следующие варианты применения команды Lock:
 Снятие всех блокировок – команда Lock без аргументов:
Lock
 Снятие прежних блокировок и блокировка указанных
переменных: Lock ^S, если переменных несколько – они
перечисляются в скобках, через запятую: Lock (^S1, ^S2)
 Блокировка указанной переменной: команда Lock со знаком
«+» перед переменной: Lock +^S
 Снятие блокировки указанной переменной: команда Lock
со знаком «-» перед переменной: Lock -^S
Для снятия блокировки, сделанной командой Lock со
знаком «+», с переменной ее надо разблокировать командой
Lock со знаком «-» столько раз, сколько раз ее блокировали.
63
Команды ввода/вывода
Команда Read
Команда Read считывает вводимые значения с устройства
ввода и присваивает эти значения заданной переменной.
Команда может использоваться, в частности, в следующих
вариантах:
 Ввод переменной – команда Read и имя переменной: Read
g1
 Ввод одного символа – перед именем переменной символ
«*»: Read *sim1
 Ввод переменной с ограничением количества вводимых
символов – после имени переменной ставится символ «#» и
количество символов: Read g1#5
Команда Write
Команда Write выводит данные на экран монитора или иное
устройство ввода/вывода. Команда может использоваться, в
частности, в следующих вариантах:
 Вывод значения переменной: Write g1
 Отображение хранящегося в переменной ASCII-кода в виде
символа – перед именем переменной символ «*»: Write *g1
 Форматированный вывод с использованием символов:
o «#» - с новой страницы
o «!» - с новой строки
o «?» - табуляция
Например, вывод значения переменной g1 с новой строки:
Write !g1
3.4. Примеры и упражнения
Пример 3.1.
Написание простейшей программы на языке Cache ObjectScript
Задача
Написать
формуле:
программу,
вычисляющую
значение
х
по
64
x = a + b, a > b;
x = a - b, a ≤ b;
Дано
Переменные a и b, вводимые с клавиатуры.
Найти
Значение x.
Решение
Напишем программу на языке Cache ObjectScript. Каждая
строка программы должна начинаться с метки или пробела.
Метка первой строки – имя программы (входная метка). За
символом «;» следует строка-комментарий.
Prog1
Read a
Read b
If +a>+b Set x=a+b
Else Set x=a-b
Write x
Quit
Пример 3.2.
Использование подпрограмм в языке Cache ObjectScript
Решим задачу из предыдущего примера, используя
подпрограммы. Пусть подпрограмма Ppr1 выполняет вычисление
и вывод на экран результата при a > b, а подпрограмма Ppr2
выполняет вычисление и вывод на экран результата при a ≤ b.
Подпрограмма вызывается командой Do, за которой
следует имя подпрограммы. Аналогично, можно вызвать
выполнение другой программы, написав команду Do и имя
вызываемой программы с символом «^» перед ним.
Решение
Prog1
Read a
Read b
If +a>+b Do Ppr1
Else Do Ppr2
65
Quit
Ppr1
Set x=a+b
Write x
Quit
Ppr2
Set x=a-b
Write x
Quit
Пример 3.3.
Использование цикла For в языке Cache ObjectScript
Задача
Написать
формуле:
программу,
вычисляющую
значение
х
по
x = (a + 4b),
где a – константа, значение которой вводится с клавиатуры,
b - переменная, последовательно принимающая значения 1,
8, 4, 10.
Решение
Prog1
Read a
For b=1,8,4,10 {Set x=4*b+a}
Quit
Упражнение 3.1.
Присвоение значения переменной.
Присвойте переменной х1 значение
соответствующую строку программы.
50.
Напишите
Упражнение 3.2.
Организация цикла For.
Вычислить значение выражения z=3x2, где x=1..10, шаг 1.
Напишите соответствующую строку программы.
66
Упражнение 3.3.
Вывод значения переменной.
Выведите значение переменной gh3 так, чтобы оно
отобразилось с новой строки. Напишите соответствующую
строку программы.
Задания
Задание 3.1.
Написать программу на языке Cache ObjectScript,
выполняющую вычисление значения z по формуле:
z = 2a + 3b4, a > b;
z = 3a - 4b, a = b;
z = 3a2 - 4b, a < b;
Дано
Переменные a и b - числа, вводимые с клавиатуры.
Найти
Значение x. Вывести его на экран с новой строки.
Задание 3.2.
Написать программу на языке Cache ObjectScript,
выполняющую вычисление значения z по формуле:
z = F + D,
где F = 3a - 4b,
D =2a + 3b4.
Дано
Переменные a и b - числа, вводимые с клавиатуры.
Найти
Значение z. Вывести его на экран с новой строки.
Использовать подпрограммы для вычисления промежуточных
значений F и D.
67
4. Среда проектирования Cache Studio
4.1. Утилиты СУБД Cache
Создание и администрирование баз данных в СУБД Cache
обеспечиваются набором утилит.
Запуск утилит СУБД Cache
После установки на компьютере СУБД Cache в правом
нижнем углу экрана появляется специальный значок – «Куб
Cache».
Если щелкунуть мышкой по этому значку, появляется меню
с набором утилит, из которого выбираем нужную.
На рисунке показано меню выбора утилит, которое появляется
при щелчке мышкой по Кубу Cache.
Редактор конфигурации
68
Утилита «Редактор конфигурации» применяется для
редактирования системной информации, создания и просмотра
баз данных, рабочих областей, сетевых приложений и др.
информации.
Разработчик при создании базы данных может использовать
настройки по умолчанию. В этом случае база данных будет
иметь следующие параметры:
 Имя файла: Cache.dat
 Размещение базы данных: C:\CacheSys\MGR\User
 Начальный размер базы данных:1Мб
Cache Terminal
Утилита «Cache Terminal» применяется для отладки
программного кода. Ее использование позволяет разработчику
поотдельности отлаживать следующие элементы программного
продукта:




Отдельные команды
Функции
Процедуры
Программы
Cache Проводник
Утилита «Cache Проводник» применяется для управления
такими элементами СУБД Cache, как:
 Программы
 Глобалы
 Классы.
69
Перечисленные элементы с помощью утилиты «Cache
Проводник» можно просматривать, импортировать из других
форматов и экспортировать в другие форматы.
Cache SQL – Менеджер
Возможность СУБД Cache реализовать как объектную, так
и реляционную модели данных делает необходимым наличие
специальной утилиты для работы с реляционными базами
данных. Утилита SQL–Менеджер обеспечивает выполнение
следующих функций:





Создание и редактирование таблиц
Создание индексов
Создание триггеров
Задание ограничений целостности
Выполнение запросов
4.2. Использование утилиты Cache Studio
Утилита Cache Studio представляет собой среду разработки
приложений для СУБД Cache. В отличие от упомянутой выше
утилиты SQL–Менеджер, утилита Cache Studio реализует
объектный подход к созданию и обработке баз данных.
Возможности утилиты Cache Studio
В
общем
случае,
разрабатываемое
приложение
рассматривается как проект, который может включать
следующие элементы:
 Программы на языках Cache ObjectScript, Java, SQL, HTML
и др.
 CSP-файлы
 Классы СУБД Cache
Утилита Cache Studio позволяет изменять определения
классов, создавать, редактировать и отлаживать программы на
языках Caché Object Script, Basic, Java, SQL, JavaScript, HTML, и
XML.
70
Опция «Файл» утилиты Cache Studio
Рассмотрим некоторые опции пункта меню «Файл»:
Опция «Новая Studio» cоздает еще одно окно утилиты
Cache Studio, что позволяет редактировать несколько проектов
одновременно, легко переключаясь между ними.
Опция «Изменить область» пункта меню «Файл» открывает
доступ к окну «Менеджер соединений» и позволяет указать путь
к рабочей области СУБД. При этом сервер СУБД и области
должны быть созданы заранее.





Опция «Создать» пункта меню «Файл» позволяет создать:
Новую программу на языке Cache ObjectScript
Новую программу на языке Basic
Новый класс СУБД Cache
Новый CSP-файл
Новые файлы XML и Java
Опция «Открыть» пункта меню «Файл» позволяет открыть
существующие файлы: как проекты (файлы с расширением .prj),
так и отдельные файлы макропрограмм (файлы с расширением
.mac), классов (файлы с расширением .cls), и т.д.
Для сохранения изменений в разрабатываемых элементах
проектов – макропрограмм, CSP-файлов и др. - пункт меню
«Файл» содержит опции:
 Сохранить
 Сохранить как
 Сохранить все
Для сохранения проектов
содержит следующие опции:
 Новый проект
 Открыть проект
 Сохранить проект
целиком пункт меню «Файл»
71
 Сохранить проект как
 Закрыть проект
Опция «Правка» утилиты Cache Studio
Пункт меню «Правка» предназначен для редактирования
компонентов
проекта
и
содержит
обычные
опции
редактирования:
Отметим, что Cache Studio обеспечивает подсветку команд
для программ на языках Caché Object Script, Basic, Java, SQL,
JavaScript, HTML, и XML.
Опция «Вид» утилиты Cache Studio
Пункт меню «Вид» позволяет включить или отлючить
вывод на экран элементов Cache Studio:
72
Рабочее пространство представляет собой специальный
текстовый редактор для написания программ на нескольких
языках. На приведенном рисунке в рабочей области программа
на языке Caché Object Script.
Элементы Cache Studio
Рабочее пространство Cache Studio
73
Инспектор Cache Studio показывает данные
редактируемом элементе проекта:
Имя - имя элемента (т.е. программы, класса и т.д.)
о
 Языковой режим - язык, на котором написан и
отлаживается элемент
 Временная отметка, отмечающая начало работы над
элементом
 Время компиляции, отмечающее момент последней
компиляции программы
Элементы Cache Studio
Инспектор Cache Studio
Вывод Cache Studio показывает окно вывода отлаживаемой
программы, в котором можно вводить значения переменных и
наблюдать реакцию программы.
74
Элементы Cache Studio
Вывод Cache Studio
Опция «Проект» утилиты Cache Studio
Пункт меню «Проект» Cache Studio позволяет, с помощью
опции «Добавить элемент» добавить в проект еще один, уже
существующий
элемент,
например,
созданную
ранее
макропрограмму.
Опция Параметры пункта меню «Проект» Cache Studio
задает параметры отладки: вид отлаживаемого элемента:
программа или CSP-страница и точки останова.
Опция «Собрать» утилиты Cache Studio
Пункт меню «Собрать» Cache Studio позволяет
скомпилировать редактируемые элементы проекта – программы,
классы и т.д., и собрать из них единый проект.
75
Опция «Отладка» утилиты Cache Studio
Пункт меню «Отладка» Cache Studio служит для проверки
правильности работы создаваемой программы, обнаружения и
устранения ошибок. Для этого разработчику предоставляется
возможность обычного или пошагового исполнения программы,
задание точек останова и т.д.
Опция «Инструменты» утилиты Cache Studio
Пункт меню «Инструменты» Cache Studio предоставляет
программисту опции для экспорта созданной программы в
другие форматы, использования стандартных шаблонов и
мастеров, импорта элементов проекта из других форматов.
Опция «Утилиты» утилиты Cache Studio
Пункт меню «Утилиты» Cache Studio предоставляет
программисту некоторые полезные утилиты, позволяющие,
например, объединять разнообразные приложения в единый
программный комплекс.
76
Опция «Окно» утилиты Cache Studio
Пункт меню «Окно» Cache Studio позволяет разработчику
создать новые окна-рабочие пространства и расположить окнат
наиболее удобным для себя образом.
Управление окнами в Cache Studio
Опция «?» утилиты Cache Studio
Пункт меню «?» Cache Studio предоставляет разработчику
значительный объем справочных материалов по командам среды
разработки, языкам Caché Object Script, CDL, и SQL, а также
содержит ссылку на домашнюю страницу Intersystem.
77
4.3. Примеры и упражнения
Пример 4.1.
Создание программы в среде разработки Cache Studio
Задача
Написать программу, вычисляющую значение D по
следующей формуле:
D = 12x4 + 5b,
где b=5, x>7;
b=8, x≤7;
Дано
Значение переменной x вводится с клавиатуры, необходимо
вывести на экран значение переменной D. Все значения,
присваевыемые переменным D,x,b – целые числа.
Решение
1) Щелкнем левой кнопкой мыши по «Кубу» и выберем в
появившемся меню утилиту Cache Studio.
2) Щелкнем левой кнопкой мыши по кнопке «Создать»
Кнопка “Создать”
78
3) На экране появится окно «Создать». Выберем создание
программы на языке Cache ObjectScript.
Создание программы на
языке Cache ObjectScript
После этого, в окне Cache Studio появляется «Рабочее
пространство», в поле которого вводится программа.
4) Введем программу:
Ввод программы
79
5) Сохраним программу, выбрав в пункте меню «Файл» опцию
«Сохранить как»:
Сохраним нашу программу под именем, например, Pr2.mac.
6) Выберем в пункте меню «Отладка» опцию «Цель отладки». В
открывшемся окне нажмем кнопку «Просмотр» и выберем нашу
программу (в нашем примере ^Pr2).
Имя отлаживаемой программы
7) Запустим программу, выбрав пункты меню Отладка/Старт:
8) В открывшемся окне «Вывод» введем значение x. Программа
выдает ответ и сообщает о завершении программы. Проверяем
результат: При x=4, D=232 – ответ правильный.
Задания
Задание 4.1.
Перечислите утилиты СУБД Cache и коротко опишите их
назначение.
Задание 4.2.
Своими словами опишите порядок разработки программы в
Cache Studio.
80
5. Организация доступа к данным в СУБД Cache
5.1. Организация доступа к объектам
Реализуя объектный подход к хранению и обработке данных,
СУБД Cache обеспечивает хранение объектов - экземпляров
хранимых классов. Для этого, хранимые классы наследуют от
системного класса %Library.Persistent специальные методы,
обеспечивающие выполнение операций, связанных с хранением
объектов, а сами объекты имеют уникальные идентификаторы,
позволяющие их различать и ссылки, позволяющие найти
нужный объект в оперативной памяти.
Рассмотрим подробнее способы создания и идентификации
объекта в Cache Objects.
Идентификатор объекта OID
Когда объект – экземпляр хранимого класса – впервые
сохраняется в базе данных, ему присваивается уникальный
идентификатор объекта OID, который остается неизменным на
все время существования объекта и состоит из имени класса и
номера экземпляра, уникального внутри этого класса. Основное
назначение OID – поиск нужного объекта в базе данных.
Объектная ссылка OREF
Если объект находится в оперативной памяти – только что
создан, или загружен из базы данных – ему присваивается
объектная ссылка (OREF), через которую программа на языке
Cache ObjectScript обращается к объекту. Если объект выгружен
из памяти, а затем загружен вновь, ему присваивается новая
объектная ссылка. Для объектов – экземпляров встроенных и
временных классов, которые не хранятся в базе данных, OREF
является основным способом доступа к объекту.
Чтобы создать объект и получить на него объектную
ссылку надо воспользоваться командой:
Set Переменная = ##class(Имя_Класса).%New(), где
81
 Переменная – имя переменной - объектной ссылки (OREF)
на создаваемый объект,
 Имя_Класса - это имя класса, экземпляром которого
является создаваемый объект.
Открытие объекта
Если объект находится в базе данных, его можно поместить
в оперативную память с помощью команды открытия объекта:
Set Переменная = ##class(Имя_Класса).%OpenId(ID), где:
 Переменная – имя переменной - объектной ссылки (OREF)
на открываемый объект,
 Имя_Класса - это имя класса, экземпляром которого
является открываемый объект.
 ID – ID объекта, т.е. его номер внутри класса.
Вместо этой команды, использующей ID объекта, можно
использовать команду, задающую полный идентификатор
объекта OID:
Set Переменная = ##class(Имя_Класса).%Open(OID), где:
 Переменная – имя переменной - объектной ссылки (OREF)
на открываемый объект,
 Имя_Класса - это имя класса, экземпляром которого
является открываемый объект.
 OID – OID объекта, т.е. его полный идентификатор.
Доступ к свойствам объекта
После того, как получена объектная ссылка, можно
получить доступ к свойствам этого объекта. Для этого нужно
указать переменную, содержащую OREF и имя свойства,
разделенные точками.
Например, изменить значение свойства можно командой:
Set Переменная-ссылка.Имя_свойства = Новое_значение, где
 Переменная-ссылка – имя переменной, содержащей
объектную ссылку (OREF) на данный объект,
 Имя_свойства - это имя свойства данного объекта,
82
значение которого надо изменить.
 Новое_значение – значение, присваиваемое свойству
объекта в результате выполнения данной команды.
Запись объекта в базу данных
Объекты, являющиеся экземплярами хранимых классов,
могут быть записаны в базу данных. Для этого используется
следующая команда:
Do Переменная-ссылка.%Save(), где
 Переменная-ссылка – имя переменной, содержащей
объектную ссылку (OREF) на данный объект,
При этом для новых объектов создается идентификатор OID.
Узнать OID объекта можно с помощью следующей команды:
Set Переменная=Переменная-ссылка.%Oid(), где
 Переменная-ссылка – имя переменной, содержащей
объектную ссылку (OREF) на данный объект,
 Переменная - это имя переменной, которой будет
присвоено значение OID данного объекта.
Удаление объекта из базы данных
Объекты, хранящиеся в базе данных, могут быть удалены.
Для этого используется следующая команда:
Do ##class(Имя_класса).%Delete(OID) , где
 Имя_Класса - это имя класса, экземпляром которого
является открываемый объект.
 OID – OID объекта, т.е. его полный идентификатор.
Вместо полного идентификатора можно использовать ID:
Do ##class(Имя_класса).%DeleteId(ID) , где
 Имя_Класса - это имя класса, экземпляром которого
является открываемый объект.
 ID – ID объекта, т.е. его номер внутри класса.
5.2. Организация доступа к таблицам
83
При изучении постреляционных баз данных мы уделили
наибольшее внимание реализации объектного подхода к
обработке данных. В то же время постреляционная СУБД
отличается от объектно-ориентированной СУБД тем, что все
данные сохраняются в постреляционной СУБД не виде объектов,
а в виде B-деревьев – структур, удобных для поиска – и могут
легко отображаться как в объектную форму, так и в табличную.
Если объектно-ориентированная технология позволяет
описывать самые сложные объекты, то достоинством
реляционного подхода являются широкие возможности по
формированию запросов, созданию отчетов и их статистической
обработке с использованием языка SQL.
В завершающих параграфах данного курса рассмотрим
подробнее реляционную составляющую постреляционной
СУБД: преобразование объектов в таблицы, создание SQLзапросов и т.д..
Соответствие элементов объектной и реляционной моделей
данных
Отображение внутренних структур СУБД как в объектную,
так и в табличную формы, требует установления соответствия
между элементами объектной и реляционной моделей данных.
При отображении объектов в табличном виде каждому
классу объектов сооветствует таблица – отношение реляционной
базы данных. Атрибуты отношения - столбцы таблицы –
соответствуют свойствам класса. Каждый экземпляр класса
отображается в один кортеж – строку записи в таблице.
При преобразовании объектов в таблицу в ней
автоматически создается столбец ID, играющий роль первичного
ключа отношения. Этот столбец заполняется значениями ID из
идентификаторов объектов OID.
Расширения языка SQL в СУБД Cache
Язык SQL, описанный стандартом ANSI, сам по себе
является мощным средством формулировки запросов к базе
данных. Одна из основных причин его популярности –
84
относительная независимость от конкретной СУБД. Тем не
менее, практически все производители СУБД вносят в свою
реализацию SQL свои дополнения – расширения SQL для данной
СУБД. Расширения SQL СУБД Cache призваны, в первую
очередь, учесть тесную связь объекно-ориентированного и
реляционного подходов постреляционной СУБД и обеспечить
использование возможностей языка SQL при программировании
на языке Cache ObjectScript.
Дополнительные операторы языка SQL в СУБД Cache
Кроме стандартных операторов языка SQL в СУБД Cache
вводится ряд дополнительных SQL-операторов для упрощения
формулирования часто встречающихся операций над данными,
таких как операция «соединение», а также ряд операторов языка
Cache ObjectScript. К дополнительным операторам языка SQL
для СУБД Cache относятся:






Оператор «=*» - задает операцию «внешнее содинение»
Оператор «->» - обозначает «неявное содинение»
Оператор «_» - задает операцию «конкатенация»
Оператор «#» - задает операцию «остаток от деления»
Оператор «&» - задает логическую операцию «И»
Оператор «!» - задает логическую операцию «ИЛИ»
Кроме того, из языка Cache ObjectScript заимствуются
операторы сравнения.
85
Операция «Соединение» в СУБД Cache
В стандартном ANSI SQL предусмотрена операция
«Внутреннее соединение». В СУБД Cache используются, также,
операции «Внешнее соединение» и «Неявное соединение».
Например, в результат операции «Внешнее соединение» входят
все кортежи первого отношения, даже если для них нет
соответствующих кортежей второго отношения.
Поля-списки
Расширение SQL для СУБД Cache позволяет хранить
списки из нескольких элементов в одной ячейке таблицы, задав в
ней поле-список. При этом каждый список воспринимается как
единый элемент таблицы и, таким образом, соблюдается условие
«атомарности» элементов отношения реляционной базы данных.
С точки зрения языка Cache ObjectScript, поле-список имеет тип
«список» - $List, или представляет собой символьную строку.
Связь между таблицами
Механизм ссылок и отношений зависимости позволяет
устанавливать связи между таблицами. На рисунке показана
ссылка: отношение между таблицами, при котором одна таблица
(в данном примере таблица «Магазин») включает поле
(«Поставщик»), содержащее первичные ключи другой таблицы
(в данном примере, таблицы «Поставщик»).
86
5.3. Примеры и упражнения
Пример 5.1.
Создание нового объекта
Задача:
Создать новый объект класса Person.Sotrudnik.
Решение:
Для создания нового экземпляра класса Person.Sotrudnik
используем следующую команду:
Set Sotr1 = ##class(Person.Sotrudnik).%New()
После выполнения данной команды переменная Sotr1 будет
содержать объектную ссылку на созданный объект.
Пример 5.2.
Открытие существующего объекта
Задача:
Открыть объект класса Person.Sotrudnik, имеющий ID=2345
Решение:
Для открытия объекта – экземпляра класса Person.Sotrudnik
используем следующую команду:
Set Sotr2 = ##class(Person.Sotrudnik).%OpenId(2345)
После выполнения данной команды переменная Sotr2 будет
содержать объектную ссылку на открытый объект.
Пример 5.3.
Сохранение объекта в базе данных
Задача:
Сохранить в базе данных объект класса Person.Sotrudnik,
объектная ссылка на который хранится в переменной ssylka.
Решение:
87
1) Для записи объекта в базу данных используем следующую
команду:
Do ssylka.%Save()
2) Сохраним в переменной Rezt результат выполнения записи:
Set Rezt=ssylka.%Save()
Если переменной Rezt будет присвоено значение «1», то
операция записи выполнена успешно.
Пример 5.4.
Использование операции «Внешнее соединение»
Задача:
Даны таблицы: Т1(Zakaz, Client), содержащая номера заказов и
фамилии клиентов и Т2(SName, e-mail), содержащая адреса
электронной почты тех клиентов, у которых он есть. Требуется
вывести на экран таблицу, содержащую номера заказов,
фамилии всех клиентов и адреса электронной почты тех
клиентов, у которых он есть.
Решение:
Соединим таблицы Т1 и Т2. Необходимо использовать операцию
«внешнее соединение», так как в противном случае в результат
не войдут фамилии тех клиентов, у которых нет адреса
электронной почты:
SELECT T1.Zakaz,T1.Client,T2.email
FROM T1,T2
WHERE T1.Client=*T2.SName
88
Обратите внимание на то, что условие WHERE сформулировано
с помощью оператора «=*» - это и задает выполнение запроса
как операцию «внешнее соединение».
Результат операции
Tаблица T3
Zakaz
Client
email
1232557
Иванов
ax@ml.ru
3456784
Петров
Упражнение 5.1.
Создание объекта
Создайте новый объект класса Mebel.Stol, поместив объектную
ссылку в переменную S1.
Упражнение 5.2.
Открытие объекта
Откройте объект класса Mebel.Stol, имеющий ID=2345, поместив
объектную ссылку в переменную S2.
Упражнение 5.3.
Выполнение операции «Внешнее соединение»
Дано
89
Таблицы t1(name,sname,address), содержащая фамилии, имена и
адреса сотрудников и t2(name,sertifikat,nsertifikat), содержащая
фамилии, наименование сертификатов и их номера.
Выполнить
Вывести на экран таблицу, содержащую поля name, sname,
address, sertifikat, nsertifikat, при этом показать и тех
сотрудников, у которых нет сертификатов. (Используйте только
маленькие английские буквы без лишних пробелов)
Задания
Пришлите тьютору по электронной почте ответы на следующие
задания:
Задание 5.1.
Напишите программу на языке Cache ObjectScript,
выполняющую следующие действия:
1) Создать новый объект класса Mebel
2) Присвоить его свойству Price значение 12300
3) Сохранить объект в базе данных
Для написания программы можно использовать любой
текстовый редактор.
Задание 5.2.
На рисунке изображены объекты класса Car. Нарисовать и
заполнить таблицу, которая получится при отображении этого
класса в табличную форму.
Задание 5.4.
Класс Car
ID 134
Имя класса Car
ID 135
Имя класса Car
ID 136
Имя класса Car
Марка: ВАЗ
Марка: ВАЗ
Марка: ГАЗ
Модель: 2110
Цена: 200
Модель: 2121
Цена: 300
Модель: 3105
Цена: 350
90
6. Сервер приложений и другие возможности СУБД
Caché
Важным элементом СУБД является Сервер приложений Caché
(Caché Application Server). Сервер приложений Caché
обеспечивает кэширование данных и связь с другими языками
программирования.
Программист может написать программу на удобном для него
языке, в привычной для него среде разработки, таких как Java,
C++, C#, COM, .NET и Delph, а затем, с помощью
соответствующего интерфейса сервера приложений Caché
обеспечить взаимодействие своей программы с СУБД Caché.
Кроме интерфейсов для классических алгоритмических языков,
Сервер приложений Caché включает виртуальную машину для
использования скриптов, написанных на специальных
скриптовых языках. Один из них, Caché ObjectScript, описан
выше. Кроме него могут использоваться скриптовые языки Caché
Basic и Caché MVBasic.
Данные могут быть импортированы в СУБД Caché из других
приложений или экспортированы в них с помощью язык
разметки для обмена данными между приложениями XML. Для
этого
предусмотрен
системный
класс
%XMLAdaptor,
предоставляющий методы создания для класса схемы DTD
(Document Type Definition) и XML Schema или для
автоматического представления данных объекта в формате XML.
Среди важнейших современных задач – обеспечение
информационной безопасности. Для защиты базы данных Caché
от несанкционированного доступа предусматривается полное
или частичное шифрование данных.
91
7. Глоссарий.
Бинарный оператор - оператор, задающий операцию,
выполняемую над двумя операндом, например, бинарный
оператор «+» задает операцию сложения двух чисел.
Глобал – см. глобальная переменная
Глобальная переменная (глобал) – переменная, значение
которой может храниться не только в оперативной памяти, но и
записываться в базу данных и использоваться несколькими
процессами.
Единая архитектура данных – организация данных,
обеспечивающая однозначное преобразование внутренних
структур данных, как в реляционные структуры, так и в
объектные.
Класс – группа объектов с одинаковым набором свойств и
методов.
Конкатенация – соединение нескольких строк в одну
Локальная переменная - переменная, значение которой может
храниться только в оперативной памяти, не может записываться
в базу данных и используется только одним процессом.
Множественное наследование – наследование, при котором
новый класс наследует свойства и методы нескольких классов.
Наследование – процесс создания нового класса на основе
существующего, при котором новый класс наследует свойства и
методы родителя, к которым добавляются свои.
Объектная ссылка – (OREF) - указатель на объект, хранящийся
в оперативной памяти.
Объектно-ориентированные базы данных – базы данных,
представляющие собой набор связанных объектов, каждый из
которых является экземпляром определенного класса со своими
свойствами и методами.
Полиморфизм - использование одного метода для объектов
разных классов, причем для каждого класса объектов этот метод
трактуется по-своему.
Системные
переменные
–
набор
переменных,
характеризующих состояние среды проектирования и обработки
данных – хранящих время, имена файлов и процессов и т.д.
92
Строковые операторы – операторы, которые задают операцию
над двумя символьными строками
Суперкласс – класс, имеющий потомков.
Тело цикла – набор циклически выполняемых команд.
Унарный оператор – оператор, задающий операцию,
выполняемую над одним операндом.
Хранимость – возможность неограниченно долго храниться в
базе данных
Экземпляр класса – объект данного класса
ActiveX – технология, обеспечивающая взаимодействие
программных компонентов по сети независимо от языка
программирования, на котором они написаны.
B-дерево – структура данных, представляющая собой
сбалансированное дерево с большим количеством ветвей.
CDL – язык описания классов СУБД Cache
CSP – Cache Server Pages – технология создания web-страниц для
приложений СУБД Cache.
Java – кроссплатформенный объектно-ориентированный язык
программирования.
ODMG - Object Data Management Group – стандарт на объектноориентированные базы данных.
OID – идентификатор объекта – присваивается при первом
сохранении объекта в базе данных и остается неизменным на все
время существования объекта; состоит из имени класса и номера
экземпляра, уникального внутри этого класса.
OREF – объектная ссылка – указатель на объект, хранящийся в
оперативной памяти.
SQL – Structed Querry Language - структурированный язык
запросов – стандартное средство формулировки запросов к
реляционным базам данных.
XML — язык разметки, обеспечивающий обмен данными между
приложениями.
93
Литература
1 Я.М. Голдовский Введение в сетевые технологии
Cisco. Электронное учебное пособие. МИИТ, 2005 г.
2 Б.В. Желенков Использование сетевого оборудования
Cisco. Электронное учебное пособие. МИИТ, 2005 г.
3 В.Г.Олифер, Н.А.Олифер. Компьютерные сети.
Принципы, технологии, протоколы. 3_е издание. – СПб.:
Питер, 2006.
4 Основы организации сетей Cisco, том1.: Пер. с англ. –
М. Издательский дом «Вильямс», 2002.
5 Основы организации сетей Cisco, том2.: Пер. с англ. –
М. Издательский дом «Вильямс», 2004.
6 Создание масштабируемых сетей Cisco.: Пер. с англ. –
М. Издательский дом «Вильямс», 2004.
Download