Пытаясь понять корреляционное исчисление Tuple
В каких ситуациях вы бы использовали доменное реляционное исчисление над кортежным реляционным исчислением?
Например, эту проблему я решил с помощью корреляции кортежей:
Перечислите соавторов Джона Смита (авторов, которые были соавторами статьи с Джоном Смитом)
с этими отношениями: Авторы (authorID, name) и Authoring (articleID, authorID) Первичные и внешние ключи выделены жирным шрифтом.
{t: articleID, имя | ∈ a ∈ Автор ∃ au Авторство a.authorID = au.AuthorID ∧ a.name = 'Джон Смит' ∧ a.authorID = au.AuthorID}
Кроме того, как бы вы выразили различия между наборами в обоих? Я пытаюсь работать над такой проблемой, как:
Какой автор является соавтором по крайней мере 1 статьи с каждым автором (без агрегатных функций).
1 ответ
В каких ситуациях вы бы использовали доменное реляционное исчисление над кортежным реляционным исчислением?
Предполагая, что у вас есть доступ к одним и тем же операторам значений столбцов, любое выражение реляционного исчисления кортежа, исчисления предикатов домена или реляционной алгебры может быть преобразовано в одно из другого. Вы можете использовать любой из них в данной ситуации.
Выражение исчисления кортежей
{ t < c,... > | ∃ u ∈ U : ... t.c ... u.x ...}
описывает тот же набор, что и выражение для исчисления домена
{ < c,... > | ∃ x,... : U(x,...) ∧ ... c ... x ...}.
"U" называет данное отношение, а "u" - произвольный кортеж из него, а "x,..." - его атрибуты. "U(x,...)" называется атомарной формулой. "∃" называется квантификатором и означает "существует" или "для некоторых".)
Итак, чтобы преобразовать исчисление кортежей в исчисление предметной области:
- Удалите имя для кортежа в результате.
- Замените количественное имя кортежа и имя отношения количественным списком имен его атрибутов и атомарной формулой, использующей их.
- Удалить точечные имена кортежей.
И преобразовать исчисление домена в исчисление кортежей:
- Вставьте имя для кортежа в результате.
- Переставьте так, чтобы каждый количественный список атрибутов содержал ровно атрибуты одного отношения, и за ним следует атомарная формула с этим отношением.
- Замените количественный список имен атрибутов отношения и атомарную формулу, используя их, новым неким количественным именем кортежа и именем отношения.
- Вставьте точечные имена кортежей перед их атрибутами.
Кроме того, как бы вы выразили различия между наборами в обоих?
Выражение в любом исчислении описывает набор кортежей. Разность множеств A \ B - это набор кортежей, которые находятся в наборе A, но не находятся в наборе B. Если отношение R содержит кортежи, где expressionR, и отношение S содержит кортежи, где expressionS, то R \ S = R MINUS S = кортежи, где expressionR Expression ~ выражения S.
(Это может помочь вам прочитать это о построении запросов с использованием естественного языка, затем о преобразовании в исчисление предметной области и преобразовании в реляционную алгебру. Оно начинается с параметризованного оператора в качестве значения каждого данного отношения / таблицы. Затем он находит комбинацию из этих выражений заданный запрос. Затем он преобразует это выражение в сокращение, которое похоже на исчисление домена. (И, как и стандартная логика предикатов, также называемое исчисление предикатов). Чтобы получить реляционное исчисление кортежей, вы преобразуете исчисление домена в исчисление кортежей, как описано выше. В SQL JOIN ON, CROSS JOIN и "," очень похожи на исчисление кортежей, в то время как JOIN USING и NATURAL JOIN похожи на комбинацию как исчисления доменов, так и исчисления кортежей.)