Введение в системы БД (542480), страница 38
Текст из файла (страница 38)
Для простоты будем считать, что оператор ОВОР ТУРЕ не выполняется, если удаляемый тип данных в текущий момент где-либо используется, например если на основе этого типа определен атрибут некоторого отношения. Допустимые представления Для того чтобы продемонстрировать важность понятия "допустимое представление"„ рассмотрим несколько более сложных примеров. ТУРЕ Р01НТ I* геометрические точки */ РОББВЕР САВТЕЯ1АН ( Х ВАТ?ОНА?, У ВАТ?ОИАЬ ) РОЯЯВЕР РОЗДАВ ( В ВАТ?ОНАЕ, ТНЕТА ВАТ?ОНАА ) В первую очередь, следует отметить, что тип РО?МТ имеет два разных допустимых представления, САВТЕЯ?АН и РОБА, отображающих тот факт, что точку на плоскости можно задать либо в декартовых, либо в полярных координатах.
(Безусловно, физическое представление этого типа в конкретной системе на самом деле может быть выполнено в декартовых координатах, в полярных координатах или посредством некоторого ыь Часть П. Релиз(ионная модель совершенно иного метода.) Каждое из этих представлений, в свою очередь, имеет по два компонента. Обратите внимание на то, что в отличие от предыдущего примера здесь явно задаются имена как допустимых представлений, так и их компонентов. При каждом объявлении допустимого представления автоматическиз определяются два более или менее очевидных оператора. ° Оператор выбора (зе)есгог) (с тем же именем, что и имя допустимого представления), который предоставляет пользователю средство задания или выбора значения рассматриваемого типа, осуществляемого посредством присваивания значений каждому компоненту данного допустимого представления.
° Набор операторов ТНЕ (по одному оператору для каждого компонента допустимого представления), обеспечивающих доступ к соответствующему компоненту данного допустимого представления. Рассмотрим на примере использование оператора выбора и оператора ТНЕ для типа Р01НТ. /* Задает точку с координатами х = 5.0, у = 2.5 «/ /* Задает точку с координатами х = ХХХ, у = УУУ "/ /* Здесь ХХХ и УУУ вЂ” перемвннме типа НАТ10НАЬ */ /* Задает точку с г = 2.7 и Х)зеХа = 1.0 */ /* Возврадавт координату х точки Р */ /* Здесь Р— переменная типа Р01НТ «/ /" Возврадает координату г точки Р "/ САНТЕЯ1йН ( 5.0, 2.5 ) САНТЕЯ1йН ( ХХХ, 111 ) РОЬАЕ ( 2.7, 1.0 ) ТНЕ Х ( Р ) ТНЕ й ( Р ) Замечание.
Очевидным является тот факт, что оператор выбора — это обобщение уже знакомого нам понятия литерал ()!гега!). Для того чтобы увидеть, как все вышесказанное работает на практике, будем считать, что физическим представлением значения типа Р01НТ являются фактические декартовы координаты точки (хотя в общем случае физическое представление может быть произвольным). Кроме того, допустим, что для описания этого физического представления системой предоставляются специальные защищенные операторы (выдвленные курсивом), которые затем будут использованы определителем типа для реализации операторов выбораь САЕТЕЯ1АН и РОЬАЕ, как, например, показано ниже. ОРЕНАТОЕ САНТЕЯ1АН ( Х НАТ10НАЕ, 1 ЕАТ10НАЬ ) НЕТОЕНЯ ( Р01НТ ) ВЕ01Н! Чйй Р РО1НТ! Х-компонент физического предствнлення Р:= Х ; У-компонент физического представления Р:= 1 ; Глава 5. Домены, отношения и базовые переменные-отношения 157 З Здесь слово "автоматически" означает следующее.
Ва-первы», кта бы ии апрвдвзлл дапугтимав предгн~авление /реачьиый пальзаватгль ичи систвма), ан такзюв атвечает за апредвленив гаатвелютвуюи!и» аператарав. Ва-втары», да тала лзамента, пока не будут апредилены указанныв аператары, процесс определения гаатветтпвующега допустимого предвз~авления считать завершенным нельзя. В Очевидно, чта определитель «пипа является игключенигм из общего правила, гласящего, чта пользователи не осведомлены а физическим представлении типа. КЕТОКН ( Р ) ЕНО ею ОРекйток; ОРЕВАТОК РОЬАК ( К КАТ10НАЬ, ТНЕТА ВАТ10НАЬ ) КЕТОВНЯ ( Р01НТ ) Ветокн ( сйктея?йн ( к * соя ( тнетй ), К * Я1Н ( ТНЕТА ) ) ) ЕНО ОРЕКАТОК Обратите внимание на то, что при определении оператора РОЬАВ используется оператор выбора САВТЕЯ? йН, а также встроенные операторы Я1Н и СОЯ.
Оператор РОЬАВ можно определить и по-другому, непосредственно с помошью зашишенных операторов. ОРЕКАТОК РОЬАК ( К КАТ?ОНАЬ, ТНЕТА КАТ?ОНАЬ ) ВЕТОВНЯ( Р01НТ ВЕО?Н; '»АК Р Р01НТ Х-компонент физического представления Р:= В ' СОЯ ( ТНЕТА ) Х-компонент физнчесхого представления Р:= В * Я1Н ( ТНЕТА ] КЕТОВН ( Р ) ! ЕНО ЕНО ОРЕВАТОК ) Зашишенные операторы используются также определителем типа для реализации необходимых операторов ТНЕ . ОРЕКАТОК ТНЕ Х ( Р Р01НТ ) КЕТОКНЯ ( КАТ10НАЬ ) ВЕТУКН ( Х-компонент физического представления Р ) ЕЮ ОРЕВАТОК ОРЕКАТОК ТНЕ Х ( Р Р01НТ ) КЕТОКНЯ ( Вйт?ОНА1 ) ) КЕТОКН ( Х-компонент физического представления Р ) ЕЮ ОРЕКАТОК ОРЕКАТОК ТНЕ К ( Р Р01НТ ) КЕТОКНЯ ( КАТ10НйЬ ) КЕТОКН ( ЯОКТ ( ТЕЕ Х ( Р ) *» 2+ ТНЕ Х ( Р ) ** 2 ) ) ) ЕЮ ОРЕКАТОК ) ОРЕКАТОК ТНЕ ТНЕТА ( Р Р01НТ ) КЕТОКНЯ ( КАТ?ОНАЬ ) ) кетокн ( Акстйн ( тне х ( Р ) / тне х ( Р ) ) ) ) ЕНО ОРЕВАТОК ) Здесь при определении операторов ТНЕ В и ТНЕ ТНЕТй используются операторы ТНЕ Х и ТНЕ Х, а также (встроенные по предположению) операторы ЯОКТ и АКСТАН.
Операторы ТНЕ К и ТНЕ ТНЕТй также можно определить непосредственно в терминах защишенных операторов. Предлагаем читателю сделать это самостоятельно в качестве упражнения. На этом наше пространное обсуждение типа Р01НТ можно считать завершенным. Однако следует понимать, что все вышесказанное применимо и к более простым типам, например к таким, как тип ОТХ. Вот несколько примеров использования оператора выбора для этого типа. 158 Часть 11. Реляционная модель ОТУ (1ОО) ()ТУ (()) ОТУ ( ( 01 - 02 ) * 2 ) Операторы ТНЕ этого типа могут использоваться следуюшим образом. ТНЕ ОТУ ( О ) ТНЕ ОТУ ( ( 01 - 01 ) " 2 ) Отметим, в частности, что, поскольку каждое значение всегда принадлежит какому-либо типу, совершенно некорректно говорить, например, что количество деталей определенной поставки равно 100.
Количество деталей — это значение типа ОТУ, а не 1ВТЕОЕК) В этом случае более правильно было бы сказать, что количество деталей равно ()ТУ(100), а не просто 100. В неформальном контексте мы часто не заботимся о такой точности и употребляем число 100 как удобное сокрашение для оператора выборки ОТУ(100)т. В частности, подобные сокращения использовались на рис. 3.8 (база данных поставшиков и деталей) и на рис. 4.5 (база данных поставщиков, деталей и проектов). В завершение приведем пример определения типа ЫВЕБЕО (отрезок). ТУРЕ ЫВЕБЕО РОЯЯВЕР ( ВЕО1Н РОУД, ЕВО РОУНТ ) ) Допустимые представления можно, конечно же, определять не только в терминах встроенных типов (как во всех предыдущих примерах), но и с помощью типов, определенных пользователем, так как это сделано в данном случае. Определение операторов В этом разделе особое внимание будет уделено определению операторов.
Для этого рассмотрим еше несколько примеров. В первом примере определяется пользовательский оператор лля встроенного типа ВАТ10ИАЬ. ОРЕВАТОВ АВЯ ( Е ВАТ10ВАЬ ) КЕТОКНБ ( ВАТ10НАЬ ) ) ВЕТОВВ(САБЕ инен 8 > 0.0 тней э8 ИНЕИ Е < 0.0 ТВЕН -Е ЕКР САБЕ ) ) БИО ОРЕВАТОК ) Оператор АВЯ (молуль числа) определен для одного параметра 8 типа ВАТ10НА1 и возвращает значение того же типа (другимн словами, такое выражение, как АВБ (АИТ1- АВТ2 ), принадлежит типу ВАТ10ИАЬ). 7 В контексте языка БОЛ мы делаем то же самое, ло по другой причиие, о именно — потому, чпю в языке Бйь' ие поддерживаютсл (пока) типы, определенные пользователем (см.
приложекие БА Глава 5. Домены, отношения и базовые переменные-отношения 159 В следующем примере для определения оператора 01ЯТ (вычисления расстояния между двумя точками) применяются типы данных, установленные пользователем. ОРЕКАТОК 01ЯТ ( Р! Р01НТ, Р2 Р01НТ ) КЕТОККЯ ( БЕНСТН ) КЕТОКН ( Н1ТН ТНЕ Х( Р! ) АЯ Х! ТНЕ Х( Р2 ) АЯ Х2 ТНЕ Х( Р! ) АЯ Х! ТНЕ Х( Р2 ) АЯ Х2: АЕНЯТН ( ЯОКТ ( ( Х! — Х2 ) *" 2 + ( Х! - Х2 ) ** 2 ) ) ) ) ЕНР ОРЕКАТОК ) Здесь предполагается, что БЕННЕТŠ— это определенный пользователем тип с допустимым представлением КАТ10НА(.
Обратите внимание на то, что для использования в соответствующих выражениях сокращенных имен употребляется предложение Н1ТН. В следующем примере рассмотрен оператор равенства "=" для типа Р01НТ. ОРЕКАТОК ЕО ( Р! Р01НТ, Р2 Р01НТ ) КЕТОКНЯ ( ВООЬЕАН ) КЕТОКН ( ТНЕ Х ( Р! ) = ТНЕ Х ( Р2 ) АНО ТНЕ Х ( Р! ) = ТНЕ Х ( Р2 ) ) ) ЕНО ОРЕКАТОК > Обратите внимание, что в выражении оператора КЕТБКН используется встроенный оператор "=" для типа КАТ10НА1,. Далее с целью упрощения будем считать, что обычное инфиксное обозначение "=" используется для оператора равенства (для всех типов, в частности и для типа Р01НТ).
Практическое определение данного инфиксного обозначения рассматриваться не будет, поскольку это всего лишь вопрос синтаксиса. Оператор "<ь для типа ЦТХ определяется следующим образом. ОРЕКАТОК ЬТ (О! 0ТХ, 02 ОТХ ) КЕТУКНЯ ( ВОГНАН ) КЕТЛЕ ( ТНЕ ОТХ ( ()1 ) < ТНЕ ()ТХ ( ()2 ) ) ЕНО ОРЕКАТОК Здесь в выражении оператора КЕТОКН используется встроенный оператор "<" для типа 1НТЕСЕК. И опять же, с этого момента и далее будем считать, что обычное инфиксное обозначение "<ь используется для этого оператора по отношению ко всем "упорядоченным" типам, каковым, в частности, является и тип ОТХ.