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

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


366 Глава 6 Объектно-оркеитировакные языки запросов

Строка (I)-оператор CREATE, иподяшиП имя ADT. Строка (2) предстамяет собой список имен атрибутои и их типов, раэзелепиых запяты.чи. Строка (3) на рмс. 8.16 содержит произвольные описания операторов сравнения = i <. Форма on 1 ican I Hi panel 1ства:

EQUALS <hm:, функнш!. реачнзуюш.ей равенство?

Функция - определяется ан<ыогичио, за.менои ключевою слова EQUALS на LESS THAN. Согласно скпиарту SQL3, эти функции, возможно, ие будут ннтерпретиро-в;п-ься каким-то особым образо.м, но их нужно определять и применять, как н любые другие функции для этого типа. Четыре других оператора не нужно определять ясно. можно пюгро.пь с помошью операторов = и <. Например. < - то же самое, что = или < , а > выраа.:ается через не < . Если операторы = и < определены, то значения данного ADT можно сравниветь в пунктах WHERE так же, как и значения обычных типов SQL.

Строка (41 описание других функций (методов) для ADT. В SQLj каждый ADT сопрово/кдается следующими встроенными методами, когорые не нужно отдельно описыва1ь или определять.

1. Фуикции-иттруктор, позврашающая новый объект данного типа. Первоначально значениями всех атрибутов этого объекта являются NULL. Еслн Г - имя ADT, то ? () - функция-конструктор.

2. Функции иаб.иодения для каждого атрибута, возвращающая его значение. Если ,-1 -нмя йтриб\ча. а .V-переменная, значением которой является объект ADT. то А (X) - значение атрибута А объекта X. Для последнего можно применять более удобное обозначение - Х.А.

3. Футкция изменения, заменяющая старое значение каждого атрибута новым. Обычно применяется в левой части оператора приписывания (c. раздел 8.6.2) .Цля инкаисуляш1и необходимо блокировать неконтролируемое применение этой функции. В SQL3 для функции сушествует привилегия EXECUTE, которую можно присвоить или огменить так же, как шесть приышегий S0L2, описанных н разделе 7 4.1.

Другие функшш определяются внутри или вне оператора CREATE TYPE. Еслн онн определены вне этого onepjTopa, они могут использовать лишь функции, определенные внутри. В1члючая перечисленные выше встроенные функции.

Пример 8.30. В примере S 22 адреса, состоящие из улицы и города, были отнесены к типу строка таблицы . И.ч можно определить также в виде ADT с такой же структ\рой. Результат этого подхода - инкапсуляция адресов; невозможно получить доступ к компонентам адреса, выражающим улицу и город, не сделав общедоступными их функшш изменен1.гя и наблюдения.

На рис. 8.17 показано определение ADT с именем AddressADT, не содержащее реальных определений связанных с ним функций или метшов.

Строки (2) и (3) определяют кортеж с компонентами street и city. Их типами, как и в примере 8.22. являются строки дчиной в 50 и 20 символов соответственно.

1) CREATE TYPE AddressADT (

2) street CHAR(50),

3) city CHAR(20).

4) EQUALS addrEq.

5) LESS THAN addrLT

здесь можно описать другие функции

Рис 8.17. Определение RDT одресо



; MPEG-кодирование видеофильмов

I Поскольку для хранения видео нужен большой объем памяти, они ко-

1 дируются по одной из многих стандартных схем уплотнения. В наиболее

? распространенной из них, МРЕС, используется тот факт, что любой фрейм

! движущейся картины очень похож на предшествующий. Поэтому области

.* любого фрейма можно представить с помошью указателя на аналогичную

i область предыдущего, при этом она может оставаться иа прежней позиции

I (если является частью стационарного основания) или перейти на другую

.; позицию (если она часть движущегося объекта).

- Несмотря на то что MPEG уплотняет видео лучше стандартных схем

I уплотнения, МРЕС-кодирование требует 1 Гбайт памяти на каждый час филь-

i ма. Более того, поскольку допускаются небольшие различия между соответст-

\ вующими друг другу областями, качество фильма часто сш1жается. И все же

s МРЕС выражает разумный баланс между качеством фильма, используемым

г объемом памяти и требуемой вычислительной мощностью.

L= = -.- = . . i

Следующий пример показывает способность ADT вводить в программы SQL типы данных, выходящие за рамки классических представлений об использовании СУБД. Стало оправданным хранение в БД больших объектов ткпа образов, аудио-клипов или фильмов. Операции над такими объектами отличаются от стандартных операций SQL, таких как сравнение, печатание, агрегация и тл Вывод1пъ эти объекты на экран часто приходится с помощью сложных апгортгтмов декодирования.

Пример 8.31. Предположим, нужен ADT Мрад, т.е. МРЕС, содержащий закодированный фильм (MPEG - стандартная форма уплотнения видеофильмов; см. заключенный в рамку текст в конце этого раздела). Технически кодирование MPEG - это строка символов, поэтому в данном случае подходит тип VARCHAR. Однако длина MPEG-кодировки видеофильма часто настолько велика (измеряется в гигабайтах), что представлять видеофильмы в форме строк весьма неудобгю.

Для поддержки видео и других очень больших экземпляров данных применяется специальный тип данных BLOB (Binary, Large, OBjeci) - особый вид битовой строки, которая может быть очень длинной и измеряться в гигабайтах. В этом примере предполагается, что BLOB -это встроенный тип для БД. Определение ADT Мред показано на рис. 8.18.

1) CREATE TYPE Mpeg(

2) video BLOB.

3) length INTEGER,

4) copyright VARCHAR(255).

5) EQUALS DEFAULT,

6) LESS THAN NONE

определения функций

Рис. 8.18. Определение RDT ДЛРеО

Согласно строкам (4) к (5), функция равенства для AddressADT называется addrEq. а функция сравнения - addrLT. При этом неизвестно, что именно делают эти функции, так как отс\тству10т их определения. Наши версии этих определений приведены в примере 8.32. Адреса здесь упорядочены лексикографически, сначала по названию города, затем по названию улицы. □



Согласно строке (2) типом атрибута video является BLOB. Этот атрибут содержит очень большо! чаколиропанный пидео41зильм. Строки (i) и (4) определяют два други.ч обычных атри6\та; продолжительность видеофиль.ма и указатель авторского права на него. Согласно строке (5) равенство значений типа Мред по умолчанию определяется через идентичность: два объекта Мред равны, если и только если они полностью совпадают до последнего бита по споим соответствующим друг другу атрибутам. Можно построить более сложное определение равенства, отразив идею, согласно которой два значения Мред равны , если они не отличаются друг от друга при декодировании и выводе на экран с приемлемым разрешением, но здесь не будут обсуждаться такие опреде;геиия. Строка (6) означает, что отношение < между значениями Мред не определено, т.е. запрещено писать /I < В, если А и 5 -значения типа Мред. □

8.6.2 Определение методов для ADT

После списка атрибутов ADT лгожно добавить любой сгнюок описаний функций, построенных по форме

FUNCTION <имя> {<аргумснты>) RETURNS <тип>;

Каждый аргумент состоит из имени ггеременной и ее т!гпа и отделен от другого aprvMcirra запятой.

Функции бывагот двух типов - внешние и внутренние. Первые записываются в главном языке, и лишь нх сигнатура появляется в определении ЛОТ (см. раздел 8.6.3). Вторые записываются на расширенном языке SQL. Ниже перечислены некоторые способы нх описания, включая расширения SQL2 и язык запросов SQL3.

:= применяется в качестве оператора присваивания.

Переменную, являющуюся локальной относительно функции, можно объявить с ггомошью имени, которому предшествует двоеточие. После и.мени указывается его тип.

Оператор точки при.\геняегся для доступа к компонентам структуры.

Булевы значе1гия можно выражать так же, как в пунктах WHERE.

BEGIN и END нужны ДЛЯ обьедниення различных операторов в тело функции.

Пример 8.32. Продолжим пример 8.30. На рис. 8.19 описаны функции, когорые можно вкггючтъ в определение с помощыо оператора создания типа (рис. 8.17).

Строки (U - (6) определяют функцию-конструктор для ЛОТ AddressADT. SQL3 имеет без аргу.ментов встроенный конструктор с 1гменем AddressADT (с именем cn.vroro ADT), Но нам нужен другой конструктор, имеющий в качестве аргументов значеггия улицы и города. Назвать его можно как угодно, но допустимо и приемлемо прнсп г1Г5ать ему н.чя класса.

Строка (I) - описание новой функиии-конструктора с двулгя аргументами - ,9 и с, пре.1ставл}ггошими улицу и город. Их типы - это строки дли1юй в 50 и 20 сн.\1волов соответственно. Эта функция возвращает значения типа AddressFDT. Согласно строке (2) а - локальная переменная типа AddressADT. Строки (3) - (6) составляют те.мо функции. На строке (3) встроенный конструктор AddressADT{) применяется .ОЛЯ создания нового объект-а и делает его значением переменной :а. Встроенную функигно-конструктор невозможно перепутать с описываемой функцией, так как у них разггые аргументы. То есть, строку (3) нельзя И1Гтерпретнровать как рекурсивный вызов. Строка (4) копирует первый аромент в компонент street переменной л, а строка (5) - BTopoir аргумент в ко\г1гонент city этой же переменной. И наконец, строка (6) воз1!р;ч.цает построенное значение а. Строки (7) и (S) определяют функцию равенства ллм .ADT AddressADT. Согласно строке (4) рис. 8.17 этой функции было присвоено



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

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