С.Д. Кузнецов - Основы баз данных (1121716), страница 48
Текст из файла (страница 48)
ниже). Степенью строчного типа называется число его полей. Типы, определяемые пользователем Эта категория типов данных связана с объектными расширениями языка Б(.Н . Более подробно мы обсудим эту тему в заключительной лекции курса, а здесь для полноты картины приведем беглый набросок. ° Структурные типы (5~шсгнгег) Туред). Соответствующие возможности Я0(.: ) 999 позволяют определять долговременно хранимые, именованные типы данных**, включающие один или более атрибутов любого из допустимых в Б(.Н.
типа данных"*, в том числе другие структурные типы, типы коллекций, строчные типы и т. д. Стандарт 9.Н не накладывает ограничений на сложность получаемой в результате структуры данных, однако не запрещает устанавливать такие ограничения в реа- ' В тексте стандарта бОгк)999 используется термин алолутош пзм гуре. Следуя соглашениям предыдущего пункта, мы должны были бы использовать термин авовцмвме тцлм олрок. Но тогда уж точно возникла бы пушнина с типами символьных строк.
Конечно, можно бьшо бы радикально отказаться от использования термина смрока мабеицм и вернуться к кортелсом отвоюеаикъ Но, к сожалению, этого сделать нельзя, поксльку в Я)Е таблицы — это не совсем (а иногда и совсем не) отношения, а строки таблиц — не совсем (совсем не) кортежи. " Соответствующие определенна сохраняютсл как часть метаданных базы данных (другими словами, являются частью схемы базы данных).
"' Требуется, чтобы в определении структурного типа л использовались только те типы, которые были определены ранее. 224 Общее введение, типы данных и средства определения доменов Лекция 11 лизации. Дополнительные механизмы определяемых пользователями методов, функций и процедур позволяют определить поведенческие аспекты структурного типа. ° Индивидуальные типы (Юи((лс( Туре). Можно определить долговременно хранимый, именованный тип данных, опираясь на единственный предопределенный тип. Например, можно определить индивидуальный тип данных Рк1ск, опираясь на тип (зеС1м((ь (5, 21. Тогда значения типа ри1СЕ представляются точно так же, как значения типа ПЕС1МХЬ (5, 2).
Однако в ЯН.:1999 индивидуальный тип не наследует от своего опорного типа набор операций над значениями. Например, чтобы сложить два значения типа Р«1СК требуется явно сообщить системе, что с этими значениями нужно обращаться как со значениями типа ПКС1ММ. ( 5, 2 ) . Другая возможность состоит в явном определении методов, функций и процедур, связанных с данным индивидуальным типом.
Похоже, что в будущих версиях стандарта появятся и другие, более удобные возможности. Ссылочные типы Эта категория типов данных связана с объектными расширениями языка БО(., и мы снова отложим подробное обсуждение этого механизма до заключительной лекции курса и рассмотрим его здесь очень коротко. Обеспечивается механизм конструирования типов (ссылочных твидов), которые могут использоваться в качестве типов столбцов некоторого вида таблиц (типизированных таблиц). Фактически значениями ссылочного типа являются строки соответствующей типизированной таблицы.
Более точно, каждой строке типизированной таблицы приписывается уникальное значение (нечто вроде первичного ключа, назначаемого системой или приложением), которое может использоваться в методах, определенных для табличного типа, для уникальной идентификации строк соответствующей таблицы. Эги уникальные значения называются ссьиочнмии значениями, а их тип — ссылочным типом. Ссылочный тип может содержать только те значения, которые действительно ссылаются на экземпляры указанного типа (т.
е. на строки соответствующей типизированной таблицы). Средства определения, изменения определения и отмены определения доменов Как неоднократно упоминалось выше, при определении столбцов таблицы требуется явно указывать тип данных каждого столбца. Для этого можно использовать описанные выше средства спецификации типа. Но в БОЕ поддерживается и другой механизм — механизм доменов. Домен является долговременно хранимым, именованным объектом схемы базы 225 Основы баз данных Курс данных. Домены можно создавать (определять)„изменять (изменять определения) и ликвидировать (отменять определение). Имена доменов можно использовать при определении столбцов таблиц. Можно считать, что в Я;)] определение домена представляет собой вынесенное за пределы определения индивидуальной таблицы «родовое» определение столбца, которое можно использовать для определения различных реальных столбцов реальных базовых таблиц. В языке ЯЯ] обеспечиваются средства определения доменов, изменения и отмены существующих определений.
Определение домена Для определения домена в Я)(. используется оператор сееАТЕ ()онАТН. Общий синтаксис этого оператора следующий с]опзазц с]е(1пззбзоц::» СЕЕАТЕ ]ЮНАТ)( ((одзазп паве (АЯ] с]аса Гуре ( г(е(ац1г с]ег(п(г1оц ( с(оща1ц соцвсга(цс г]е11п(С1оп 11ве ] Здесь с]оюазп паве задает имя создаваемого домена'*, г(ага (урн есть спецификация определяющего типа данных.
В необязательных разделах дейац11 г(е(1пэзй1ОП И г(оща1п сопвгга1пь с]е(1п)гтоц 11зг специфицируются значение домена по умолчанию*** и набор ограничений целостности, которые будут применяться к любому столбцу, определенному на этом домене. Раздел г]е(ац11 с]ег)п111оп имеет вид ()ЕГА((ЬТ ( 11(ЕГа1 ( п11аЖс гццс(1оц ( Н((ЕЕ ]***« Здесь 111ега1 представляет любое допустимое литеральное значение определяющего типа домена, (((л,ь обозначает неопределенное значение, а п11аЖс (цпсг(оп может задаваться в одной из следующих форм: " Начиная с этого места мы булем приводить более или менее ючный синтаксис конструкциИ языка ЯЯ. (не злоупотребляя излишествами).
Без этого текст был бы менее точным и более объемным. Прописными буквами показываются «терминалы» — ключевые слова языка $9(.. " Здесь мы в первый раз сталкиваемся с именем объекта базы ланных. Не будем углубляться в детали, ио в общем случае имена объектов 5(зь-ориентированных баз данных имеют вид юя каталога. иня схемы. иня объекта.
Этот подход к именованию объектов базы данных позволяет независимо создавать объекты в разных схемах, не заботясь о том, чтобы эти обьекты имели разные простые имена. При использовании в операторе $()ь простого имени объекта система должна автоматически уточнить это имя, исходя из ндентиеикатора пользователя, от имени которого выполняется оператор, "* Это значение будет использоваться в качестве значения по умолчанию для любого столбца, определенного на данном домене, для которого не определено собственное значение по умолчанию (см. следующую лекцию).
"*' ( е1еиепг 1, ( е1 емец г з, ]...] е1 енес г „] означает, что в данной синтаксической конструкции должен присутствовать один и только один е1еиепс 1. 226 Лекция 11 Общее введение, типы данных и средства определения доменов ()ЯЕЕ СЕЕЕЕНТ ОЯЕЕ ЯЕЯЯ1ОИ ()ЯЕР, ЯУЯТЕМ ()ЯЕЕ СОЕЕЕИТ ВАТЕ С((НЕБИТ Т1МЕ СЕЕЕЕНТ Т1МЕЯТАМР* Если в операторе СЕЕАТЕ ООМА1Н значение по умолчанию не специфицируется, считается, что такого значения нет.
Однако позже к определению домена можно добавить раздел значения по умолчанию с помощью оператора Аьтее еомА1Н. Кроме того, этот оператор позволяет удалить раздел значения по умолчанию из существующего определения домена. Элемент списка с[ошатп сопвг га(пг с[е1(п(с1оп 1(вс имеет вид [СОНЯТВА1НТ сопя(гази( паше) СНЕГК (сонг)ЕГ(опа1 ихртеая(оп) Необязательный раздел сонвтеА1нт сопвсгаШс паше позволяет определить имя нового ограничения целостности. Если явное указание имени отсутствует, ограничению назначается имя, автоматически генерируемое системой. Что касается вида условного выражения, служащего собственно ограничением целостности, то в стандарте запрещается лишь прямое или косвенное использование в нем домена, в определение которою входитданное условное выражение.** Однако наиболее естественным (и наиболее распространенным) видом ограничения домена является следующий: СНЕСК ((гАБ([Е 1Н (11аг о1 оа1(г) ча1иев)) Такое ограничение запрещает появление в любом столбце, определенном на данном домене, любого значения определяющего типа, не входящего в список допустимых значений.
Примеры определений доменов В дальнейших примерах нам понадобятся определения нескольких доменов. Приведем их в этом подразделе. В примерах мы будем иметь де- ' Значение п(",агнс (спс зоп «вычисляется» а тот момент, когда требуется значение по умолчанию (обычно прн асталке а таблицу новой строки, значение соответствующего столбца которой явно не указано). Смысл сцввьнт зхтв, спвввнт ттнв и спвввнт ттиввсвн» очееилен. савв (или, что то же, спвввнт оввч), ввсзтон озвв и ятзтвн озвв задают идентификатор пользователя, от имени которого выполняется текущая транзакция, текущая сессия, и идентификатор операционной системы, а которой работает пользователь, соответственно.
В стандарте не определяется представление зтих идентификаторов, но а реализациях они обмчно представляются а виде символьных строк. *' Более подробно мы обсудим допустимые а ЯОБ виды условных яыракений а следующих лекциях. 227 Основы баз данных Курс ло с таблицами служащих (еме), отделов (Реет) и проектов (тно). каждый служащий обладает уникальным номером (ЕМР НО) и получает заработную плату (ЯАЬАну). Определим домены еме но и ЯАЬАну.