Четкое объяснение "тета-соединения" в реляционной алгебре? - PullRequest
11 голосов
/ 27 сентября 2011

Я ищу четкое, базовое объяснение концепции тэта-соединения в реляционной алгебре и, возможно, пример (возможно, с использованием SQL), чтобы проиллюстрировать его использование.

Если я правильно понимаю, тэта-соединение является естественным соединением с добавленным условием. Итак, тогда как естественное соединение обеспечивает равенство между атрибутами одного и того же имени (и удаляет дубликат?), Тета-соединение делает то же самое вещь, но добавляет в состоянии. Есть ли у меня это право? Любое четкое объяснение, в простых терминах (для нематематика) будет с благодарностью.

Кроме того (извините, что просто добавлю это в конце, но это как-то связано), может кто-нибудь объяснить важность или идею декартового произведения? Я думаю, что упускаю что-то в отношении основной концепции, потому что мне кажется, что это просто повторение базового факта, то есть, что набор из 13 X набор из 4 = 52 ...

Ответы [ 4 ]

12 голосов
/ 27 сентября 2011

Оставляя SQL на мгновение ...

Реляционный оператор принимает одно или несколько отношений в качестве параметров и приводит к отношению. Поскольку отношение не имеет атрибутов с повторяющимися именами по определению, реляционные операции тета-соединение и естественное соединение «удаляют дубликаты атрибутов». [Большая проблема с размещением примеров в SQL для объяснения операций отношений, как вы и просили, состоит в том, что результат запроса SQL не является отношением, потому что, среди других грехов, он может иметь повторяющиеся строки и / или столбцы.]

Операция реляционного декартового произведения (приводит к отношению) отличается от набора декартовых произведений (приводит к набору пар). Слово «декартов» здесь не особо полезно. На самом деле Кодд назвал своего примитивного оператора «продуктом».

В действительно реляционном языке В учебном пособии D отсутствует оператор продукта, и продукт не является примитивным оператором в реляционной алгебре, предложенной соавтором учебного пособия D, Хью Дарвен **. Это происходит потому, что естественное объединение двух отношений без общих имен атрибутов приводит к тому же отношению, что и произведение тех же двух отношений, то есть естественное объединение является более общим и, следовательно, более полезным.

Рассмотрим эти примеры (Учебное пособие D):

WITH RELATION { TUPLE { Y 1 } , TUPLE { Y 2 } , TUPLE { Y 3 } } AS R1 ,
     RELATION { TUPLE { X 1 } , TUPLE { X 2 } } AS R2 :
R1 JOIN R2

возвращает произведение отношений, то есть степень два (то есть два атрибута, X и Y) и мощность множества 6 (2 x 3 = 6 кортежей).

Однако,

WITH RELATION { TUPLE { Y 1 } , TUPLE { Y 2 } , TUPLE { Y 3 } } AS R1 ,
     RELATION { TUPLE { Y 1 } , TUPLE { Y 2 } } AS R2 :
R1 JOIN R2

возвращает естественное объединение отношений, то есть степень единица (то есть установленное объединение атрибутов, дающих один атрибут Y), и количество элементов 2 (то есть удалены повторяющиеся кортежи).

Я надеюсь, что приведенные выше примеры объясняют, почему ваше утверждение "что набор из 13 X набор из 4 = 52" не совсем корректно.

Точно так же, Учебное пособие D не включает тета-оператора соединения. Это в основном потому, что другие операторы (например, естественное соединение и ограничение) делают его ненужным и не очень полезным. Напротив, примитивные операторы Кодда включали продукт и ограничение, которые можно использовать для выполнения тэта-соединения.


В SQL есть явный оператор продукта с именем CROSS JOIN, который заставляет результат быть продуктом, даже если он влечет за собой нарушение 1NF путем создания повторяющихся столбцов (атрибутов). Рассмотрим SQL, эквивалентный последнему примеру Tutoral D:

WITH R1 AS (SELECT * FROM (VALUES (1), (2), (3)) AS T (Y)), 
     R2 AS (SELECT * FROM (VALUES (1), (2)) AS T (Y))
SELECT * 
  FROM R1 CROSS JOIN R2;

Возвращает табличное выражение с двумя столбцами (а не одним атрибутом), которые называются Y (!!) и 6 строками, т. Е. This

SELECT c1 AS Y, c2 AS Y 
  FROM (VALUES (1, 1), 
               (2, 1), 
               (3, 1), 
               (1, 2), 
               (2, 2), 
               (3, 2)
       ) AS T (c1, c2);

** То есть, хотя существует только одна реляционная модель (т. Е. Кодда), может быть более одной реляционной алгебры (т. Е. Кодда только одна).

3 голосов
/ 27 сентября 2011

Вы не совсем правы - тета-соединение - это объединение, которое может включать условие , отличное , чем = - в SQL, обычно < или >= и т. Д. См. TechNet

Что касается декартового произведения (или CROSS JOIN), то это скорее операция, чем идея или концепция.Это важно, потому что иногда вам нужно его использовать!Это основной факт, что set of 13 x set of 4 = 52, и декартово произведение основано на этом факте.

2 голосов
/ 09 февраля 2012

По-моему, чтобы упростить задачу, если вы понимаете equijoin, вы должны понимать, что theta join.Если вы измените символ = (равно) в эквивалентном значении на> =, то вы уже сделали тета-соединение.Тем не менее, я думаю, что довольно трудно увидеть практичность использования тэта-соединения по сравнению с equijoin, поскольку причина соединения, которую мы обычно используем, - это V.primarykey = C.foreignkey.И если вы хотите перейти к тета-соединению, то это может зависеть от значения, так как вы делаете выбор.

Для естественного соединения это просто похоже на equijoin, разница только в том, что избавитьсяизбыточные атрибуты.просто!:)

Надеюсь, это объяснение поможет.

0 голосов
/ 31 мая 2019

Концептуально все объединения начинаются как перекрестный продукт, а затем отсеивают определенные строки. Естественное объединение отсеивает все строки, в которых столбцы с одинаковыми именами в двух объединяемых таблицах имеют разные значения. Equijoin отсеивает все строки, в которых указанные столбцы имеют разные значения. А theta-join отсеивает все строки, в которых указанные столбцы не находятся в указанном отношении (<,> или что-либо еще; в принципе это может быть is_prefix_of как отношение между строками).

...