С.Д. Кузнецов - Основы баз данных (1121716), страница 96
Текст из файла (страница 96)
С формальной точки зрения индивидуальный тнп данных является частным случаем структурного типа данных. Обе разновидности ()ОТ определяются единым синтаксисом, который мы обсудим в следующих подразделах. В частности, ключевое слово утиль играет важную роль в определении структурного типа, указывая на тот факт, что этот тип может использоваться только для создания объектов, а не для порождения новых типов на основе механизма наследования. При определении индивидуальных типов механизм наследования не используется, и поэтому в определении любого индивидуального типа должно при- СутетВОВатЬ КЛЮЧЕВОЕ СЛОВО Р1НАЬ.ч ДаЛЕЕ, ПОСКОЛЬКУ ИидняндуаЛЬНЫй тип является частным типом структурного типа, лля индивидуального типа можно определять методы. В своих книгах главный редактор стандартов БОЕ Джим Мелтон постоянно подчеркивает семантическое сходство понятий индивидуально~о типа данных и домена в смысле БОБ ( лекция 11).
Более того, утверждается, что в следуюших версиях стандарта Б()Е использование доменов будет сначала объявлено нежелательным, а потом и вовсе будет запрещено. Но я полагаю, что сделать это совсем непросто. Напомним, что в случае использования ЯО(.-домена: (а) в определении домена указывается базовый встроенный тип данных и, возможно, ограничение допустимых значений, которое распространяется на любой столбец, определенный на данном домене; (Ь) для значений столбца, определенного на домене, допускаются все операции, разрешенные для базового типа. Естественно, эти возможности могут использоваться текущими пользователями стандарта БОЬ. В то же время в случае использования индивидуального типа данных: (а) в определении индивидуального типа указывается только базовый тип данных; если столбец определяется на индивидуальном типе данных, то для него обязательно придется специфицировать собственное ограничение целостности; ' Кстати, нс очень понятно, по каким причинам в стандарте ЯОЬ не поддерживается наследование для индивидуальных типов.
Конечно, этот механизм существенно более полезен дяя структурных типов, но его вполне можно было бы реализовать и для индивидуальных типов. 458 Язык баз данных 80Ы объектные расширения Лекция 19 (Ь) для значений столбца, определенного на индивидуальном типе данных, не допускаются операции соответствующего базового типа (если не использовать операцию явного приведения типов). Здесь явно имеются противоречия, для сглаживания которых требуется модифицировать понятие итщивидуального типа данных. Определение структурных типов Общий синтаксис оператора определения Ы)Т (индивидуального или структурного) определяется следующими правилами: [))зт с)е11п1с1оп ::= СЕЕАТЕ ТУРЕ [[Гзт паве яцЬгуре с1ацяе АБ гергеяепсас1оп ) [ 1пягапгуаЬ)е с1ацяе ) с[па11гу ге(егепсе суре ярес111саг(оп ) [ ге( саяТ орс)оп саяг орг)оп ) [ вегпос) ярес1[1саг)оп совва11яг Имя определяемого пользователем типа данных имеет, в общем случае, традиционную для Я)) трехзвенную структуру — нмя каталога.ммя схемы.ммя типа, Раздел подтипизации задается в следующем синтаксисе: яцЬгуре с1ацяе ::= [)И[)ЕЕ [)Гзт паве Если этот раздел присутствует в определении (ЛЭТ, то в нем указывается имя ранее определенного ИЭТ, атрибуты и методы которого будут наследоваться определяемым структурным типом.
Структурные типы, определяемые без использования наследования, называются максимальными сунернзинами (поскольку у любого из таких типов супертип отсутствует).* В определениях максимального структурного супертипа или индивидуального типа должен присутствовать раздел представления (АЕ): гергеяепсас1оп ::= ргес)е11пес) гуре [ассг)Ьцге с)е[1п1с1оп совва11яг) Если в разделе представления указывается имя предопределенного встроенного типа, то определяется индивидуальный тип. Указание спис- " Как уже отмечалось ранее, раздел подтипизапии может присутстао ааль только при опреле- лении структурного ГЛЗТ. 459 Основы баз данных ка определений атрибутов соответствует определению структурного типа. Заметим, что раздел представления может отсутствовать.
В этом случае должен присутствовать раздел подтипизации, и представление заново определяемого структурного типа полностью наследуется из определения структурного Ш)Т, имя которого указано после ключевого слова ОИОКВ. Определение атрибута структурного ппт Определение атрибута имеет следующий синтаксис: аггг(Ьпге с)ег1п(г(оп ::= асггТЬисе паше г)ага гуре [ гейегепсе еооре сЬео[с с1егаи1г с1апзе 1 [ со11аге с1аизе Имя определяемого атрибута должно отличаться от имен всех других атрибутов определяемого типа, включая имена атрибутов, наследуемых от супертипа, и имена атрибутов типа данных определяемого атрибута.
Тип данных может быть любым допустимым в КОЕ типом данных (включая КОНСтруИруЕМЫЕ ТИПЫ ЛКЛМ'а И НОХ, а тахжЕ ГЛ1т), КРОМЕ СаМОГО ОнрсдЕЛяемого структурного типа и его супертипов**. Для атрибута можно объявить значение по умолчанию. Если типом данных атрибута является встроенный тип данных, то значение атрибута объявляется в том же синтаксисе, что и значение столбца по умолчанию в определении таблицы (см.
лекцию 12). Если типом данных атрибута является ОРт (индивидуальный или структурный), тип КОХ или ссылочный тип (см. следующий пункт), то единственным допустимым значением по умолчанию является неопределенное значение (балл,ь). Если же типом данных атрибута является тип лпялу, то значением по умолчанию может быть ила. или пустое значение-массив (указывается как ллкйу [1). Для каждого определения атрибута, в котором типом атрибута является структурный тип, система автоматически генерирует пару методов, имена которых совпадают с именем атрибута.
Первый метод является наблюдапгелем (оггяел ег.). Он вызывается без явных параметров и выдает значение указанного атрибута в значении того структурного типа, к которому применяется. Второй метод является мугпагпоролг (пгигагог). Он вызывается с одним явным параметром — значением типа атрибута, применяется к А в стандарте зОызббз и ипьтгзят. *' Последнее ограничение является непонятным. Его можно обойти, например, следующим образом.
Пусть структурный тип т' опрелеляется как подтип типа т, и мы хотим включить в представление типа т' атрибут а типа т. Тогда предварительно определим тип т" как полтин типа та точности стем же представлением. Тогда ничто не помешает определить в представлении типа т' атрибут е типа т". 460 Лекция 19 Язык баз данных ЗОЫ объектные расширения некоторому местоположению (столбцу, переменной или параметру), где находится значение определяемого структурного типа, и этот вызов приводит к тому, что значение заменяется новым значением того же типа с измененным соответствующим образом значением данного атрибута. Присутствие в определении атрибута раздела ге1егепсе псоре с)гес)с возможно (и требуется) в том и только в том случае, когда типом определяемого атрибута является ссылочный тип.
Более подробно мы обсудим суть этой спецификации в следующем разделе. Пока лишь кратко заметим, что этот раздел указывает системе, должна ли она проверять, что каждое значение данного атрибута является ссылкой на существующий экземпляр указанного структурного типа, и должна ли система вызывать ссылочное действие при удалении экземпляра, на который ведет ссылка.а Можно определить инстанциируемый (гпз(апг(аа)е) или неинетанциируемый (паг!пзгап((аЫе) структурный тип: Тппсап~)а)у)е с1ацпе ::= 1ИЕТАНТ1АЕЬЕ НОТ 1ИЕТАИТ1АЕЕЕ Для неистанциируемого типа конструктор не определяется, и поэтому создать значение этого типа невозможно.а* Такие типы применимы только для определения инстанциируемых подтипов. Назначение неинстанциируемых типов состоит в моделировании абстрактных концепций, на которых основываются более конкретные концепции.
Неинстанциируемые типы могут быть типами атрибутов других структурных типов, типами столбцов, переменных и т. д. Однако в соответствующем местоположении всегда должно находиться либо значение инстанциируемого подтипа данного неинстанциируемого типа, либо неопределенное значение. При отсутствии явной спецификации по умолчанию тип считается инстанциируемым. Обязательный раздел Тзпа11ГУ указывает на возможность или невозможность определения подтипов определяемого структурного типа: * Мы вынуждены следовать терминологии стандарта З(е), которая иногда бывает довольно нечеткой. В частности, по отношению к структурным типам используются термины значение г'то)не) во вполне стандартном смысле; иесмонолозсение Гмуе) как расширенное понятие переменной (нечто, содер;кашее значение структурного типа); экземпляр (!тгонсе). Последний термин в объектной терминологии обычно используется в том же смысле, что объект класса.