СУБД Cache. Крохи знаний
СУБД Cache. Крохи знаний В 1997 году американская компания InterSystems выпустила новую СУБД Cache, которая была названа авторами "постреляционной". Но этот термин — "постреляционная" — не может быть понят буквально. Скорее это означает, что основы этой СУБД были заложены уже после возникновения реляционной модели хранения данных. Суть этого термина, однако, состоит в том, что данная система управления базами данных была задумана и создана с целью поддержки информационных систем и производственных задач в быстро меняющемся современном мире бизнеса. При постоянном развитии бизнес-процессов, их усложнении, реляционная модель обработки и хранения информации уступает место объектно-ориентированной. Не потому что реляционная модель устарела или уже не может обеспечить необходимой производительности. Просто для некоторых задач, отражающих положение вещей или процессов в реальном мире, лучше использовать именно объектную модель.
После установки система Cache, если не было выдано окно с просьбой перезагрузить компьютер, уже работает. Об этом вас известит цветной кубик в системном лотке. В том случае, если его нет или он серого цвета, необходимо запустить СУБД Cache, выбрав соответствующий пункт меню. В выпадающем меню содержится довольно много пунктов, опишу некоторые из них, которые будут нами использованы далее в работе. Самый первый пункт — "Приступая к работе" — как это не смешно, действительно содержит полезную информацию. Вообще следует признать, что трудновато разбираться с принципами функционирования СУБД, и документация в этом сильно помогает. Два пункта — "Остановить Cache" и "Запустить Cache" — производят описанные только что действия, останавливают или запускают СУБД. Object Architect — приложение для создания классов, их свойств, а также параметров и методов для них. Эта программа будет основной рабочей лошадкой в первой части статьи. Studio — простая среда разработки. Не очень визуальная, должен я сказать. Если учесть, что авторы предлагают в качестве платформы по умолчанию Visual Basic 6.0, то скудность встроенной среды становится понятной. Terminal — что-то вроде терминала telnet, который подключается к серверу по умолчанию. В нем можно работать с СУБД в режиме командной строки. Весьма полезная утилита для отладки только написанных программ. Проводник (Explorer). В проводнике можно осуществлять различные действия с классами, глобалами и программами, хранящимися в СУБД Cache. Preferred Server — сервер по умолчанию, с которым СУБД пытается соединиться при старте. Также содержится вся информация о настройках соединений с разными серверами. Сразу после инсталляции системы сервером по умолчанию является ваша локальная система.
Теперь перейдем к святая святых Cache — объектам, или классам.
Классы в Cache обычно определяются с помощью Cache Object Architect — интегрированной среды для разработки классов. Так как авторы использовали объединенную архитектуру данных, определение классов (объектов) с их свойствами и методами можно рассматривать как таблицы с их столбцами и ключевыми полями. Но, разумеется, определение данных в Cache не обязательно должно следовать объектно-ориентированной системе. Единая архитектура данных позволяет с одинаковым успехом использовать определения реляционных таблиц и автоматически преобразовывать их в соответствующую иерархию классов. Для этой цели применяется язык DDL (Data Definition Language) — вообще говоря, компонент SQL, тесно связанный с Cache SQL. Также полное определение класса можно экспортировать в описание на языке CDL (Class Definition Language), который можно непосредственно использовать для разработки классов Cache. Имеется также возможность использования других языков определения классов. Например, компонент СУБД Cache — Cache RoseLink составляет интерфейс с таким серьезным продуктом, как Rational Rose. Это еще раз подтверждает то, что СУБД Cache поддерживает все последние достижения в области объектно-ориентированной разработки приложений, в том числе и популярный инструмент визуального моделирования Rational Rose от Rational Software.
Cache Object Architect запускается из Cache-куба и связывается с сервером Cache. Из Cache-куба, находящегося в системном лотке, выбираем меню Object Architect. Появится окно, как показано на рисунке 1.
Будем считать, что СУБД у нас установлена на локальной машине, так что будем соединяться локально. Выбрав профиль "Local", нажимаем "Connect". После установления связи перед вами появится окно Построителя Объектов.
При разработке сложных систем, внутри которых подразумевается наличие отдельных программных и логических модулей, лучше использовать пакеты. Этим достигается относительная независимость компонентов системы, что облегчает возможные исправления и дополнения в будущем. Имея такую структуру, мы всегда может обратиться к любому из классов, используя имена пакетов, в которых он содержится, перечисленных через точку, и самого имени класса в конце. Например, person.Name. Для именования классов и пакетов существуют следующие правила: первые 25 символов имени пакета и имени класса должны быть уникальными; длина полного имени класса с пакетами не должна превышать 56 символов.
Давайте определимся с тем, что мы будем создавать. Для первого примера подойдет описание физического лица: фамилия, имя, дата рождения и далее (зависит от воображения). Конечно, пример избитый, но как-то уже повелось, что начинать работу надо хотя бы с примера "Hello, World!". Не будем отступать от проторенной дорожки.
Для начала нам надо определить эти классы. У нас открыто окно Построителя Объектов, в котором первые пять кнопок на верхней панели — это так называемые мастера (wizards). Вызываем мастера создания нового класса (New Class). В появившемся окне первое поле со значением "User" оставляем без изменений — это имя пакета. Он нам подходит, так что можно его не изменять. Во втором поле вводим имя класса — у нас это будет "person", только без кавычек. После этого можно ввести описание нового класса в текстовом окне ниже. Перейдя на другую страницу, выбираем тип класса — "хранимый" (Persistent), чтобы СУБД Cache сама обеспечивала автоматическое сохранение и поиск объектов. Теперь нажимаем "Закончить" (Finish) — создание класса завершено (рисунок 2).
Но данный класс, определенный нами, гол, как калмыцкая степь. Ему для нормальной работы необходимы свойства и методы. Для определения свойств класса выбираем мастер свойств (New Property). В появившемся окне вводим имя свойства SurName — фамилия и выбираем для него тип — %Library.String. Подобная запись означает, что свойство SurName имеет строковый тип (а точнее является классом типа String), определенный в системном пакете Library. Далее, таким же образом создаем остальные свойства: имя (тип %Library.String), дата рождения (тип %Library.Date). Теперь, наряду со служебными свойствами класса у нас в левом окне Построителя Объектов появились три свойства: SurName, Name и BirthDate. Впоследствии определения классов могут довольно сильно разрастаться, поэтому для удобства можем перейти на закладку "Свойства" (Properties).
Чтобы теперь созданный класс стал доступен для работы, его необходимо скомпилировать (кнопка "Compile Class") и сохранить в хранилище объектов (кнопка "Save Changes").
Представленный выше способ определения классов — не единственный. В качестве альтернативы Cache Object Architect, с которым мы уже работали, можно определять классы напрямую с помощью языка CDL — Class Definition Language. Файл в формате CDL можно создать в любом текстовом редакторе. Импортировать такие файлы определения классов можно либо с помощью Проводника Cache, либо загрузить файл в Cache Object Architect, либо c использованием служебных API — вызовов Cache Objects из командной строки.
Определение классов тогда выглядит таким образом.
Файл CDL может содержать одно или несколько предложений по определению классов. Определение класса начинается со следующей конструкции: CLASS {Имя пакета}. Имя класса {Ключевое слово1, Ключевое слово2,..}. В случае, если не указывать название пакета, по умолчанию класс создается в пакете USER. Ключевое слово N — это флаг состояния, состоящий из ключевого слова и опционального значения. Например, с помощью ключа DESCRIPTION = строка можно задать описание класса, а FINAL говорит о том, что от этого класса нельзя порождать подклассы.
Таким же образом, используя предложение ATTRIBUTE, можно определять свойства класса: ATTRIBUTE, имя свойства {определение свойства}. Как и в современных языках программирования, тут можно сделать свойство внутренним — ключевое слово PRIVATE, задать выражение по умолчанию — INITIAL, сделать данное свойство обязательным — REQUIRED или вычисляемым — CALCULATED. Аналогично определяются методы класса, его индексы, запросы, параметры, а также триггеры. В качестве примера приводится определение класса person, данное на языке CDL. Кроме того, добавлено вычисляемое свойство Age — возраст:
Class person
{
description = "Класс описания физических лиц";
super = %Library.Persistent;
persistent;
// теперь определяем параметры класса
parameter EXTENTSIZE {default = 100;}
parameter PROPERTYVALIDATION {default = 1;}
// и индексов
index NameIndex {attributes = SurName, Name;}
// свойства класса
attribute SurName {type = %Library.String; required;}
attribute Name {type = %Library.String;}
attribute BirthDate {type = %Library.Date;}
attribute Age {type = %Library.Integer; Calculated;}
sqlcomputecode =
{
:Set (AgeInYears) = $Horolog — {BirthDate}/365.2425
}
sqlcomputed; sqlfieldname = AgeInYears;
}
// методы класса
method AgeGet()
{
returntype = %Library.Integer;
expression = $Horolog -..BirthDate/365.2425;
}
// определение запросов
query Select (BeginSurName: %Library.String)
{
description = "Список фамилий, содержащих представляемые параметром первые буквы фамилии";
type = %Library.SQLQuery(CONTAINID=1,ROWSPEC="ID.SurName:%Library.String, Name:%Library.String,BirthDate:%Library.Date")
sqlquery = {
:SELECT SurName, Name, BirthDate
:FROM person
:WHERE SurName %STARTSWITH:BeginSurName
:ORDER BY SurName
}
}
}
Как видно из этого кода, определение классов в СУБД Cache очень сходно с определением таблиц в языке DDL — Data Definition Language. Использование своего языка определения объектов, пусть даже немного отличного от общих стандартов SQL, позволяет гибко манипулировать классами внутри базы данных, изменяя их структуру или дополняя ее.
Таким образом, теперь у нас получается создавать свои классы в СУБД Cache не только с помощью мастеров Cache Object Architect, но и напрямую, создавая файл определения классов на языке CDL. В следующий раз мы найдем применение еще двум приложениям Cache-куба, а именно Cache Studio и Cache Terminal.
Денис Мигачев АКА Denver, denver@neman.grodno.by
После установки система Cache, если не было выдано окно с просьбой перезагрузить компьютер, уже работает. Об этом вас известит цветной кубик в системном лотке. В том случае, если его нет или он серого цвета, необходимо запустить СУБД Cache, выбрав соответствующий пункт меню. В выпадающем меню содержится довольно много пунктов, опишу некоторые из них, которые будут нами использованы далее в работе. Самый первый пункт — "Приступая к работе" — как это не смешно, действительно содержит полезную информацию. Вообще следует признать, что трудновато разбираться с принципами функционирования СУБД, и документация в этом сильно помогает. Два пункта — "Остановить Cache" и "Запустить Cache" — производят описанные только что действия, останавливают или запускают СУБД. Object Architect — приложение для создания классов, их свойств, а также параметров и методов для них. Эта программа будет основной рабочей лошадкой в первой части статьи. Studio — простая среда разработки. Не очень визуальная, должен я сказать. Если учесть, что авторы предлагают в качестве платформы по умолчанию Visual Basic 6.0, то скудность встроенной среды становится понятной. Terminal — что-то вроде терминала telnet, который подключается к серверу по умолчанию. В нем можно работать с СУБД в режиме командной строки. Весьма полезная утилита для отладки только написанных программ. Проводник (Explorer). В проводнике можно осуществлять различные действия с классами, глобалами и программами, хранящимися в СУБД Cache. Preferred Server — сервер по умолчанию, с которым СУБД пытается соединиться при старте. Также содержится вся информация о настройках соединений с разными серверами. Сразу после инсталляции системы сервером по умолчанию является ваша локальная система.
Теперь перейдем к святая святых Cache — объектам, или классам.
Классы в Cache обычно определяются с помощью Cache Object Architect — интегрированной среды для разработки классов. Так как авторы использовали объединенную архитектуру данных, определение классов (объектов) с их свойствами и методами можно рассматривать как таблицы с их столбцами и ключевыми полями. Но, разумеется, определение данных в Cache не обязательно должно следовать объектно-ориентированной системе. Единая архитектура данных позволяет с одинаковым успехом использовать определения реляционных таблиц и автоматически преобразовывать их в соответствующую иерархию классов. Для этой цели применяется язык DDL (Data Definition Language) — вообще говоря, компонент SQL, тесно связанный с Cache SQL. Также полное определение класса можно экспортировать в описание на языке CDL (Class Definition Language), который можно непосредственно использовать для разработки классов Cache. Имеется также возможность использования других языков определения классов. Например, компонент СУБД Cache — Cache RoseLink составляет интерфейс с таким серьезным продуктом, как Rational Rose. Это еще раз подтверждает то, что СУБД Cache поддерживает все последние достижения в области объектно-ориентированной разработки приложений, в том числе и популярный инструмент визуального моделирования Rational Rose от Rational Software.
Cache Object Architect запускается из Cache-куба и связывается с сервером Cache. Из Cache-куба, находящегося в системном лотке, выбираем меню Object Architect. Появится окно, как показано на рисунке 1.
Будем считать, что СУБД у нас установлена на локальной машине, так что будем соединяться локально. Выбрав профиль "Local", нажимаем "Connect". После установления связи перед вами появится окно Построителя Объектов.
При разработке сложных систем, внутри которых подразумевается наличие отдельных программных и логических модулей, лучше использовать пакеты. Этим достигается относительная независимость компонентов системы, что облегчает возможные исправления и дополнения в будущем. Имея такую структуру, мы всегда может обратиться к любому из классов, используя имена пакетов, в которых он содержится, перечисленных через точку, и самого имени класса в конце. Например, person.Name. Для именования классов и пакетов существуют следующие правила: первые 25 символов имени пакета и имени класса должны быть уникальными; длина полного имени класса с пакетами не должна превышать 56 символов.
Давайте определимся с тем, что мы будем создавать. Для первого примера подойдет описание физического лица: фамилия, имя, дата рождения и далее (зависит от воображения). Конечно, пример избитый, но как-то уже повелось, что начинать работу надо хотя бы с примера "Hello, World!". Не будем отступать от проторенной дорожки.
Для начала нам надо определить эти классы. У нас открыто окно Построителя Объектов, в котором первые пять кнопок на верхней панели — это так называемые мастера (wizards). Вызываем мастера создания нового класса (New Class). В появившемся окне первое поле со значением "User" оставляем без изменений — это имя пакета. Он нам подходит, так что можно его не изменять. Во втором поле вводим имя класса — у нас это будет "person", только без кавычек. После этого можно ввести описание нового класса в текстовом окне ниже. Перейдя на другую страницу, выбираем тип класса — "хранимый" (Persistent), чтобы СУБД Cache сама обеспечивала автоматическое сохранение и поиск объектов. Теперь нажимаем "Закончить" (Finish) — создание класса завершено (рисунок 2).
Но данный класс, определенный нами, гол, как калмыцкая степь. Ему для нормальной работы необходимы свойства и методы. Для определения свойств класса выбираем мастер свойств (New Property). В появившемся окне вводим имя свойства SurName — фамилия и выбираем для него тип — %Library.String. Подобная запись означает, что свойство SurName имеет строковый тип (а точнее является классом типа String), определенный в системном пакете Library. Далее, таким же образом создаем остальные свойства: имя (тип %Library.String), дата рождения (тип %Library.Date). Теперь, наряду со служебными свойствами класса у нас в левом окне Построителя Объектов появились три свойства: SurName, Name и BirthDate. Впоследствии определения классов могут довольно сильно разрастаться, поэтому для удобства можем перейти на закладку "Свойства" (Properties).
Чтобы теперь созданный класс стал доступен для работы, его необходимо скомпилировать (кнопка "Compile Class") и сохранить в хранилище объектов (кнопка "Save Changes").
Представленный выше способ определения классов — не единственный. В качестве альтернативы Cache Object Architect, с которым мы уже работали, можно определять классы напрямую с помощью языка CDL — Class Definition Language. Файл в формате CDL можно создать в любом текстовом редакторе. Импортировать такие файлы определения классов можно либо с помощью Проводника Cache, либо загрузить файл в Cache Object Architect, либо c использованием служебных API — вызовов Cache Objects из командной строки.
Определение классов тогда выглядит таким образом.
Файл CDL может содержать одно или несколько предложений по определению классов. Определение класса начинается со следующей конструкции: CLASS {Имя пакета}. Имя класса {Ключевое слово1, Ключевое слово2,..}. В случае, если не указывать название пакета, по умолчанию класс создается в пакете USER. Ключевое слово N — это флаг состояния, состоящий из ключевого слова и опционального значения. Например, с помощью ключа DESCRIPTION = строка можно задать описание класса, а FINAL говорит о том, что от этого класса нельзя порождать подклассы.
Таким же образом, используя предложение ATTRIBUTE, можно определять свойства класса: ATTRIBUTE, имя свойства {определение свойства}. Как и в современных языках программирования, тут можно сделать свойство внутренним — ключевое слово PRIVATE, задать выражение по умолчанию — INITIAL, сделать данное свойство обязательным — REQUIRED или вычисляемым — CALCULATED. Аналогично определяются методы класса, его индексы, запросы, параметры, а также триггеры. В качестве примера приводится определение класса person, данное на языке CDL. Кроме того, добавлено вычисляемое свойство Age — возраст:
Class person
{
description = "Класс описания физических лиц";
super = %Library.Persistent;
persistent;
// теперь определяем параметры класса
parameter EXTENTSIZE {default = 100;}
parameter PROPERTYVALIDATION {default = 1;}
// и индексов
index NameIndex {attributes = SurName, Name;}
// свойства класса
attribute SurName {type = %Library.String; required;}
attribute Name {type = %Library.String;}
attribute BirthDate {type = %Library.Date;}
attribute Age {type = %Library.Integer; Calculated;}
sqlcomputecode =
{
:Set (AgeInYears) = $Horolog — {BirthDate}/365.2425
}
sqlcomputed; sqlfieldname = AgeInYears;
}
// методы класса
method AgeGet()
{
returntype = %Library.Integer;
expression = $Horolog -..BirthDate/365.2425;
}
// определение запросов
query Select (BeginSurName: %Library.String)
{
description = "Список фамилий, содержащих представляемые параметром первые буквы фамилии";
type = %Library.SQLQuery(CONTAINID=1,ROWSPEC="ID.SurName:%Library.String, Name:%Library.String,BirthDate:%Library.Date")
sqlquery = {
:SELECT SurName, Name, BirthDate
:FROM person
:WHERE SurName %STARTSWITH:BeginSurName
:ORDER BY SurName
}
}
}
Как видно из этого кода, определение классов в СУБД Cache очень сходно с определением таблиц в языке DDL — Data Definition Language. Использование своего языка определения объектов, пусть даже немного отличного от общих стандартов SQL, позволяет гибко манипулировать классами внутри базы данных, изменяя их структуру или дополняя ее.
Таким образом, теперь у нас получается создавать свои классы в СУБД Cache не только с помощью мастеров Cache Object Architect, но и напрямую, создавая файл определения классов на языке CDL. В следующий раз мы найдем применение еще двум приложениям Cache-куба, а именно Cache Studio и Cache Terminal.
Денис Мигачев АКА Denver, denver@neman.grodno.by
Компьютерная газета. Статья была опубликована в номере 27 за 2002 год в рубрике soft :: субд