СУБД Cache' является уникальной системой. Наряду с реализацией в полном объеме основных принципов объектной технологии в СУБД Cache' поддерживается также структурированный язык запросов SQL для обеспечения выполнения запросов по стандарту, поддерживаемому многими инструментальными средствами. Кроме этого, с помощью единой архитектуры данных Cache' возможно автоматическое преобразование реляционных таблиц в классы объектов. При этом, при поступлении на сервер Cache' SQL DDL-описания реляционной таблицы Cache' автоматически преобразует DDL-описание во внутреннюю структуру хранения данных и сохраняет полученную структуру в словаре данных. Затем с помощью поставляемых в стандартной комплектации Java- или ODBC- драйверов производится импорт данных из реляционных таблиц в многомерные структуры ядра Cache'. После чего Cache' предоставляет возможность работы с данными, как в виде реляционных таблиц, так и в виде классов объектов. Таким образом, при переходе с реляционной технологии на объектную технологию разработка не начинается с "нуля" - многое уже сделано Cache' автоматически.
Классы Cache' также могут быть представлены в виде реляционных таблиц, причем соотношение между разнообразными понятиями объектного и реляционного подходов представлены ниже:
Объектное понятие Реляционное понятие
Класс Таблица
Экземпляр Строка
Идентификатор объекта (OID) ID-столбец в виде первичного ключа
Свойство-константа Столбец
Ссылка на хранимый объект Внешний ключ
Встраиваемый объект Индивидуальные столбцы
Коллекция-список Столбец с полем-списком
Коллекция-массив Подтаблица
Поток данных BLOB
Индекс Индекс
Запрос Хранимая процедура или представление
Метод класса Хранимая процедура
Отметим, что в таблице не обозначены понятия параметров класса, многомерных свойств и методов объекта, так как в реляционной технологии им нет аналогов. Дополнительно к объектным понятиям в Cache' поддерживаются еще и триггеры, присутствующие в реляционном представлении.
Доступ к данным с использованием языка SQL продолжает играть важную роль, т.к. многие существующие приложения и инструменты используют SQL в качестве языка запросов. СУБД Cache' поддерживает все элементы ANSI-стандартов, реализованных для SQL и SQL-92. Для облегчения разработки прикладных систем баз данных, Cache' поддерживает встраивание SQL в методы и программы. Встроенный SQL может быть использован для решения следующих задач:
Реализации сложных запросов к базам данных
Представления полученных результатов запросов в качестве значений переменных встроенного языка разработки приложений Cache' Object Script (COS).
Пример использования встроенного SQL запроса:
new id, Surname
set Surname="Ivanov"
&sql(SELECT Id into :id FROM Person where Surname=:Surname)
Приведенный код ищет по полю Surname таблицы Person поле со значением Ivanov и сохраняет найденный OID объекта в локальной переменной id. Пример демонстрирует случай использования встроенного SQL-запроса, не основанного на курсоре. В данном случае запрос всегда возвращает только одну строку.
Если же необходимо получить несколько строк из результирующей выборки запроса необходимо использовать SQL, основанный на курсоре. Курсор в данном случае является указателем на одну строку и при проведении операции FETCH курсор передвигается к следующей строке.
Использование курсора предполагает выполнение следующей последовательности операций:
Объявление курсора;
Открытие курсора;
Проведение серий операций чтения (FETCH) для курсора;
Закрытие курсора.
Пример использование курсора в SQL-запросах:
&sql(DECLARE PersCur CURSOR
FOR SELECT Surname, DateOfBirth
FROM Person,
WHERE Surname="Ivanov")
&sql(OPEN PersCur)
&sql(FETCH PersCur INTO :surname, :DateOB)
&sql(CLOSE PersCur)
В приведенном примере создается курсор PersCur на SQL-запрос SELECT, после чего определенный курсор открывается, а затем с помощью команды FETCH производится последовательное сканирование результатов выборки и в локальных переменных surname и DateOB сохраняются соответствующие значения полей Surname и DateOfBirth таблицы Person. После этого курсор закрывается.