Особенности СУБД uniVerse
фирмы IBM.
3.Методы доступа к данным
Ядро СУБД UniVerse оптимизировано по производительности для поддержки
двух моделей данных: реляционной (традиционный доступ через SQL)
и модели хранения бизнес-объектов (доступ через внутренние средства
UniVerse). Доступ к данным может осуществляться в интерактивном
режиме с использованием процессоров из оболочки uvsh, через стандартный
интерфейс ODBC или через соответствующий программный интерфейс
(API).
Методы доступа СУБД UniVerse позволяет проектировщику реализовывать
оба подхода. Для каждого из них имеется соответствующий набор
инструментов. Для первого - стандартный SQL, включая ODBC драйвер
и соответствующий API - UniVerse Calling Interface (UCI), для
второго – средства доступа к базе днных через процессоры оболочки
UniVerse, интефейс доступа к объектам, реализация которого для
Windows включает Active-X компоненты (UniVerse Objects) и интерфейс
низкого уровня InterCall.
UniVerse поддерживает многомерные массивы и вложенные таблицы,
но динамическая нормализация данных распространяется только на
вложенные таблицы. Вложенные таблицы имеют заранее предопределенные
вложенные отношения и ограничения целостности: вложенная таблица
не может существовать без записи к которой она относится и при
удалении записи главной таблицы вместе с ней удаляются и все ее
вложенные таблицы.
Для реализации вророй модели была выбрана запись-ориентированная
система доступа к данным. С одной стороны, записи выступают как
строки в таблице и над ними можгут осуществлятся соответствующие
операции выборки/обновления и проч., а с другой стороны, каждая
запись может быть набором информации, содержащим в том числе вложенные
таблицы и динамические массивы данных.
Типичный пример доступа к записям UniVerse через UniVerse Objects
в кодах Visual Basic представлен ниже:
... Set UVCommand = ObjSession.Command
Set InvList = ObjSession.SelectList(0)
Set InvTable = ObjSession.OpenFile("INVOICES")
UVCommand.Text = "SELECT INVOICES IF NAME LIKE JOHN..."
UVCommand.Execute
InvTable.RecordId = InvList.Next
InvTable.Read
Invoice = InvTable.Record
Invoice.Field(ACCEPTED) = DateNow()
InvTable.Record = Invoice
InvTable.Write ...
Доступ к записи осуществляется по первичному ключу. Выборка списков
ключей может осуществляеться через операторы SQL или специальными
средствами UniVerse (процессор RetrieVe, B-tree индексы, последовательная
выборка).
При обращении к записи как к объекту вложенные таблицы выступают
как двумерные или трехмерные динамические массивы. Динамические
массивы позволяют добавлять, удалять строки, столбцы, количество
измерений без переопределения. Для работы с динамическими массивами
разработчику предоставляются соответствующие средства. Такая гибкость
представления данных позволяет разработчику хранить в записях
сложныые бизнес-объекты со множественными наборами параметров,
добавлять свойства объектов. При этом все изменеия объектов после
их записи сразу-же отражаются на на общей картине данных представленной
как набор таблиц. Для обеспечения коллективного доступа к бизнес-объектам
применяется механизм блокировок, обеспечивающий разный уровень
ограничения доступа к данным.