Введение в системы БД (542480), страница 37
Текст из файла (страница 37)
Мы же ладим ему следуюшее определение; строгий контроль типов имеет место, если каждое значение принадлежит какому-либо типу и при выполнении любой операции система проверяет, принадлежит ли каждый из операндов этой операции допустимому для нее типу. Рассмотрим, например, следующие выражения. Р.ИЕ10НТ ь БР.НТТ /* Вес детали плюс количество деталей */ РЛЕ16НТ * БР.()ТУ /* Вес детали, умноженный на количество деталей */ Первое выражение не имеет никакого смысла, поэтому система должна его отвергнуть. В~орое выражение имеет смысл — оно дает суммарный вес всех деталей конкретной поставки.
Таким образом, определяя операторы для веса и количества деталей (в сочетании), следует включить в определение оператор "", но нет необходимости определять оператор "ь". Ниже приводится еше один пример, на этот раз для операторов сравнения (в частности, для оператора равенства). РЛЕ16НТ "- БР.()ТТ Р.С1ТУ = Б.С1ТУ З В литературе типы иногда называют абстрактными типами данных.
Это делается для того, чтобы подчеркнуть различие между типом и его физической реализацией. Однако здесь данный термин использоваться не будет, поскольку зто предполагало бы существование других типов, не "абстрактных" в указанном смысле, тогда как мы считаем, что различать тип и его физическуюреализацию необходиио всегда. Глава 5. Домены, отношения и базовые переменные-отношения 153 И в этом случае первое выражение, в отличие от второго, смысла не имеет. Таким образом, оператор "=" для веса и количества деталей (в сочетании) определять наверняка не следует, тогда как для сравнения городов он, скорее всего, понадобитсяз.
(Здесь мы придерживаемся мнения, высказанного в 13.31 и состоящего в том, что для каждого типа должен быть определен оператор "=", поскольку всегда должна существовать возможность проверки, совпадают ли два заданных значения одного и того же типа.) Следует отметить тот факт, что выше ничего не было сказано о природе значений, составляющих тип данных. Фактически они могут быть произвольными.
Мы склонны считать, что они являются простейшими, как, например, числа или строки, однако ничто в реляционной модели не запрещает им иметь более сложный вид. Можно использовать домены, состоящие из аудио- и видеозаписей, карт, чертежей, архитектурных планов, представлений геометрических точек и т.д. Единственное требование, которому должны удовлетворять эти значения, следующее: манипулирование ими может осуществляться исключительно посредством операторов, определенных для рассматриваемого домена (физическая реализация должна быть скрыта). Вышесказанное имеет очень большое значение и очень часто понимается неправильно, поэтому мы выскажем эту мысль еше раз другими словами. Каждое значение имеет тии Каждое значение данных обязательно имеет некоторый тип.
Другими словами, если у — значение, то оно как бы обладает неким признаком, который гласит: "Я вЂ” целое число" или "Я вЂ” номер поставщика", или "Я вЂ” геометрическая точка". Заметьте, что по определению заданное значение обязательно принадлежит лишь одному типул и никогда не может изменить свой тип (отсюда следует, что разные типы данных никогда не пересекаются, т.е. не имеют общих значений). Каждый тип данных может быть либо скалярным, либо нескалярным. Нескалнрными являются все типы, явно определенные таким образом, что в них есть компоненты, видимые для пользователя. В частности, в этом смысле нескалярными являются типы отношений.
Например, отношение, представленное на рис. 5.1, принадлежит определенному типу и этот тип, несомненно, имеет видимые компоненты (а именно — атрибуты И, ойаМБ, ЗТАТ08 и СТО). Скалярные же типы, напротив, видимых пользователю компонентов не имеют. Подведем итоги, 1. В оставшейся части этого раздела все рассматриваемые типы будут скалярными, и поэтому, употребляя термин тип, мы будем подразумевать именно скалярный тип. З В отношении вопроса о толь какие операторы и для каких типов являются допустимыми, нами замечено, что исторически в большинстве изданий по базам данных, в том числе в нескольких первых иэданилл этой книги, рассматриваются операторы сравнения (">","=" и т.д) и не рассматриваются другие операторы, подобные """ и "х". Е За исключением тех случаев, когда имеет место поддержка наследования типов.
До главы э'9 эта вохможность рассматриваться не будет. 154 Часть П. Реляционная модель 2. Физическое представление заданного скалярного значения, т.е. заданное значение заданного скалярного типа, может быть произвольно сложным.
В частности, оно может быль составным (однако его компоненты не могут быть видимы пользователю). Например, при определенных обстоятельствах заданное скалярное значение может иметь физическое представление в виде массива стеков списков символьных строк. 3. Из-за того что скалярные типы не имеют видимых компонентов, их иногда называют инкапсулированными (скрытыми).
Также иногда используется термин атомарный тип. Однако мы предпочитаем не употреблять подобные термины, поскольку в прошлом из-за них возникало множество недоразумений (поспешим добавить, что и по нашей собственной вине). В частности, путаница возникает при разграничении модели и ее реализации, а также при разграничении типа данных н его представления.
4. Как вы вскоре убедитесь, скалярные типы имеют так называемые допуслпьиые представления, а допустимые представления„в свою очередь, обязательно имеют видимые компоненты. Обратите внимание на то, что в данном случае видимые компоненты являются компонентами не типа, а его допустимого представления.
Тип данных всегда остается скалярным в смысле приведенного выше определения. Определение типа ТУРЕ <иня типа> <возможное представлелле> ...; В качестве примера рассмотрим определения типов для базы данных поставщиков и деталей (см. рис. 3.9). ТУРЕ Я() ТУРЕ НАНЕ ТУРЕ Р() ТУРЕ СОЬОН ТУРЕ ))ЕУОНТ ТУРЕ ОТХ РОЯЯНЕР (СНАН) 1 РОБЯНЕР (СНАН) 1 РОЯБНЕР (СНАЯ) 1 РОЯЯНЕР (СНАН) РОЯЯНЕР (НАТ1ОНАЬ) 1 РОБЯНЕР (1НТЕОЕН) 1 Пояснения 1. Поскольку из главы 3 следует, что атрибут поставщиков БТАТОЯ и атрибут поставщиков и деталей С1ТУ определяетса с помощью встроенных типов, а не типов, определенных пользователем, определение типов для указанных атрибутов отсутствует. 2. Как мы уже видели, физическое представление типа скрыто от пользователя.
Соответственно приведенные выше определения типов не содержат никакой информации об их физическом представлении. Фактически эти представления должны задаваться как часть отображения "концептуальный-внутренний" (см. главу 2„раздел 2.6), Глава 5, Домены, отношения и базовые переменные-отношения 155 В этой книге мы часто будем использовать язык Тп1опа) Р (вернее, некоторую его версию), впервые применявшийся в главе 3 для иллюстрации излагаемых а ней идей. В общих чертах язык Тпгог!а! Р напоминает язык Рааса!. Мы будем знакомить вас с этим языком по мере его использования.
Первое, для чего он нам потребуется, — для получения средства определения собственных типов. Обязательным является наличие у каждого типа данных хотя бы одного допустимого представления по причине, рассматриваемой в следующем разделе. Например, значения типов Я)), НАНЕ, Р)) и СОЕОВ можно представить в виде строк символов, а значение типа ИЕ?ОНТ вЂ” в виде рационального числа. Замечание. В этой книге (следуя рекомендациям из [3.3)) вместо привычного названия встроенного типа ВЕАБ будет использоваться более точное название— ВАТ? ОКА?. 3.
Здесь принимаются очевидные синтаксические соглашения, суть которых состоит в следующем: неименованные допустимые представления наследуют имя соответствующих типов, а компоненты неименованных допустимых представлений наследуют имена соответствующих представлений. Например, единственное допустимое представление, определенное для типа ОТУ, также называется ОТУ; то же самое относится к единственному компоненту данного возможного представления. 4. При определении нового типа система делает в каталоге запись, содержащую описание этого типа (чтобы вспомнить некоторые детали, касающиеся каталогов, возвратитесь к разделу 3.6 главы 3). То же самое происходит при определении оператора (об этом рассказывается в двух следующих разделах).
5. Возможно, вы заметили, что в приведенных выше определениях типов не задаются фактические значения, составляющие конкретный тип. Зту функцию выполняют наложенные на тип ограничения (то, что находится в круглых скобках в приведенном выше примере описания типов), которые будут рассмотрены в главе 8. Если какой-либо тип данных больше не нужен, от него, конечно же, можно избавиться. ОВОР ТУРЕ <лия типа> В приведенном выше операторе параметр <иия типа> должен задавать имя типа данных, определенного пользователем, но не имя какого-либо встроенного типа. В результате выполнения этого оператора из каталога удаляется запись, описывающая рассматриваемый тип данных, после чего он перестает быть известным системе. Замечание.