С.Д. Кузнецов - Основы баз данных (1121716), страница 99
Текст из файла (страница 99)
Вторая функция преобразует значения Бее-типа к соответствующему встроенному типу данных при выборке строк из типизированной таблицы (Бее лБ Болеее). Система автоматически генерирует обе подпрограммы, и конструкция ге1 саво орс(оп позволяет лишь назначить подпрограммам имена. Если конструкция ге1 саэс орг(оп явно не включается в определение структурного типа с Бее УБ1нБ ргет1ег(пей суре, то имена подпрограммам назначаются системой.
Единственным преимуществом явного назначения имен является возможность явного вызова этих функций при написании Е ) -операторов, содержащих выражения ЕЕЕ- типа, которые нужно привести к соответствующему встроенному типу. Заметим, что такие функции невозможно написать вручную, поскольку правила отображения зависят от реализации Я)) . Если дяя структурного типа выбирается альтернатива порождения ссылочных значений, то система использует для порождения ссылочных значений значения неявно указанных столбцов (соответствуюших явно указанным атрибутам ассоциированного структурного типа).
При этом остаются все упомянутые выше проблемы, хотя в таком случае явно требуется объявление ограничений РБ1млеу кеу или глч10це для соответствующего набора столбцов. Наконец, при выборе последней альтернативы (системно-генерируемые ссылочные значения) каждой строке, вставляемой в типизированную таблицу, ассоциированную с соответствующим структурным типом, присваивается уникальный идентификатор. Это значение сохраняется в самоссылающемся столбце и может быть использовано любым приложением для уникальной идентификации данной строки на всем протяжении жизни таблицы. Спецификация ссылочного типа при объявлении столбцов и атрибутов Самоссылающиеся столбцы всегда имеют Бее-тип, Конкретный КЕЕ-тип зависит от двух факторов: ° структурного типа, ассоциированного с типизированной таблицей: БЕБ-тип всегда связан с некоторым структурным типом; Основы бвз данных Курс ° выбранного способа генерации ссылочных значений; эта информация задается в определении структурного типа и не присутствует в спецификации ссылочного типа.
Для объявления местоположения ссылочного типа используется следующий синтаксис: геуе енсе гуре ::= ЕЕЕ (геуегепсеб еуре) ( БСОРЕ еабуе пале гегегепсеб Еуре ::= 'дПР пап~в цпт пвзве должно задавать имя типа (гееегепсеб гуре), на экземпляры которого будут указывать значения ссылочного типа. ЕЕЕ-тип может использоваться в качестве типа атрибута структурного типа, и в этом случае ге1егепсед суре может быть тем же самым, что и определяемый структурный тип. Во все остальных случаях геЕегепсед Гуре должен являться некоторым существующим структурным типом. В необязательном разделе ЕГОРЕ задается имя типизированной таблицы.
Ассоциированным структурным типом этой таблицы должен быть теГегеосеЗ Гуре ЕЕЕ-типа, в спецификации которого содержится данный раздел ЕСОРЕ. Хотя можно было бы ожидать, что значение еЕР-типа можно использовать для ссылки на строки типизированных таблиц, ассоциированный структурный тип которых является собственным подтипом указанного гегегеосей куре, в В0Е такая разновидность ссылок не допускается. Ассоциированный структурный тип таблицы, на строки которой указывают значения ЕЕЕ-типа, должен быть в точности тем же, что и гейегспсеб суре этого лег-типа. Но, конечно, можно объявить ЕЕР-тип, у которого гегегспсеа Суре ЯВЛЯЕтСя аССОцИ- ированным структурным типом подтаблицы, хотя самоссылающийся столбец этой подтаблицы необходимо наследуется от максимальной супертаблицы семейства таблиц.
Поддвржка согласованности ссылок Никакое ссылочное значение никогда не идентифицирует какую- либо строку, кроме той, с которой оно было ассоциировано с самого начала. Если эта строка удаляется, то значение ничего не идентифицирует и никогда не может быть связано с другой строкой. Из этого следует, что система должна каким-либо образом узнавать о том, идентифицирует ли данное ссылочное значение какую-то хранимую строку или ничего не идентифицирует (является висящей ссылкой).
Но как система может это узнать, не потратив множество ресурсов? Отчасти здесь может помочь раздел ЕСОРЕ. В этом разделе указывается одна таблица, в которой строки должны существовать для всех значений данного местоположения, типом 472 Лекция 1Я Язык базданных Яоы обьектные расши ения данных которого является некоторый НЕЕ-тип. (В будущих версиях стандарта Я~1., по всей видимости, будет разрешено указывать в разделе ясоре список имен типизированных таблиц или даже использовать некоторую конструкцию, означающую «все таблицы, ассоциированные с данным структурным типом».) Итак, если определяется столбеп таблицы, поле строчного типа или атрибут структурного типа, и типом этого местоположения является ееетип, то можно специфицировать раздел ЯСОНЕ.
Однако если такой раздел действительно указывается, то требуется также указать, нужна ли проверка ссылочных значений. Для этого служит конструкция ге1егепсе асоре с[тесК, определяемая следующим синтаксическим правилом: гебегепсе асора с[теса ::= ЕЕЕЕЕЕМСЕЯ ЛНЕ [ НОТ 1 СНЕСКЕР ОН РЕРЕТЕ гегегепа(а1 асс[оп ] Если указывается еееененсея лее нот снескеР или если раздел яСОЕЕ не задается, то в определяемом местоположении можно хранить любое ссылочное значение, независимо оттого, является ли оно значением самоссылающегося столбца какой-либо таблицы, на строку которой предположительно указывает ссылка.
В этом случае система не гарантирует, что ссылочное значение действительно указывает на строку (но, конечно, это значение должно быть значением правильного типа — Нее-типа указанного структурного типа). Если же указывается еееееенсея лее снескеР, то каждый раз при сохранении значения в определяемом столбце, поле или атрибуте система обращается к указанной в разделе ясоре таблице, чтобы убедиться в том, что в ней имеется строка, значение самоссылающегося столбца которой совпадает с сохраняемым ссылочным значением. Кроме того, если указывается еееененсея лее снеСкеР, то можно также указать ссылочное действие, которое должно выполняться при удалении строки, идентифицируемой ссылочным значением.
Как обычно (см. лекцию 12), возможными ссылочными действиями являются ееятетст, сляслое, яет НРРР и но лсттон. Если ссылочное действие явно не указывается, по умолчанию принимается НО ЛСТТОН. (Для поля строчного типа (дои туре) и атрибута структурного типа допускается только НО ЛСТТОН.) Заметим, что если раздел ясоре включается в определение атрибута структурного типа, то в конструкции со1цпп орг[спз столбца типизированной таблицы, соответствующего данному атрибуту, раздел ясОРЕ присутствовать не может — это считается синтаксической ошибкой.
473 Основы баз данных К рс Выборка данных из типизированных таблиц Приведем несколько примеров операций выборки данных из типизированных таблиц, а также кратко обсудим операции обновления таких таблиц. Для этого сначала определим структурные типы емр т, РКООКЛММКВ т и РКРТ т, а также соответствуюШие типизированные таблицы (упрошенный вариант). СКЕАТЕ ТУРЕ ЕМР Т АЯ ЕМР МАМЕ ЧАКСНАВ(20), кмр ВРлтк Рлтк, ЕМР ЯА1 ЯАЬАКУ, РЕРТ КЕГ (РЕРТ)) 1иятлмттлкьк иот Гтиль КЕГ 1Я ЯУЯТЕМ ГЕИЕКАТЕР 1ИЯТАИСЕ МЕТНОР аое КЕТРКИЯ РЕС1МА1 (3,1); СКЕАТЕ ТУРЕ РКОГВАММЕВ Т ВИРЕК ЕМР Т АЯ ( РК06 ТАИС ЧАКСНАК (10)) 1МЯТАИТ1АВ1 Е МОТ ГГИА1; скелте туРе РеРт т АБ ( РЕРТ ИО 1ИТЕОЕК, РЕРТ МАМЕ ЧАВСНАК(200), РЕРТ МИ6 КЕГ (ЕМР)) 1ИЯТАИТ1АВ1 Е КЕГ 1Я БУЯТЕМ ГЕМЕВАТЕР МОТ Г1ИАЬ) СВЕАТЕ ТАВЬЕ ЕМР ОГ ЕМР 'Г (КЕГ 1Б РЕРТ 1Р ЯУБТЕМ 6ЕМЕРАТЕР, РЕРТ Х1ТН ОРТ10ИЯ ЯСОРЕ РЕРТ); СРЕАТЕ ТАВ1 Е РКООВЛ)(МЕК ОГ РКООВАММЕК Т ВИРЕК ЕМР; СКЕАТЕ ТАВЬЕ РЕРТ ОГ РЕРТ 'Г (КЕГ 1Я ЕМР 1Р ЯУЯТЕМ 6ЕМЕРАТЕР, РЕРТ МИ6 И1ТН ОРТ10ИЯ ЯСОРЕ ЕМР); Следует отметить, что с типизированными таблицами можно работать, как с обычными таблицами'.
Поэтому, в частности, возможен следуюший запрос. * По крайней мере, в той же синтаксической форме. 474 Лекция 19 Язык баз данных ЯОЫ объектные расширения Пример 19.1. Найти имена всех служащих, размер заработной платы которых меньше 20000.00. ЯЕЬЕСТ ЕМР МАМЕ РКСМ ЕМР ЯНЕКЕ ЕМР ЯА1 < 20000.001 В соответствии с семантикой Б1 )Е:1999, при выполнении запроса из примера 19.1 сначала будет произведена выборка имен служащих, удовлетворяющих условию, из таблицы ЕМР, затем — из таблицы РКОСКАММЕК, и эти промежуточные результаты будут скомбинированы в окончательный результат путем применения операции объединения (1ЛМОН). Но предположим, что нас интересуют только те служащие, получающие зарплату, не превышающую 20000 руб., которые не являются программистами (пример 19.2).
Тогда можно применить формулировку запроса, в которой присутствует спецификация Омьу: ЯЕт ЕСТ ЕМР МАМЕ РКСМ ОИРУ (ЕМР) ЯНЕКЕ ЕМР ЯА1 < 20000.00; Естественно, в запросах к типизированным таблицам можно использовать ссылки. Пример 19.3. Найти имена и названия отделов, где работают служащие, размер заработной платы которых меньше 20000.00. ЯЕЕЕСТ ЕМР МАМЕ, РЕРТ -> ЭЕР МАМЕ РКСМ ЕМР ННЕКЕ ЕМР ЯАЬ < 20000.00; В Я;1Е:1999 операция «->» называется операцией разымеяования (к(еге~егелс(лд), но в обиходе ее можно считать операцией перехода по ссылке (в нашем примере Оерт ссылается на Оерт НАме). можно неформально трактовать ссылочные значения как указатели на строки типизированных таблиц. Может показаться неожиданным, что запрос из примера !9.3 выбирает значения из таблицы эерт, хотя в разделе РНОм этого запроса она даже не упоминается.