|
Программирование >> Реляционные базы данных
имя 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.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |