В математике декартово произведение (или для краткости произведение) двух множеств является множеством всех таких упорядоченных пар элементов, что первый элемент в каждой паре берется из первого множества, а второй элемент в каждой паре берется из второго множества. Следовательно, декартово произведение двух отношений должно быть множеством упорядоченных пар кортежей. Но опять-таки необходимо сохранить свойство замкнутости; иначе говоря, результат должен содержать кортежи, а не упорядоченные пары кортежей. Поэтому версия декартова произведения в реляционной алгебре представляет собой расширенную форму операции, в которой каждая упорядоченная пара кортежей заменяется одним кортежем, образованным из двух сцепленных кортежей этой пары. "Сцепление" здесь означает объединение (в смысле теории множеств, а не реляционной алгебры); т.е. кортежи
{ <А1:а1>, <А2:а2>,..., <Аm:am> }
и
{ <В1:b1>, <В2:Ь2>,..., <Вn:Ьn> }
(имена атрибутов показаны для определенности) сцепляются в один кортеж
|
|
{ <A1:al>, <A2:a2>,..., <Am:am>, <В1:b1>, <В2:Ь2>,..., <Вn:Ьn> }
Другая проблема, возникающая в связи с декартовым произведением, заключается в том, что результирующее отношение должно иметь правильно сформированный заголовок. Очевидно, что заголовок в своей основе представляет просто сцепление двух заголовков исходных отношений. Следовательно, если эти два заголовка имеют какие-то общие имена атрибутов, возникает проблема. Если допустить такую операцию, то результирующий заголовок будет иметь два одинаковых атрибута, а значит, будет "неверно сформированным". Поэтому, если нужно построить декартово произведение двух отношений, которые имеют какие-то общие имена атрибутов, необходимо прежде для переименования соответствующих атрибутов применить оператор rename.
Итак, декартово произведение двух отношений А и В (A times в), где А и В не имеют общих имен атрибутов, определяется как отношение с заголовком, который представляет собой сцепление двух заголовков исходных отношений А и В, и телом, состоящим из множества всех кортежей t, таких, что t представляет собой сцепление кортежа а, принадлежащего отношению А, и кортежа b, принадлежащего отношению В. Обратите внимание, что кардинальное число результата равняется произведению кардинальных чисел исходных отношений А и В, а степень равняется сумме их степеней.
Пример. Пусть отношения А и В будут такими, как показано на рис. 6.4 (отношение А представляет, например, номера всех текущих поставщиков, а отношение В — номера всех текущих деталей). Тогда a times в— это все текущие пары поставщик-деталь и деталь-поставщик.
|
|
Прежде чем завершить обсуждение этой операции, необходимо указать, что на практике явное использование операции декартова произведения требуется только для чересчур сложных запросов (см. упражнения и ответы на них в конце главы). Другими словами, для реального запроса относительно редко требуется (хотя нельзя сказать что вовсе не требуется) использование операции декартова произведения. Эта операция включена в реляционную алгебру главным образом по концептуальным соображениям. В частности, как отмечается ниже в этой главе, декартово произведение требуется как промежуточный шаг при определении операции θ -соединения (а операция θ-соединения используется довольно часто).
S # | P# | .. | .. | .. | .. | .. | .. | .. | .. | |||||
S1 S1 S1 S1 S1 S1 | P1 P2 P3 P4 P5 P6 | S2 S2 S2 S2 S2 S2 | P1 P2 P3 P4 P5 P6 | S3 S3 S3 S3 S3 S3 | P1 P2 P3 P4 P5 P6 | S4 S4 S4 S4 S4 S4 | P1 P2 P3 P4 P5 P6 | S5 S5 S5 S5 S5 S5 | P1 P2 P3 P4 P5 P6 | |||||
.. | .. | .. | .. | .. | .. | .. | .. |
A | S# | B | P# | |||||||||||||||||
S1 S2 S3 S4 S5 | P1 P2 P3 P4 P5 P6 | |||||||||||||||||||
Декартово произведение (A TIMES B) | ||||||||||||||||||||
S# | P# | ... | … | … | … | … | … | … | … | |||||||||||
S1 S1 S1 S1 S1 S1 | P1 P2 P3 P4 P5 P6 | S2 S2 S2 S2 S2 S2 | P1 P2 P3 P4 P5 P6 | S3 S3 S3 S3 S3 S3 | P1 P2 P3 P4 P5 P6 | S4 S4 S4 S4 S4 S4 | P1 P2 P3 P4 P5 P6 | S5 S5 S5 S5 S5 S5 | P1 P2 P3 P4 P5 P6 | |||||||||||
… | … | … | … | … | … | … | … | |||||||||||||
Рис. 6. 4. Пример операции декартова произведения
Отметим, что операция декартова произведения не очень важна на практике, потому что после ее выполнения в результате нет никакой дополнительной информации по сравнению с исходной. В случае, показанном в примере на рис. 6.4, результат не говорит нам ничего нового – он просто подтверждает, что существуют номера поставщиков и номера деталей.