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

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

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

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

3 ответов


оставив SQL в секунду...

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

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

истинно реляционный язык Учебник 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 х 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 не включает оператор тета-соединения. Это в основном потому, что другие операторы (например, естественное соединение и ограничение) делают его ненужным и не очень полезным. Напротив, примитивные операторы Codd включали продукт и ограничение, которые можно использовать для выполнения тета-соединения.


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

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

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


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

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


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

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

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