Теория и практика построения баз данных (1088289), страница 154
Текст из файла (страница 154)
Вы может спросить, в чем разница между типами данных ЙЕЕ н внешними ключами. Во-первых, значения КЕЕ скрыты от пользователей и не имеют для них смысла. Таким образом, как и для суррогатных ключей, для таких ссылок не требуется каскадная модификация. Но если экземпляр оЬ) ?ТЕМ, на который указывает ссылка, будет удален, значение этой ссылки окажется недействительным. Программа должна проверить ссылку на лопустнмость, прежде чем пользоваться ею.
Во-вторых, такие ссылки указывают на объекты, а не на строки таблиц. Объект, на который указывает ссылка, может сам иметь сложную структуру данных и, кроме того, иметь методы. Огас1е предоставляет также библиотеку классов, которая упрощает манипулирование такими ссылками. Последним различием является то, что такие ссылки являются однонаправленными. Объект оЬ) 1ТЕМ, на который указывает ссылка, может, но не обязан иметь обратный указатель на объект оЬ) Е?МЕ?ТЕМ вЂ” например, в данном прил1ере указатель назад отсутствует. Это означает, что мы можем двигаться от аЬ) Е?МЕ?ТЕМ к оЬ) 1ТЕМ, но не наоборот. В следующем операторе определяется объект !!з! Е?ИЕ1ТЕМ как таблица, состоящая из объектов оЬ) Е?ИЕ?ТЕМ. Это напоминает приведенное ранее определение АРАКТМЕМТ Н5Т2, Послелним определен объект оЬ! ОКОЕК (заказ), В отличие от ВО?10?И62, определенного как таблица, оЬ) ОЙОЕК определяется как объект.
Поскольку он является объектом, атрибут Е!пе?тепУз вложенной таблицы, указывающий на тип !!з! Е?МЕ?ТЕМ, не обязан иметь вложенную таблипу. Рассматривая листинг 18.2, имейте в виду, что мы определяем элементы данных объекта, а не реляционные таблицы или что-нибудь им подобное. Структуры данных этого объекта будут обрабатываться только методами объекта. В последнем разделе определяется интерфейс методов объекта. Здесь интерфейс имеет только один метод, под названием (о(аШеп)з (всего товаров), который возвращает одиночное значение типа ИОМВЕК.
В более реалистичном примере было бы определено много методов. Определение методов объекта В листинге 18.3 показан пример метода объекта Огас!е, Задачей этого метода яв- ляется перебор строк заказа и подсчет стоимости каждой строки с учетом нало- гов. Функция начинается с объявления трех переменных и затем перебирает в цик- ле ЕОй набор объектов Е!пе?!еж. Оператор ЕОЙ 1 1п !.,5ЕЕЕ.Е1пе!(евз.СООИТ ! ООР означает следующее: присвоить переменной значение 1, выполнить инструкции до конца блока, обозначенного ЕЬ?Р ?.ООР, и прибавить к1 единицу.
Эти операторы следует повторять, пока значение ! не окажется больше, чем число строк в атрибуте Е!пе?!еж. Листинг 18.3. Пример метода Огас)е СЙЕАТЕ Ой ЙЕРЕАСЕ ТУРЕ ВОВУ оЬ) ОйОЕЙ А5 МЕМВЕй ЕОИСТ!ОИ 1оЬа)!?евз ЙЕТ0йИ ИОМВЕК 15 !(евР(г оЬ) !ТЕМ; ОгоегТота) ИОМВЕЙ:=0 1 !ИТЕОЕЙ: ВЕО!И ЕОЙ ! !и !..5ЕЕЕ.ЕУпе!тевз.СООИТ СВОР 0ТЕ ЙЕЕ.5ЕЕЕСТ ОВОЕСТ($.!пе!?увз(у) !?евйеТ, 1тевР(г); Огсег?о?а! ;= огзегТота) + 5ЕЕЕ О пе!(евз(У) Оиап(!?у * 1?евР?г Ргусе: ЕИО ЕООР. ЙЕТОЙИ огзегтста); ЕИО; ЕИО: Оператор 0ТЕ ЙЕЕ.5ЕЕЕСТ ОВзЕСТ(Е(пе!(евз(! ) . !тевйе?.
1(евР(г) вызывает класс, предоставляемый в составе библиотеки классов Огас!е. Назначение этой функции состоит в том, чтобы присваивать переменной !(епУР(г значение действительного указателя на обьект оЬ) 1ТЕМ, на который ссылается 11еюйеЕ в текущей строке. После того как этот оператор будет выполнен, с помощью нет Р(г можно ссылаться на любые свойства оЬ! ПЕМ. Это делается следующим оператором, где !(етР(г.РУ!се имеет значение атрибута Росе в объекте аЬ! 1ТЕМ, на который ссылается текущая строка. Не беспокойтесь, если пока не все из этого вам понятно. Стремитесь к пониманию роли и задач, а не подробностей работы операторов в листинге 18.3.
Из этого изложения вы должны уяснить общие характеристики и природу объектов Огас1е и понять, каким образом они продвигают традиционные базы данных в сторону объектно-ориентированного программирования. 714 Глава )В, Объектно-ориентированные базы данных Стандарты ООСУБД 71 Б Стандарты ООСУБД Над определением станлартов объектно-ориентированных баз данных, который мог бы использоваться в качестве основы для построения ООСУБД, работают несколько групп. Здесь мы рассмотрим работу двух из этих групп.
Первая состоит нз представителей комитетов А(ч)51 и! ЗО, целью которых является расширение стандарта ЗО1.92 для поддержки обработки объектов. Вторая группа, ОЬ)ест Мапайешепс Отвар, представляет собой консорциум производителей объектных баз данных и других заинтересованных сторон и занимается построением другого важного промьпцленного стандарта — обобщенной модели объектов (Сопипоп ОЬ)ест Мос1е1) и языка описания интерфейсов (1птег1асе Т)е(!п((топ 1апйттайе). Как и следует ожилать, в первом стандарте в качестве отправной точки выбрана перспектива баз данных, а движение осуществляется в сторону объектного мышления. Второй стандарт движется от объектов к управлению дагтныьти.
Оба стандарта являются важными. 8СН.З 5(21.3 — это расширение стандарта БО!.92, включающее поддержку объектно-ориентированных баз данных. В разработке обсуждаемого здесь проекта стандарта ЗЯЕЗ принимают участие комитеты по стандартизации АКБ1 ХЗН2 и 150/!ЕС ) ТС1/БС2(г'ттт(СЗ. Работа над этим стандартом не окончена, и в будуших вариантах вероятны изменения по сравнению с текущим проектом. Более того, БО1.3 является стандартом на продукцию, а не собственно продуктом. На сегодняшний момент нет ни одной коммерческой СУБД, реализующей этот стандарт. Вам следует рассматривать этот раздел в большей степени как описание возможного пути эволюции реляционных СУБД, а ве как описание конкретных возможностей продукта. ЗОЕЗ уходит корнями в традиции баз данных, а не в традиции объектного мышления.
Целью комитетов, работающих над ЗО!.3, является описание стаиларта, вертикально совместимого с ЯВТ-92. Это означает, что все возможности и функции ВОТ 92 будут и в БОГАЗ. Следовательно, БО!.3 выглядит и является средством для работы с реляционными базами данных, к которому добавлены объектные функции, а не новым средством работы с объектно-ориентированными базами данных. В БО13 появляются три группы новых идей: поддержка абстрактных типов данных, расширение синтаксиса определения таблиц н дополнительные языковые конструкции, делавшие ЗО1 3 салюлостаточпым с вычислительной точки зрения языком. Абстрактные типы данных В ЗО13 ибстрпкттттый тип дптттгьт (аЫгасс е(а(а суре ), нли АТЛ (АЕ)Т), — это определяемая пользователем структура, эквивалентная объекту ООП.
Абстракт- ные типы данных имеют методы, элементы данных и идентификаторы, Они мо|ут быть и подтппами других абстрактных типов ланных, так как поддерживается на- следование. Для реализации логики метолов абстрактных типов данных может использоваться как ЗО1 (с новыми растпирениями), так и внешние языки, напри- мер (ача, С(г и Сч--ь, Абстрактный тип данных может использоваться в ЗЯ!.-ттыраженни, хранить- ся в таблице, а также и то и другое одновременно, Если абстрактный тип данных фигурирует в одном или более БЯЕ.-вьгражении, по пе хранится в какой-либо таблтаце, то он является временным; постоянным абстрактный тип данных мож- но сделать, поместив его в таблицу.
В листинге 18А приведен пример определения абстрактного типа данных лля объекта СОТРУДНИК, описываюшего сотрудника компании. Текушпй синтаксис Я11.3 набран прописными буквами, а код, предоставляемый разработчиком,— строчными. Конкретньш синтаксис нам не важен, потому что оп может цзме- ниться.
Вместо этого следует обратить внимание на то, что этот абстрактныГт тип данных, подобно объекту ООП, имеет элементы данных п функции (лтетоды). Элементы ланных включают атрибуты ИмяСотрудника, ЛичныйНомер, ДатаНайма, ТекущаяЗарплата и виртуальный элемент данных Зарплата (элемент данных, сушествуюший только как результат вычисления функции). Методов имеется три: узнать Зарплату, изменить Зарплату и удалить Сотрудника.
Листинг 18.4. Пример определения абстрактного типа данных в БОСЗ СЙЕАТЕ ОВЗЕСТ ТУРЕ Сотрудник ЫПН 010 У!5!ВСЕ (ИмяСотрудника НЯЙСНАЙ ИОТ ИОСС. ЛичныйНомер СНДЙ()) Зарплата ОРОДТДВСЕ У!ЙТОдг ОЕТ ыттю узнать Зарплату 5ЕТ И(ТН изменшь Зарплату. РЙ1НАТЕ Латанайма БАТЕ ТекущаяЗарплата СОЙЙЕИСУ РОВС!С АСТОЙ РОИСТ1ОИ узнать Зарплату ( Е Сотрудник) ЙЕТОЙИ5 СОЙЙЕИСУ (здесь должен быть код, который проверяет полномочия пользователя, вызывающего метод, и возвращает текущую зарплату, если полномочия достаточны) ЙЕТОЙИ Зарплата ЕИО РОЙС!!ОИ, дСТОЙ ГОИСТ10И изненить Зарплату (:Е Сотрудник) ЙЕТОЙИ5 Сотрудник (здесь должен быть код, который проверяет полномочия пользователя, вызывающего метод, и устанавливает новое значение зарплаты, если полноночия достаточны) ЙЕТОЙИ :Е ЕИО ЕОИСТ!ОИ. ородоиконионо 716 Глава 18. Объектно-ориентнрованные базы данных Стандарты ООСУБД 717 Листинг 18.4 !продолжение) ОЕ5ТКОСТОК ЕОИСТ?ОИ удалить Сотрудника ( Е Сотруднкк) КЕТОКИ5 МОСЕ (код, выполняющий необходимую подготовку к проверку перед удаленлек сотрудника) ОЕ5ТКОУ .Е КЕТОКИ ;Е ЕИО ЕОИСТ!ОИ.
Сваг (1О). Сотрудник. сотрудник !ИЗТЯИСЕ) Прп опрелеленпи столбца, имеющего абстрактный тип данных, для указания того, что должно храшгться в таблице — объект или указатель на объект, — ис- В 50?3 определены два вида абстрактных ттгпов данных: АТД-объект (ОВ) ЕСТ) и АТД-значецпе (Ъ'А?.ПЕ). АТД-объект представляет собой идентифицируемую, независимую структуру ланных, которой присваивается идентификатор, называемый ОШ.
Этот идентификатор является уникальным значением, сушествуюшим на протяжении всей жизни объекта. Еслп нужно передавать 01?З другим функциям или хранить его в других таблицах, в первую строку определения объекта необходимо добавить фразу Ф?ТН 010 Ч151ВСЕ Это было сделано в листинге 18.4. Значения 01?) — это указатели на объекты; сохранение 01?) в таблице означает сохранение в ней указателя па объект.
Это может быть удобно, но создает одну проблему. При уничтожении абстрактного типа ланных его 01?) становится недействительным, но данное конкретное значение 0?П может храниться в строках таблиц, которые даже не находятся в памяти, когда происходит уничтожение абстрактного типа данных. Стандарт 50?3 не указывает, что должно происходить в этом случае. Очевидно, необходимо в программе проверять ОП) на допустимость, прежде чем пытаться его использовать. Второй вид абстрактного типа данных — АТД-зпачеппе. АТД-значениям не присваивавотся 011), и онп могуг существовать только в толг контексте, в котором они были созданы.