|
Программирование >> Реляционные базы данных
8.4 Создание и назначение объектов в O0L 357 d) Структуру, компонент которой а -это множество 1,2}, а компонент Ь-мультимножество (I, \). e) Мультимножество структур, каждая из которых содержит два поля - а и Ь. Трем струкгурам этою мультимножества соответствуют пары значений (1,2), (2, I) и (1,2). Упрожнение 8.4.2. Используя схему ODL упражнения 8.1.1 и рис 8.2, запишите в языке С++ (или в другом объектно-ориентированном главном языке по вашему выбору), расширенном за счет OQL, операторы, выполняющие следующие задачи: *а) Присвойте переменной х главного языка объект, представляющий ПК с номером модели 1000. b) Присвойте перел1енной у главного языка множество всех объектов, представляющих ПК-блокноты, имеюшие RAM не менее 16 Мбайт. c) Присвойте переменной z главного языка среднюю скорость ПК, имеющих иену менее 1500 дол. !d) Найдите все лазерные принтеры, напечатайте список номеров их моделей и иен. а затем сообщение о номере модели, имеющей самую низкую иену. !! е) Напечатайте таблицу, показывающую минимальную и максимальную цены, установленные производителями ПК. Упрожнение 8.4.3. В этом упражнении применяется схема ODL из упражнения 8.1.2 м рис 8.3 Предполагается, что для каждого из четырех классов э1Х)й схемы есть функция-конструк-юр с тем же именем, использующая в качестве аргументов значения каждого атрибута и однозначные связи: многозначные связи считаются пустыми. Для однозначных связей с другими классами можно объявить переменную главного языка, текущим значением которой является связанный объект. Создайте перечисленные ниже объекты и в каждом случае сделайте созданный объект значением переменной главного языка. *а) Линкор Colorado класса Maryland, спущенный на воду в 1923 г. b) Линкор Graf Spee класса Lmzow. спущенный на воду в 1936 г. c) П результате сражения при Малайе (Malaya) был потоплен линкор Prince of Wales . d) Сражение при Малайе произошло в 1941 г. e) Класс Hood британских линкоров имел 15-яюймовые орудия и водоизмещение 41 тыс. тонн. 8.5 Объекты кортежей в SQL3 в OQL нет специального понятия отношения, а используются множества (мульти.множества) структур. Однако в SQL понятие отношения настолько важно, что SQL3 сохраняет отношение в качестве основного понятия. В SQL3 есть два вида объектов; 1- Строковые объекты, которые, в сущности, являются кортежами. 2. Абстрактные типы данных (ADT или согласно некоторым документам по SQL3 значении ,4D7) -общие объекты, которые можно иоюльзовазь только в качестве компонентов кортежей. 8-51 Типы строки в SQL3 можно onpejiejHiTb тип кортежа, строго соотиегстиуюшиГ! классу объектов. В описание типа строки входят следующие ачементы: 1. Ключевые слова CREATE ROW TYPE 2. Имя типа 3. ЗаключеииыГ! в скобки список атрибутов и их типов Форма определения типа строки 71- CREATE ROW TYPE Т (<описаиия компонснтоа>) Пример 8.22. Можно создать тип строки, представляющий кинозвезд фильма и ангыогичный классу Star из рнс. 8.4. Однако множество фильмов невозможно прсдставмгь нсгюсрслсгвснно в виде поля в кортежах отношения Star. Поэтому мы начнем только с компонентов name и address этих кортежей. Тип адреса на рис. 8.4 -это кортеж с компонентами street и city. Значит, нужны два определения тина одно для адресов, а другое для кинозвезд. В S0L3 допускается использовать тип строки в качестве типа компонента другого типа строки или отношения. Требуемые определения показаны на рис. 8.11. CREATE ROW TYPE AddressType( street CHAR(50), city CHAR(20) CREATE ROW TYPE StarType( name CHAR(30). address AddressType Рис. 8.11. Два определения типа строки Кортеж типа AddressType имеет два компонента, атриб>тами которых яапяются street и city. Типы этих компонентов - строки длиной в 50 и 20 символов соответ стеенно. Кортеяс типа StarType тоже имеет два компонента. Первый из них - атрн-оут name, тнпо.м когорого является сгрока нз 30 символов, а второй - address, типом которого является AddressType. т.е. кортеж с компонентами street и city. □ 8-5.2 Оиисание отношений с типом строка таблицы При наличии описания типа строка таблицы можно описать отношения, кортежи которых имеют этот же тип. По форме такое описание похоже на описание из раздела 5.7.2. но при этом в обычном описании таблицы SQL вместо списка агрибутов применяется выражение OF TYPE <имя типа строка табл11цы > Области значений и типы строк таблицы в разделе 5.7.6 рассматривались области значений, схожие с описаниями типов. Между областями и типами строка таблицы есть по крайней мере два важных различия. Явное различие: области определяют типы компонентов кортежей, а типы строка таблицы относятся к целым кортежам. Менее глубокие различия заключаются в следующем. Области значений - это вид сокращений. Две области могут представлять один и тот же тип, и значения таких областей не различаются. Предположим, лва типа строка таблицы - Г и 7 , - имеют идентичные определения. Тогда кортежи отношений, имеющих эти типы, не относятся к взаимозаменяемым. Например, атрибут, типом которого является ссылка иа Г не может ссылаться на кортеж, типом которого является Т. Пример в.23. MovieStar можно описать как отношение, кортежи которого имеют тип StarType. Для этого применяется выражение CREATE TABLE MovieStar OF TYPE StarType: В результате таблица MovieStar имеет .ава атрибута - name и address. Заметим, что типом второго из них является тип строка таблицы , что обычно не допускается в стагдарга<к SQL, предшествуюилих S0L3. □ Обычно для каждого типа строка таблиш> имеется единственное отношение. ii это отношение интерпретируется как экстент класса (в смысле раздела 8.1.3), соответствующего типу данного кортежа. Но для заданного типа строка таблицы может существовать несколько отношений или не существовать ни одного. 8.5-3 Доступ к компонентам типа строка таблицы Поскольку в SQL3 компоненты могут содержать структуры, то возникает необходимость в доступе к их компонентам. В S0L3 применяются двухточечная ноташ1я. соответствующая одноточечной нотации OQL или С. Пример 8.24. Запрос на рис. 8.12 находит имя каждой кинозвезды, проживаю-meii в Beverly Hills, и название улицы, на которой она проживает. SELECT MovieStar.name, MovieStar.address..street FROM MovieStar WHERE MovieStar.address..city = Beverly Hills; Рис. 8.12. Доступ к компонентом компонентов Полные имена атрибутов используются только лля иллюстрации разницы в использовании одной и двух точек. На самом деле MovieStar и одна точка здесь необязательны, так как нет никаких неясностей, связанных с атрибутами name и address. □
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |