Реляционная алгебра в том виде, в котором она была изначально определена, не поддерживает прямого сравнения двух отношений (например, проверки их равенства или того, является ли одно из них подмножеством другого). Одно из следствий этого упущения состоит в том, что некоторые запросы выражаются весьма неуклюже. Однако это упущение легко исправить. Сначала определим новый вид условия - реляционное сравнение - со следующим синтаксисом:
expression θ expression
Здесь expression- это в обоих случаях выражения реляционной алгебры, представляющие совместимые по типу отношения, а θ - один из следующих операторов сравнения:
= (равно)
≠ (не равно)
≤ (подмножество)
< (собственное подмножество)
≥ (надмножество)
> (собственное надмножество)
Замечание. Возможно, выбор обозначений операторов не совсем удачен, так как отрицанием утверждения "А - собственное подмножество В" не будет "А - надмножество В" (т.е. отношения "<" и "≥" не противоположны). Однако в этой книге используются именно такие обозначения.
|
|
Приведем примеры.
1. S [ CIТY ] = Р [ CIТY ]
Значение. Совпадает ли проекция отношения S по атрибуту CIТY с проекцией отношения Р по атрибуту CIТY?
2. S [ S# ] = SP [ S#]
Значение (несколько перефразированное). Есть ли поставщики не поставляющие деталей?
Этот новый вид условия допустим для использования в операциях выборки (выборки в алгебраическом смысле).[9] Например:
S WНERE ((SP REMAМE S# AS Х) WНERE Х = S#) [ P# ] = Р [ P# ]
При вычислении этого выражения получаем отношение, содержащее кортежи поставщиков, поставляющих все детали.
Пояснения:
n Для данного поставщика выражение
((SP RENAМE S# AS Х) WНERE Х = S#) [ Р# ]
дает множество номеров деталей, поставляемых этим поставщиком.
n Затем это множество номеров деталей сравнивается с множеством всех номеров деталей. Если эти два множества совпадают, то соответствующий кортеж поставщика заносится в результат.
Конечно, можно использовать сокращение МAТCНING, представленное в разделе операции расширения, тогда общее выражение упростится так:
S WНERE (МAТCНING SP) [ Р# ] = P [ P# ]