Классика баз данных - статьи

       

В upper должны найтись либо




Таб. 4. Правило 2 – DISTPU

В upper должны найтись либо условие quantifier-nodup-condition, либо условие one-tuple-condition, которые выдерживаются для всех F-квантификаторов этого блока и ассоциированных с ними предикатов. Если это неверно для некоторого F-квантификатора, то в проекции декартова произведения нижних блоков будут иметься дубликаты, и в upper требуется их удалять; если для каждого F-квантификатора верно хотя бы одно из двух условий, то дубликаты в проекции декартова произведения содержаться не будут.

Отметим «локальность» этого правила – при его написании мы не должны заботиться о типе нижних блоков, нас занимают только F-квантификаторы над этими блоками.

Правило 3. Distinct Pushdown From/To (проталкивание Distinct из/в)

В этой паре правил (таб. 5) блок информирует свои нижележащие блоки о том, что от них не требуется удаление дубликатов. Это делается путем «проталкивания» атрибута distinct из этого блока в его нижележащие блоки. Такое действие может предохранить нижние блоки от потребности сортировки или хэширования для удаления дубликатов, а также может позволить применять к нижним блокам правила, которые могут вводить дубликаты (например, описываемое ниже правило EtoF).



Таб. 5. Правило 3 – DISTPDFR/DISTPDTO

Для варианта DISTINCT операций над множествами (UNION, INTERSECT и EXCEPT) правило DISTPDFR является корректным по причине семантики удаления дубликатов в этих операциях. Операции над множествами с DISTINCT определяются как удаляющие дубликаты из всех своих операндов до какой-либо дальнейшей обработки [ISO91]. Так что эти блоки будут игнорировать любые дубликаты, производимые нижележащими блоками, и об этом можно безопасным образом сигнализировать, проталкивая DISTINCT сквозь квантификаторы.

В случае блока SELECT с body.distinct = PERMIT нас не беспокоит аспект дубликатов. Чтобы увидить корректность правила DISTPDFR для блока SELECT с body.distinct = ENFORCE, достаточно заметить, что любой кортеж, происходящий из такого блока, является конкатенацией кортежей t1, . . ., tn из n входных источников (под F-квантификаторами) блока.

Содержание  Назад  Вперед