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

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


8.5.7 Идентификаторы объектов как значения

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

VALUES FOR <атрибут> ARE SYSTEM GENERATED

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

Пример 8.29. Перепишем прешюжение на рис. 8.13 так, чтобы отношения MovieStar и Movie имели атрибуты, являющиеся ID объектов, с названиями starjd и movi8 kJ соответственно. Результат такого изменения показан на рис. 8.15.

CREATE ROW TYPE MovieType(

moviejd REF(MovieType),

title CHAR(30).

year INTEGER, inColor BIT(1)

CREATE ROW TYPE AddressType( street CHAR (50). city CHAR(20)

CREATE ROW TYPE StarType( starjtl REF(StarType), name CHAR(30). address AddressType.

CREATE ROW TYPE StarslnType( star REF(StarType}.

movie REF(MovieType)

)

CREATE TABLE Movie OF TYPE MovieType VALUES FOR moviejd ARE SYSTEM GENERATED;

CREATE TABLE MovieStar OF TYPE StarType VALUES FOR star id ARE SYSTEM GENERATED;

CREATE TABLE Starsin OF TYPE StarslnType SCOPE FOR star IS MovieStar, SCOPE FOR movie IS Movie;

Рис. 8.15. Добавление объекте ID к отношениям

Этот рисунок отличается от рис. 8.13 по следующим пунктам:

1. К типу строки MovieType добавлен атрибут movie id.

2. К типу строки StarType добавлен атрибут starjd.



3. К описанию таблицы добавлено указание, что значение moviejd в таблице Movie генерируется систе\ю11.

4. К описанию таблицы добавлено указание, что значение starjd в таблице MovieStar генерируется cncieMoii.

5. Сохранено описание К01ггекста SCOPE из примера 8.28.

П0ЯВ1СЛСЯ более удобный способ записи сформулированного в примере 8.27. запроса о фильмах с участием Mel Gibson. Ссылки, содержащиеся в отнощении Star.sin из пункта WHERE, южнo отождествить с 1 D-атрибутами объектов в отношениях MovieStar ii Movie, пвляюшимис.ч ссылками на собственные кортежн:

SELECT Movie.title

FROM Starsln. MovieStar, Movie

WHERE Starsln.star= MovieStar.star id AND

Starsln.movie = Movie.moviejd AND

MovieStar.name - Mel Gibson ;

Согласно пункту FROM рассматривается все множество кортежей, состоящее из кортежей отношении Starsin, MovieStar и Movie соответственно. По первому условию пункта WHERE кортеж отношения Starsln ссылается (в своем компоненте star) на кортеж отношения MovieStar. По второму vcjiouiho кортеж отношения Starsln ссы- . лается (в своем компоненте movie) на кортеж отношения Movie. Сочетание этих условий требует, чтобы кортежи отношений MovieStar и Movie представляли кинозвезду и фильм, составляющие пару в кортеже отношения Starsln.

По третьему условию кинозвездой должен быть Mel Gbson, а пункт SELECT порождает название нужного фильма. Этот запрос .можно записать и методом следования по ссылке (пример 8.27). Фактически то был более простой метод формулировки такого запроса, но способ записи, примененный в данном примере, иллюстрирует определенные возможности, когорые открывает применение атрибутов. Я1ШЯЮ1ЦИЧСЯ ID объектов. □

8.5.8 Упражнения к разделу 8.5

Упражнение 8.5.1. Составьте описания следзющих типов строка таблицы :

а) Name i уре с компонент-амн для имени, отчества, фамилии и формы обращения к человеку (мистер, мадам и т.д.).

*Ь) PersonType с именем человека и ссылками на людей, являющихся его OTUO.VI II матерью. При описании нужно использовать тип из пункта (а).

с) ManiageType с датой бракосочетания и ссылками на мужа и жену.

апрожненис S.5.2, Постройте заново схему БД компьютерных продуктов из упра,1<не11ия 4.!.1, используя описания типов и атрибуты ссылок. В частности, в отношениях PC. Laptop м Printer сделайте атрибут model ссылкой на кортеж Product лля дайной моде.тн.

)прожненис 8.5.3. Используя схему отношения из упражнения S.5.2, запишите перечисленные ниже запросы. Применяйте ссылки везде, де это возможно.

a) Найдите производителей ПК с ооъемом жесткого лиска более 2 Гбайг.

b) Найдите производителей jasepHbix принтеров

с) Пост1лойте таблицу, в которой для каждой модели ПК блокнота указан ПК-блокнот с самой высокой скоростью процессора среди всех П К-блокнотов, выпускаемых данным производителем.



Упрожнение 8.5.5. Постройте заново схему БД боевых кораблей из упражнения 4.1.3, используя описания типов и атрибуты ссьшок. По схеме упражнения 8.1.2 можно выяснить, где име1И1о полезны атрибуты ссьшок. НайД1гге связи миоше-к-одному и постарайтесь выразить их с помощью атрибута с типом ссылки.

Упрожнение 8.5.6. Используя схему отношения из упражнения 8.5.5, запишите перечисленные ниже запросы. Где возможно, применяйте ссылки. Избегайте соединений (используя подзапросы или несколько переменных кортежей в пункте FROM).

Hafiairre корабли водоизмещением более 35 тыс. тонн.

Ь) Найдите сражения, в которых был потоплен хотя бы один корабль.

!с) Найдите классы, содержащие корабли, спущенные на возу после 1930 г.

!! d) Найдите сражения, в которых был поврежден по крайней мере один корабль CLUA.

8.6 Абстрактные типы данных в SQL3

Типы строка таблицы и ссылки SQL3 обеспечивают большую часть функ-шюнальности объегюв OQL Они позволяют изменять обтлкты с помощью удобных операторов SQL типа вставки и удаления. В OQL предполагается, что подобные изменения выполняются в окружающем объектно-ориентированном языке типа С++.

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

Типы строка таблицы не инкапсулируются. Над кортежа.ми этого типа допускается выполнять любые операции, которые можно выразить в S0L3. Интерфейсы (классы) OQL инкапсулируются не полиостью, так как доступ к компонентам объекта можно получить с помошью запросов OQL. Запросы к внутренней структуре объектов, как правило, менее опасны, чем изменения объектов незапланированными способами. В OQL невозможно изменять объекты иначе как с помошью методов (см раздел 8.1.2). При эюм предполагается, что методы, описанные на окружающем обычном языке типа С++, применимы только к объектам данного класса.

В S0L3 существует другой вид определения класса , не поддерживающий инкапсуляцию,-яб ирвл.7ииьш тип данных (ADT). Объекты ADT предназначены для использования в качестве компонентов кортежей, а не в качестве са.мих кортежей. Однако обычно они н.\1еют структ>ру кортежей, как и объекты ODL.

8.6.1 Определение ADT

Форма определения ДОГ показана на рис. 8.16.

1) CREATE TYPE <имя типа> (

2) список атрибутов и их типов

3) произвольное описание функций = и < для данного типа

4) описание Функций (методов) для данного типа

5) 1:

Рис. 3.16. Определение абстрактных тушоя донных

! Упрожнение 8.5.4. В упражнении 8.5.2. предполагалось, что имена моделей в отношениях РС, Laptop и Printer могут быть ссылками на кортежи таблицы Product. Можно ли сделать атрибут model из отно1иения Product ссылкой на кортеж в отношении, предсгапляюшем данный тип продукта? Почему?



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

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