Главная » SQL, Базы данных » ОБОБЩЕНИЕ РЕЛЯЦИОННЫХ ОПЕРАТОРОВ

0

В предыдущем разделе была приведена следующая формулировка запросав.

PACK

( ( UNPACK S_DURING { S#, DURING } ON DURING ) MINUS

( UNPACK SP_DURING { S#, DURING } ON

DURING ) ) ON DURING

Теперь необходимо отметить, что, как оказалось, выражения, подобные этому (включающие целый ряд распаковок, за которыми следует обычная  реляционная операция, затем снова распаковка), так часто требуются на практике, что приобрела большую значимость идея определения сокращения для этих  выражений (здесь речь идет о дальнейшем сокращении, поскольку, как  следует из приведенного выше описания, сами эти выражения уже по сути  являются сокращениями!). Безусловно, благодаря такому сокращению выражения должны стать намного короче. Более того, применение сокращенной  формы  записи  открывает  возможность  повышения  производительности  следующим образом: если в выражении применяются длинные интервалы с большой степенью детализации, то выходные данные операции распаковки могут стать гораздо более объемными по сравнению с входными, а если бы системе действительно пришлось материализовать результат такой распаковки, то могло бы оказаться,  что запрос "выполняется бесконечно долго" или требует слишком большого объема памяти. В отличие от этого, если все требования к обработке данных выражены в виде одной операции, то оптимизатор получает возможность выбрать наиболее эффективную реализацию, которая, в частности, не требует материализации распакованных промежуточных результатов.

Поэтому, исходя из изложенных выше пожеланий, определено следующее выражение.

USING   (   ACL   )    ◄  rl   MINUS   r2   ►

Это выражение является сокращенным обозначением для такого выражения.

PACK

( ( UNPACK rl ON ( ACL ) ) MINUS ( UNPACK r2 ON ( ACL

) ) ) ON ( ACL )

Здесь rl и r2 — реляционные выражения, обозначающие отношения одного и того же типа, a ACL — разделенный запятыми список имен атрибутов, в котором каждый указанный атрибут, во-первых, имеет некоторый интервальный тип, и,  во-вторых, присутствует в обоих отношениях. Из этого следуют приведенные ниже выводы.

1.         Если не указано иное, то определенный выше оператор будет именоваться просто как  "U_разность"   (U—  сокращение  от  USING),  ИЛИ  ДЛЯ   краткости   просто U_MINUS.

2.         Круглые скобки, в которые заключен разделенный запятыми список имен атрибу тов в спецификации USING, могут быть опущены, если такой список содержит только одно имя атрибута.

Примечание. Это соглашение относится ко всем сокращениям "U_", которые будут определены в данной главе, поэтому мы не будем его обусловливать в каждом случае.

3.                                      В каждом рассматриваемом в данном разделе контексте, в котором может появ

ляться спецификация USING, затененные концы стрелок, "◄ и "►", служат для указания начала и конца выражения, к которому применяется спецификация

USING.

4.         В отличие от обычного оператора MINUS, оператор UMINUS может вырабатывать результат, имеющий большую кардинальность по сравнению с его левым операндом! Например, допустим, что отношения r 1 и r 2 определены следующим образом.

В таком случае применение выражения USING  A  ◄  rl  MINUS  r2  ► приводит к получению следующего результата.

PACK                                                                                                                                                                                                                                                ‘ ( ( UNPACK rl ON ( ) ) MINUS ( UNPACK r2 ON (

) ) ) ON ( )

Теперь напомним, что, как указано в предыдущем разделе, оба выражения, UNPACK r ON () и PACK r ON (), сокращаются просто до r. Поэтому общее  выражение сокращается до следующего выражения.

rl  MINUS  r2

Иными словами, обычная реляционная операция MINUS фактически  представляет собой просто частный случай операции UMINUS! Поэтому, если мы переопределим синтаксическую структуру обычного оператора MINUS следующим образом:

[   USING   (   ACL   )    ]    ◄  <relation  exp>  MINUS  <relation  exp>  

Глава 23. Хронологические базы данных                                        951 и разрешим исключать спецификацию USING (а также затененные концы стрелок, " ◄“ и "►", обозначающие начало и конец остального выражения) тогда и только тогда, когда список ACL пуст, то нам больше не потребуется вообще вести речь о каком-то специальном операторе "U_MINUS", поскольку все вызовы оператора MINUS фактически становятся вызовами оператора U_MINUS и появляется возможность обобщить смысл оператора MINUS соответствующим образом.

Аналогичные замечания относятся ко всем другим реляционным операторам, а также к реляционным сравнениям, поскольку в любом случае обычный реляционный оператор по сути является просто частным случаем соответствующего оператора "U_", в котором спецификация USING вообще не содержит атрибутов,  и поэтому можно позволить себе исключить эту спецификацию (а также затененные концы стрелок, обозначающие начало и конец остального выражения). Иначе говоря, все операторы "U_" являются просто непосредственными обобщениями своих обычных аналогов. Поэтому больше вообще нет никакой необходимости явно упоминать операторы "U_"  как таковые (и эти операторы действительно больше не будут применяться, кроме как время от времени, для более четкого обозначения понятия, о котором идет речь); вместо этого достаточно лишь признать, что обычные операторы допускают, но не требуют указания некоторого дополнительного операнда, когда они применяются  к отношениям с интервальными атрибутами. Поэтому автор просит читателя обратить особое внимание на то, что до конца этой главы все ссылки на  реляционные операторы и все ссылки на реляционные сравнения относятся к их обобщенным версиям (если явно не указано иное). Но в качестве пояснения  иногда  по мере необходимости будут явно использоваться уточнители  "обычный" (или классический) и "обобщенный" при упоминании  соответствующих операторов и сравнений; как уже было сказано, по той же причине иногда будет также явно использоваться уточнитель "U_" .

Источник: Дейт К. Дж., Введение в системы баз данных, 8-е издание.: Пер. с англ. — М.: Издательский дом «Вильямс», 2005. — 1328 с.: ил. — Парал. тит. англ.

По теме:

  • Комментарии