Программирование >>  Реляционные базы данных 

1 ... 120 121 122 [ 123 ] 124 125


имя addrEq, поэтому име1гно его необходимо использовэть. Данная простая функция возвращает значение TRUE, если и только если компоненты двух значений для улицы и города совпадают между собой. Фактически такая функция может быть принята по умолчанию (пример 8.31). Строки (9) и (10) выражают функцию < с именем addrLT. Здесь говорится, что первый адрес предшествует второму, если город первого лексикографически меньше города второго (предшествует ему по алфавиту). При совпадении названий городов сравниваются названия улиц. Строки (11) -(14) определяют функцию fuUAddr, аргументом которой является объект типа AddressADT. Она возврашает полный адрес: название улииы. города и код региона из девяти цифр. На строке (12) описывается локальная переменная .z, временно хранящая код региона. Строка (13) вызывает функцию findZrp, которая определена внешним образом и имеет два строковых аргумента, представляющих улицу и город. Внешние функции рассматриваются далее.

1) FUNCTION AddressADT(:s CHAR(50). :с CHAR(20)

RETURNS AddressADT:

2) ;a AddressADT; BEGIN

3) :a ;= AddressADTO;

4) :a.street := s;

5) :a.city := :c;

6) RETURN :a; END;

7) FUNCTION addrEq(:a1 AddressADT, 82 AddressADT)

RETURNS BOOLEAN;

8) RETURN (:a1 .street = :a2.street AND

:a1.cily = :a2.city):

9) FUNCTION addrLT( al AddressADT, ;a2 AddressADT)

RETURNS BOOLEAN;

10) RETURN ((:a1.city <:a2.cily) OR

(:a1 city =:a2 city) AND (:a1.street < :a2.street));

11) FUNCTION fonAddr(:a AddressADT) RETURNS CHAR(82);

12) :zCHAR(10): BEGIN

13) :z = findZip(.a.street. :a.city);

14) RETURN (:a.stTeel :a city z); END;

Рис. 8.19, Некоторые функции gnm ogpeco RDT

В результате сложного процесса, который может происходить в другой БД, или в результате серии решений findZtp возврашаез правильный код региона лля заданной улицы и города. Данная функция здесь не описывается. И наконец, на строке (14) находятся улица н город из объекта :а, а также код региона из :z. Эти три компонента адреса разделены пробелами. □



Большие бинарные объекпл

Польшис бинарные объекты (BLOB) моот выглядеть как большие бито- J вые строки, но рсгыичацня гораздо сложнее реачнзашги строк символов > ма-той длины с пределом в 2.55 байт. Например, не имеет смысла хранить огромные строки в виде компонентов кортежей; их нужно хранить отдельно, обычно с помошью окружающей файловой системы. j

В модели клиент/сервер (см. раздел 7.3.4) предполагается, что значения и , кортежн имеют средние размеры, и сервер передает клиенту целые кортежи, i отвечаюгцие на запрос. Не имеет смысла передавать клиенту BLOB целико.м. Еслн клиент, например, запрашивает у сервера видеоклип, сервер посылает ему только часть aimeo. Клиент может начинать просмотр фильма. Он не .чолжсн локально хранить множество гигабайт видео или ждать, пока получит весь фильм целиком, а сразу же приступать к его просмотру.

8.6.3 Внешние функции

ADT могут иметь методы, написанные на главном языке, а не на S0L3. При 1юпользован1ги таких функции в определение ADT входит только их сигнатура -вместе с информацией о языке, на котором они написаны. Форма внешнего описания:

DECLARE EXTERNAL <нмя функции> <сигнатура> LANGUAGE <название языка>

Пример 8.33. Для применения внешней функции findZip из примера 8.32 в определении ADT нужно описать AddressADT. Поскольку у этой функции два аргумента в виде строк длиной в 50 и 20 символов и она возвращает строку длиной в 10 снмвопов. правильным ее onHcaiHieM будет

DECLARE EXTERNAL findZip

CHAR(50) CHAR(20) RETURNS CHAR(10)

LANGUAGE C:

Указание на язык С в данном опг1санни означает, что аргумент адреса передается фупкшн! findZip в виде подходящей для С программы. О

8.6-4 Упражнения к разделу 8.6

* Упражнение 8.6.!. Определите абстрактный тип данных PC , объекты которого представляют персональные компьютеры, а также скорость их процессоров, IAM. iW3Mep жесткого диска, скорость CD н цену

Упражнение 8.6.2, Запишите следующие функшш для ADT нз упражнения 8.6.1. используя пля внешних функций язык С.

*а) Функиию-конструктор newPC. принимающую значения пяти атрибутов PC aDT и возврашагошуго новый объект этого типа. При определении этой функции можно (и нужно) прилгснять встроенный конструктор РС().



*b) Функцию value с объектом PC в качестве аргумента. Оиа возврашает оценку РС в виде действительного числа, показывающего значение кoшьютepa. Формула его значения - скорость процессора плюс объем RAM {в мегабайтах), умноженный на 5. плюс объем жесткого диска (в гигабайтах), умноженный на 50, плюс скорость CD, умноженная на 10.

c) Функцию better. Она использует объект РС как аргумент и возвращает другой объект РС, имеющий ту же цену, но вдвое большие скорость процессора. RAM, жесткий диск и скорость CD. В описании функции можно использопать конструктор newPC из части (а) этого упражнения.

d) Функцию eqoalPC, выражающую равенство объектов РС. Эта функция определяет два РС как равные , если их скорости и объемы жестких дисков совпадают, не учитывая значений других компонентов.

e) Функцию ItPC, выражающую отношение меньше чем для ADT Рс. Она определяет />, < /ъ, если значение РС р\ меньше значения РС рг. Значение определено в части (Ь) данного упражнения; можно использовать также функцию из этой части.

Ыпражнсиис 8.6.3. Определите абстрактный тип дан1гых Ship для корабля, включающий его название, дату спуска на воду, число орудий, водоизмещение, видеоклип о его действиях в MPEG-кодировке и документ, отражающий его историю.

Упрожнение 8.6.4. Дай1¥ описания if определения перечисленных ниже функций на Ship ADT из упражнения 8.6.3.

a) Функш1и firePow/er с объектом Ship в качестве аргумента, возвращающей отевую мощь (число орудий корабля, умноженное на куб их калибра).

b) Функш1И playVideo с объектом Ship в качестве аргумента, которая показывает видеофильм о корабле с помощью проигрывающей файл MPEG внешней функции playMpeg (которую нужно описать).

c) Функиии-конструктора newShip со значениями имени в качестве аргументов, которая возврашает новый объект Ship с этим именем.

d) Функции equalShlps, выражающей равенство объектов Ship. Эта функция определяет два корабля как равные , если они имеют одно и то же название и год спуска на воду, не учитывая значений других компонентов.

e) Функции itShips, выражающей отношение меньше чем для ADT Ship. Она определяет sj < .vj, если название корабля по алфавиту меньше имени корабля .Яг; при одинаковых названиях si спущен на воду раньше S2.

8.7 Сравнение подходов ODL/OQL и SQL3

Два главных стандарта управления объектно-ориентированными БД - ODL/OQL и SQL3 - различаются по нескольким параметрам, но сходства между ними больше. Несмотря на то что они базируются на различных моделях, в каждом нз них эффективно используется то, что является фундаментальным для другого.

В этом разделе перечислены принципиальные различия между двумя упомянутыми стандартами и между способами, с помошью которых в них достигаются возможные сбалансированные решения. В то же время будет пока.зано, чем типы строка таблицы SQL3 и ADT отличаются друг от друга и от всех других форм интерфейсов (классов) в ODL. Таким образом, сравниваются три раз;шчных подхода к реализации объектно-ориентированного полхода к ODL/OQL, типы строка таблицы SQL3 и типы значений S0L3.



1 ... 120 121 122 [ 123 ] 124 125

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика