Подтвердить что ты не робот

Ясное объяснение "тета-соединения" в реляционной алгебре?

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

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

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

4b9b3361

Ответ 1

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

Оператор отношения принимает одно или несколько отношений как параметры и приводит к соотношению. Поскольку отношение не имеет атрибутов с двойными именами по определению, реляционные операции theta join и естественное объединение будут "удалять дубликаты атрибутов". [Большая проблема с примерами проводок в 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" не является строго правильным.

Аналогично, Tutorial D не включает оператор объединения theta. Это связано с тем, что другие операторы (например, естественное объединение и ограничение) делают его ненужным и не очень полезным. Напротив, примитивные операторы Codd включали продукт и ограничение, которое можно использовать для выполнения тета-соединения.


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 строк, то есть это

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);

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

Ответ 2

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

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

Ответ 3

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

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

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