Теория и практика построения баз данных (1088289), страница 153
Текст из файла (страница 153)
Чтобы понять, как используются такие массивы, предположим, 5ОЬ> 5ЕЬЕСТ е РаОН ВЩ(инвт; ООТТОТЙОТО НйИЕ 1), йРТ ОН11('299 ', 2), йРТ ОН1Т('399 '„ 1)) 1), йР1 ОН1Т('2В1 ', 2), йРТ ОН1Т('301 ', 1)» что нам нужно создать таблицу с данными о многоквартирном доме. В ней должно быть значение суррогатного ключа, название здания и перечень квартир в здании. Для этого сначала создадим объект для квартиры, а затем запишем его в массив переменной длины, как показано в следуюгпем фрагменте: СКЕЯТЕ ТУРЕ Ар( 0п»! А5 ОВОЕСТ ( Арал(веп(ицвЬег спаг(5Е ИцвЬегйебгоова ппТ); СКЕАТЕ ТУРЕ АРАКТМЕИТ С!5Т! А5 УЯККАУ(50) ОР АРТ 0п1Т Здесь тип АРАКТМЕМТ С15Т! может иметь до 50 элементов типа Ар( Опй.
Следуй>ший оператор создаст таблицу с информацией о домах, использующую этот массив переменной длины: СйЕАТЕ ТАВСЕ В0!СО!И01 ( Вц1101п0!О ИОМВЕК, ИавеНАКСНАй2(50) 0п1(5АРАКТМЕИТ С15Т1); Теперь, чтобы вставить данные в таблицу, мы должны использовать имена массива и его элементов, как показано здесь: 1И5ЕйТ !ИТО 80!СО!И01 (Вц1101п010. Иаве. 0п1(5) УАС055 ( 1, 'Еаа(!аке'. АРАйТМЕИТ С!5Т1(АР( 0п1Т('100', !), (Арг Опть('200', 2).
(Ар( Опт»о('300', 1))); Считывать значения всех сголбпов можно с помощью обычного оператора 5ЕСЕСТ, но только если в предложении ЪУНЕКЕ нет ссылок на элементы Ар( Оп18 На рис.!8.4, 6 показаны результаты оператора 5ЕСЕСТ * для всех строк. Если же вы хотите получить значения Ар( 0пй ипи использовать его значения в предложении Ч(НЕВЕ, вы должны будете вывернуть этот запрос наизнанку, как показано ниже; 5ЕСЕСТ Яраг(вепгицвЬег РКОМ ТАВ(Е ( 5ЕСЕСк 0И1Т5 РВОМ В0!(01И61 ИНЕйЕ Иаае='Еаз()аке') ЫНЕКЕ ЯрагьвепТИцвЬег>100; Этот запрос делает выборку атрибута Арап(1пеп(МО(пЬег из объекта ВИЕТ, являющегося массивом переменной длины.
Таблица В01(01МО обрабатывается как во вложенном запросе. Результатом будет таблипа, содержащая столбец Араг(гпеп(- Ицп»Ьег н две строки — 200 и 300. В Огас!е версии 8 нельзя обновить или удалить отдельные строки в массиве переменной длины с помощью оператора 0РОАТЕ или ОЕСЕТЕ. Вместо этого иеоб- 708 Глава 10. Объектно-ориентированные базы данных Постоянное хранение объектов в Огас)е ?ОЕ ходимо написать процедуру на Р! /8О1., перебирающую массив. Если вы хотите использовать для этоГг цели оператор ОРОАТЕ или ОЕЕЕТЕ, вам нужно создать вложенную таблицу, как описывается в следующем разделе. Вложенные таблицы Вложенные таблицы определяются почти так же, как и массивы переменной длины.
Разница между ними заключается в том, что данные массива переменной длины хранятся в таблице, в которой онп определены, а данные вложенных таблиц — в отдельной таблице. Создать таблицу В01Е01МВ с помощью вложенных таблиц можно посредством следующего оператора: СРЕАТЕ ТУРЕ АРАРТМЕИТ Е15Т2 А5 ТАВЕЕ ОГ Ярт Ощ!и / СРЕАТЕ ТАВСЕ В01Г 01ИО2 ( Во1101гй!О ИОМВЕР, Иаве ЧАРСНАР2(50), Оп11з АРАРТНЕИТ С15Т2) МЕ5ТЕО ТАВСЕ Оп(сз 5ТОРЕ А5 ОИ1Т5 ТЯВЕЕ: Единственное отличие от синтаксиса определения массивов переменной длины состоит в том, что вложенной таблице должно быть дано имя. Здесь таблица названа ОМ1Т5 ТАВЕЕ. На рис.
!8.4, в показан результат выборки 5ЕЕЕСТ * всех строк таблицы ВО1Е01М62; обратите внимание, что он идентичен результату для примера с гиассивом переменной длины. Операторы вставки и запроса, используемые со вложенными таблицами, идентичны тем, которые используются для массивов переменной длины: !И5ЕРТ !ИТО 001С01И62 (Вщ101пй!О, Иаае, Оп1тз) ЧАЕОЕ5 (1. 'Еазг1аРе'.
АРАйТНЕИТ С!5Т2 (Арт Ощ Г(' 100', 1), (Арт Оп11('200', 2), (Яре 0 1( 300 . 1))): 5ЕСЕСТ Яраггаепгйоаоег ГРОМ ТАВСЕ ( 5ЕСЕСТ ОИ!Т5 ГРОМ ВБ!СО!йбг ИНЕЙЕ Мове='Еазт!аРе') ИНЕРЕ АрагтвептйиаЬег>100; Однако, как было обещано, вы можете обновлять и удалять элементы вложенной таблицы: ОРОАТЕ ТАВСЕ 5ЕСЕСТ Оп1тз ГРОМ ВО!СО!Иаг ННЕРЕ Раве='Еазт!аРе') 5ЕТ ИивоегВеогоовз=5 ННЕРЕ Араг1веп(йовЬег>100; ОЕЕЕТЕ ГРОМ ТЯВСЕ ( 5ЕСЕСТ Оп1тз гйОМ ВО!С01ИВ2 ННЕРЕ Раве='Еаз(!але') ННЕйЕ АрагтаептйовЬег=100.
Как можно видеть, массивы переменной длины и вложенные таблицы весьма похожи между собой. но у нпх есть и различия. Во-первых, как уже говорилось, операторы ОРОАТЕ и ОЕЕЕТЕ работают только со вложенными таблццамп. Кроме того, массивы переменной ллнны ограничены максимальным размером, а вложенные таблицы — нет. К тому же, Огас!е хранит массивы переменной длины вместе с таблицей, а данные вложенных таблиц — отдельно. Наконец, в массиве перемешюй длины поддерживается определенный порядок строк, а во вложенной таблице порядок строк может меняться по мере того, как в нее добавляются новые строки. Строчные объекты Строчные объекты представляют собой четвертый способ использования объектных типов в таблицах. Таблица строчных объектов — это просто таблица, содержащая только об ьекты.
Для нащего примера определим объект-квартиру оЬ) АраФпеп(, как прежде: СРЕАТЕ ТУРЕ оЬ3 Яраг~аоот А5 ОВОЕСТ ( Во1!о1пййаве ЧАРСНАР2(25), АрагГвепФовЬег сваг(4). ИоаЬегВейгоовз МОМВЕй); Следующий оператор создаст таблицу с объектами оЬ) Яраг(гпепб !И5ЕРТ 1ИТО АРАРТНЕИТ5 (Во)!01пойаве, Араг1вепсйовоег, ИовЬегВебгоовз) ЧАСОЕ5 ('Ыезтч1еи'. '333'. 2) Следующий оператор нроизведет обновление строки в таблице АРАйТМЕМТ5: ОРОАТЕ араг(веп(з 5ЕТ ИцаоегВеОгоавз = 5 ИНЕРЕ Арагтвеп1йоаЬег = Наконец, удаление строки выполнит следующий оператор: ОЕСЕТЕ ГРОМ АРАРТНЕИТ5 ИНЕРЕ АраггвептйивЬег=' 100'; 710 Глава ЧВ.
Обьектно-ориентированные базы данных Постоянное хранение объектов в Огас!в 711 Объекты Огас!е Ранее было показано, как определяются объектные типы и как пх можно использовать в качестве элементов таблиц. При таких способах хранения объектов объектная структура накладывается на отношения, а результирующие отношения могут обрабатываться с помощью различных вариаций 5(2[-. Но Огас1е предлагает и другой вариант — наложение речяцпонных структур на объекты. Для обработки этих структур 8(2[. непригоден. Этп структуры представ.чяют собой объекты, хранящиеся в базе данных, но манипуляции с ними должны выполняться объектно-ориентированными программами.
Определение объектного типа В листинге 18.2 показаны определения объектных типов Огас1е для системы об- работки заказов, изображенной на рнс. 18.2. Как показано ранее, структура объек- тов и пользовательские типы данных определяются с помощью оператора СИЕАТЕ ТУРЕ. Первые два типа, определенные на рисунке, — это пользовательский тип аЬ) АООИЕ55 (адрес) и массив переменной длины под названием оЬ! РНОИЕ 1151 (список телефонов), имеющий максимальную длину 5, Эти два типа могут ис- пользоваться в операторах СИЕАТЕ ТУРЕ А5 О ВЫЕСТ точно так же, как используются типы данных при создании таблиц.
Листинг 18.2. Описание объектов в Огас)е СИЕЯТЕ ТУРЕ оЬВ АООИЕ55 А5 ОВЛЕСТ 1 51геет НАИСНАй2150) С[ гу ЧАИСНАй2150) 5[ате НЯИСНАй212) 21р НАИСНАйг(!0) Соиптгу ЧАйСНАй2115) ) ! СИЕАТЕ ТУРЕ оЬО РНОМЕ Е[5Т А5 НАййЯУ[5) ОГ ЧАйСНАй21 12) I СИЕАТЕ ТУРЕ оЬ) 5АЕЕ5РЕй50М А5 ОВЛЕСТ 1 5а)езрегзоп10 МОМВЕй, йаве ЧЯИСНАИ2(50), АООгезз оЬЗ АООИЕ55, РЬопейив5 оЬ) РНОМЕ С!5Т ) СИЕАТЕ ТУРЕ оЬО С05ТОМЕй А5 ОВАНЕС[ 1 Сиз(овег[0 МОМВЕй, йаве НАВСНАйг[50), АООге55 оЬЗ ЯООИЕ55. Рйопейивз оЬВ РНОМЕ С[5Т СИЕАТЕ ТУРЕ оЬО 1ТЕМ СИЕАТЕ ТУРЕ оЬЛ Е1ИЕ1ТЕМ [гевйивЬег ! 1евйеГ Оиап[ Су ОиапютуВасИОгиегео Ех[епиеОРг1се А5 ОВЗЕСТ 1 МОМВЕй, йЕГ оЬВ !ТЕМ.
ИОМВЕй, ИОМВЕй. ИОМВЕй ! СИЕАТЕ ТУРЕ 1)51 Е[ИЕ!ТЕМ А5 ТАВ1Е ОГ оЬВ С[НЕ[ТЕМ / СИЕАТЕ ТУРЕ оЬ) [ТЕМ А5 ОВЗЕСТ 1 [тевйивЬег ИОМВЕй. 11евйаве НАИСНАйг[25). Рг1се МОМВЕй ) ! СИЕАТЕ ТУРЕ оЬ) ОИОЕй А5 ОгиегйивЬег ОгиегОасе С1пе[телв 5Ь1рТОАООге55 Сизтгвег 5а[езрегзоп ОВОЕСТ ~ МОМВЕй, ВАТЕ. )151 Е[МЕ[ТЕМ. оЬО АООЯЕ55. йЕГ оЬ) С05ТОМЕй. йЕГ оЬО 5ЯЕЕ5РЕй5ОМ. МЕМВЕй ГОИСТ10й гота[ 11ев5 йЕИОйй МОМВЕй ) Далее в листинге 18.2 определены типы оЬ) 5АЕЕ5РЕИ50И (продавец) и оЬ) С05ТОМЕй (клиент).
В обоих из них задействованы пользовательские типы оЬ) АООИЕ55 и оЬ) РНОИЕ Е[5Т. Такое использование означает, что каждый из объектов оЬ) 5АСЕ5РЕИ50И и оЬ) С05ТОМЕй имеет атрибуты 5(гее( (улица), Сну (город), 5[а(е (штат), 21р (Индекс) и Соип[гу (Страна). Каждый из них имеет также массив переменной длины, содержа|цпй номера телефонов. Следующий оператор СИЕАТЕ ТУРЕ является пустым; он нужен для того, чтобы сообщить синтаксическому анализатору типов Огас1е, что далее последует определение объекта оЬ1 1ТЕМ (товар). Этот оператор позволяет использовать в определении типа оЬ) Е1ИЕ[ТЕМ (строка заказа) символ оЬ) 1ТЕМ, хотя последний еше не был определен. Определение типа оЬ! Е[ИНТЕМ включает атрибуты 1(евйивЬег (номер товара), Оиапп[у (колпчество), Оиап[пуВасйогдегеб (отложенное количество) и ЕхтепИебРпсе (цена с налогом), как показано на рис.
18.2. Однако помимо этого оно включает ссылочный атрибут. Этот атрибут, представляющий собой ссылку на товар и названный 11евйеГ, определен как ИЕГ оЬ) 1ТЕМ. Такая запись означает, что данный атрибут содержит предоставляемое системой значение указателя на 712 Глава 18. Объектно-ориентированные базы данных Постоянное хранение объектов в Огас!е 713 конкретный экземпляр объекта 1ТЕМ. Этот указатель будет действителен вне зависимости от того, находится ли объект, на который он указывает, в оперативной памяти или на диске. Если требуется настройка по адресам, Огас1е выполнит ее автоматически. Разумеется, прикладная программа должна присвоить 1(еейе? значение. Одним из способов сделать это является использование следующего 8()?.-оператора: 1И5ЕЙТ !ИТО !(евйет 5ЕЕЕСТ ЙЕЕ(1(евР(г) ЕЙОМ оЬ) !ТЕМ 1!евРтг ИНЕЙЕ 1(евР(г.!(евйивЬег=10000; Здесь предполагается, что только один элемент имеет значение 1?еУпйвеЬег, равное 1О 000.