
Лекция10.ppt
- Количество слайдов: 35
Объектные базы данных Бессарабов Н. В. bes@fpm. kubsu. ru 2008 г
Трёхуровневая модель ANSI/SPARK Бизнес Внеш ние уровни Внутренние уровни Концептуальная Модель Внешние Схемы Логическая Модель 1 Физич. модель 11 Определяется почти полностью объектом моделирования Концептуальная модель единственна и не зависит от логической модели данных Физич. мод. 1 m 1 Логическая Модель n Физич. модель n 1 сужение зоны видения базы Физич. Мод. nmn Обеспечивает оптимизацию хранения. Изменения этого уровня не влияют на логическую организацию
Объектные модели данных Реляционные базы данных поддерживают небольшое количество предопределенных типов данных. Во многих приложениях нужны сложные типы данных, которые невозможно предусмотреть заранее. Два пути расширения модели данных до объектной: 1. Объектная модель (переход от ООП) - вместо таблиц используют классы эквивалентные таблицам (без учета методов); подход можно считать расширением языков ООП на персистентные классы. 2. Объектно-реляционная модель (переход от РМД) - кроме плоских реляционных таблиц вводятся таблицы со сложными многоуровневыми шапками (классы), в которые встроены методы; создается переходник (объектные view), объединяющий реляционную и объектную модели; подход можно считать прямым расширением реляционной модели.
Особенности объектной модели • Основная линия прогресса в программировании определяется способом сегментации программы и характером взаимодействия сегментов. Желательно, чтобы сегменты по возможности не зависели друг от друга. Это необходимо для того, чтобы изменения в одном модуле вызывали как можно меньше изменений в других. • Во-вторых, любое приложение в базах данных является моделью некоторого бизнеса (предметной области). В любой моделируемой системе обязательны два аспекта: - данные (какие сведения хранить) - функции (как преобразовывать данные). • В реляционной и иерархической моделях данных отображались только данные. Функциональная сторона плохо представлена (исключение – триггеры в табличных БД). Поэтому, для реализации функциональной стороны в этих моделях пишется отдельный программный текст, не учитываемый моделью данных и плохо связанный с данными. • В объектных базах появляется возможность упрятать в класс значительную часть связанной с ним функциональности. Вот это объединение данных и функциональности существенно улучшает структуру приложения.
Следствия • На ранних стадиях программирования (анализ и проектирование) можно использовать объектный подход, создавая объектную концептуальную модель. • На стадии анализа необходимо сопоставить концептуальную модель с онтологией предметной подобласти. • Затем выбрать логическую модель, не обязательно объектную. В этом случае разработанные методы должны войти в состав процедурной части приложения.
Особенность современных систем, основанных на языке M Cовременные системы, основанные на языке M имеют уникальную особенность – они склонны использовать несколько моделей данных написанных на языке М. Cache - единственная промышленная СУБД, использующая так называемую универсальную архитектуру данных, основанную на широком использовании морфизмов между различными форматами представления данных и между тремя моделями данных (объектной в смысле ODMG, реляционной и иерархической). Заметим, что сама фирма Intersystems, скорее, не согласится с такой трактовкой её детища. И еще, иерархическая модель данных в Cache не организована в полном объеме. Но это скорее достоинство, чем недостаток.
Универсальная архитектура Caché Applications/WWW Cache Server Pages XML Active. X Java/EJB SOAP Cache Objects Cache SQL Unified Data Architecture Cache Database Engine (TMDMTM) other DB ODBC JDBC
Виды классов Caché Классы типов данных Классы объектов Зарегистрированные классы Встраиваемые классы Незарегистрированные классы Хранимые классы
Виды классов Caché • Классы типов данных Имеют имя. Определяют типы данных. У них нет экземпляров. Не могут иметь свойств. Содержат предопределенный набор методов проверки и преобразования значений типа. • Классы объектов Обладают именем, параметрами, свойствами, методами, запросами. Характеризуются через набор ключевых слов. • Незарегистрированные классы Предназначены для создания пользовательской объектной системы. При этом разработчик должен обеспечить поддержку уникальности OREF и OID, организовать хранение объектов, автоматическую подкачку и т. д.
Виды классов Caché. Продолжение • Зарегистрированные классы Наследники системного класса %Library. Regitered. Objects. Имеют полный набор методов управления поведением объектов в памяти. Не могут храниться во вторичной памяти. Имеют только объектные ссылки OREF. • Хранимые (персистентные) классы Наследники системного класса %Library. Persistent. Хранятся в базе и потому обладают OREF и OID. Имеют полный набор методов управления поведением объектов. Если один хранимый класс ссылается на другой (не обязательно хранимый) класс, то при вызове первого второй автоматически подгружается в память (процесс подкачки -- swizzling).
Виды классов Caché. Окончание • Встраиваемые классы Наследники системного класса %Library. Serial. Object. Странное на первый взгляд название класса объясняется тем, что встраиваемый класс хранится только с вмещающим персистентным объектом, преобразуясь в строку символов, хранящую значения всех атрибутов объекта. Преобразование в последовательную форму называют сериализацией. Из вторичной памяти эту строку вытаскивает механизм подкачки при загрузке вмещающего класса. Обладают OREF, но не имеют OID. Замечание: Странности терминологии Caché
Элементы классов • Уникальное имя класса • Параметры По ним осуществляют настройку возможностей класса во время его компиляции. При этом обычно используют генераторы методов. • Свойства (Properties) • Методы • Запросы Операции с объектами класса. Играют роль фильтров. • Индексы • Триггеры Используются только в реляционной модели.
Форматы данных и их преобразования Формат отображения Display. To. Logical() Внутренний формат Logical. To. Display() Logical. To. Odbc() ODBC Odbc. To. Logical() Logical. To. Storage() Storage. To. Logical() Формат хранения
Методы преобразования типов
Предопределенные типы данных
Свойства представляют собой константы предопределенных типов, ссылки на объекты, встроенные объекты, потоки данных (BLOB, CLOB), коллекции, древесные значения и отношения: • Константы Пример: Property Name As %String(MAXLEN = 20); • Ссылки на объекты Каждый класс это тип данных. Пример: Пусть имеется хранимый класс Address. Тогда свойство address можно описать так Property address As Address; • Встроенные объекты Пример: Пусть имеется встраиваемый класс Address. Свойство address записывается точно так же как в предыдущем варианте, Property address As Address; Но речь идет не о ссылке, а о встраивании объекта.
Пять способов создания класса в Cache • Создание таблицы (нельзя определить методы ) • Использование мастера Studio • Написание текста в Studio • Задание из терминала в COS • Импорт из UML
Способ 1: Задание таблицы • Исполняем в SQL-менеджере команду create table QQ (c 1 char(3), c 2 number(4)) • В Studio обнаруживаем класс ^User. QQ, щелкнув по нему дважды левой кнопкой, получаем в Studio описание: Class User. QQ Extends %Persistent [ Class. Type = persistent, Ddl. Allowed, Owner = "", Sql. Row. Id. Private, Sql. Table. Name = QQ, Storage. Strategy = ] { Property c 1 As %Library. String(MAXLEN = 3) [ Sql. Column. Number = 2 ]; Property c 2 As %Library. Numeric(MAXVAL = 9999, MINVAL = -9999, SCALE = 0) [ Sql. Column. Number = 3 ]; }
Способ 2. Использование мастера Шаг 1. Область имен, имя класса и примечание
Способ 2. Использование мастера Шаг 2. Выбор вида класса
Способ 2. Использование мастера Шаг 3. Выбор владельца, имени таблицы, отличного от имени класса, поддержки XML и автозаполнения данными
Способ 2. Использование мастера Шаг 4. Смотрим полученный результат в Studio /// Это класс первого лекционного примера класса созданного мастером Class User. Human Extends %Persistent [ Class. Type = persistent, Procedure. Block ] { } Заметим, что описание класса передано комментарием, поскольку выбирался персистентный вид, то класс ^User. Human наследует (Extends) системному классу %Persistent
Способ 2. Использование мастера Шаг 5. Выбираем «Новое свойство»
Способ 2. Использование мастера Шаг 6. Добавляем атрибуты используя появившийся мастер
Способ 2. Использование мастера Шаг 7. Выбираем тип данных
Способ 2. Использование мастера Шаг 8. Задаем свойства и переходим к параметрам типа
Способ 2. Использование мастера Шаг 9. Оставляем параметры типа по умолчанию
Способ 2. Использование мастера Шаг 10. В Studio обнаруживаем текст, определяющий новое свойство: { /// Это имя Property Name As %String; } Этот же результат мог быть получен непосредственно вводом текста свойства в Studio.
Методы унаследованые от класса %Persistent • %New(). Конструктор объекта. Его задача – создать экземпляр класса. • %Save(). Сохраняет объект на диске. • %Close(). Закрывает объект, то есть удаляет его из памяти • %Open(). Метод класса. Если он находит объект существующий в базе данных, то создает в памяти его копию, содержащую значения всех свойств, и возвращает объект. Если объект уже загружен в память, просто возвращается OREF. Вообще у метода три аргумента. Второй аргумент Concurrency определяет особенности параллельной работы и принимает значения 0, 1, 2, 3, 4. По умолчанию установлен в “ 1”, что означает создание разделяемой блокировки при загрузке объекта в память. • %Open. ID(). • %Delete(). • %Is. Modified().
Работа с объектами в COS (1/4) • Создадим простейший класс с единственным атрибутом Name. Class User. A Extends %Persistent [ Class. Type = persistent, Procedure. Block ] { Property Name As %String(MAXLEN = 20); } • Создадим экземпляр класса с помощью метода %New(): s ss=##class(User. A). %New() Макроподстановка ##class создает объектную ссылку OREF. Что же представляет собой эта ссылка? w ss Ответ: 1@User. A Итак, OREF состоит из двух частей имени класса “User. A” и идентификатора объекта ” 1”.
Работа с объектами в COS (2/4). • Для того, чтобы завершить создание объекта необходимо назначить значения его атрибутов и сохранить его на диск. Если объект дальше не будет использоваться необходимо удалить его из памяти. s ss. Name=”John” // параметру Name объекта № 1 присвоено значение. d ss. %Save() // объект № 1 сохранен на диске. d ss. %Close() // объект № 1 закрыт, то есть удален из памяти. • Любая хранимая структура образует глобал. Проверим проводником образовался ли глобал USER. AD.
Работа с объектами в COS (3/4)
Работа с объектами в COS (4/4) В терминале создаем новый экземпляр объекта Human – объект h: USER>set h=##class(User. Human). %New() ## это макроодстановка, создающая OREF Определяем свойства объекта USER>Set h. Name=”Ivan” USER>Set h. DOB=“”
Возможный морфизм между отношениями в РБД и отношениями в иерархическом представлении T: A B C D a 1 b 1 c 1 d 1 a 2 b 2 c 2 d 2 a 3 b 3 c 3 d 3 r: r(a 1, b 1)=c 1, d 1 Значения атрибутов r(a 3, b 3)=c 3, d 3 r(a 2, b 2)=c 2, d 2 Значение массива
Домашнее задание Перечислите все возможные морфизмы между реляционной, объектной, иерархической и сетевыми моделями Важное примечание: Зачитывается как экзамен.
Лекция10.ppt