Зачем нужны квантификаторы в реляционном исчислении кортежей?
Зачем нужны квантификаторы в реляционном исчислении кортежей?
Допустим, у меня есть это утверждение:
{S.sname | S в Студент и (существует G в классе)(Ss# = Gs#)};
Почему я не могу просто использовать это вместо этого?
{S.sname | S в ученике и G в классе и Ss# = Gs#};
1 ответ
Запросы возвращают одно и то же значение. Но во втором примере вы также можете попросить G.grade
студента, тогда как в первом вы не можете. Правая часть выражения Tuple Relational Calculus описывает набор кортежей, из которых сохраняются только атрибуты с левой стороны. Здесь два выражения с правой стороны описывают различные наборы кортежей, но проекция с левой стороны оставляет одинаковое значение от обоих.
Разница между r IN R AND EXISTS s IN S (
etc
)
r IN R AND s IN S AND
etc
является то, что отношение, описываемое первым, имеет только атрибуты R
тогда как отношение, описанное вторым, имеет атрибуты R
& S
,
Предположим, какое-либо отношение T
с атрибутами ...
содержит строки, где какое-то выражение T(...)
держит. затем <...> IN T
если и только если T(...)
,
Тогда мы можем описать два вышеупомянутых отношения как кортежи, удовлетворяющие (соответственно) R(...) AND EXISTS
attributes in S & etc but not in R
(S(...) AND
etc
)
R(...) AND S(...) AND
etc
Это обозначение (более или менее) называется предметным реляционным исчислением.
Предположим, мы определили следующие операторы отношений: PROJECT
some attributes of T
T
содержит строки где EXISTS
other attributes of T
T(...)
T NATURAL JOIN U
содержит строки где T(...) AND U(...)
Тогда мы можем описать два вышеупомянутых отношения как кортежи в (соответственно) R NATURAL JOIN PROJECT
attributes in S & etc also in R
(S NATURAL JOIN
etc
)
R NATURAL JOIN S NATURAL JOIN
etc
Это обозначение называется реляционной алгеброй.