Может кто-нибудь объяснить мне, как декартово произведение работает в реляционной алгебре - PullRequest
5 голосов
/ 10 октября 2011

здесь здесь указано

Выбор и перекрестный продукт

Совокупный продукт - самый дорогой оператор для оценки.Если входные отношения имеют N и M строк, результат будет содержать NM строк.Поэтому очень важно сделать все возможное, чтобы уменьшить размер обоих операндов перед применением оператора перекрестного произведения.

Предположим, что у нас есть 2 отношения

Первое отношение называется Student и имеет 3 атрибута.таким образом,

    student
  |a |b   |c |
  ------------
  |__|___|___|
  |__|___|___|
  |__|___|___|

второе отношение является университетским и снова с 3 атрибутами

   university
  |e |f   |g |
  ------------
  |__|___|___|
  |__|___|___|
  |__|___|___|

у нас есть 3 строки для каждого отношения, поэтому после применения операции кросс-произведения мы получим отношение, котороеимеет 3 * 3 = 9 строк

сейчас, я не понимаю, почему 9, а не 3?

не будет окончательное отношение будет

 final relation
 |a |b   |c |d |e   |f |g |
 --------------------------
 |__|___|___|__|____|__|__|
 |__|___|___|__|____|__|__|
 |__|___|___|__|____|__|__|

неу этого есть 3 ряда снова?

Спасибо

Ответы [ 4 ]

5 голосов
/ 11 октября 2011

Если строки в Student являются row1, row2 и row3, а строки в University - row4, row5 и row6, то декартово произведение будет содержать

row1row4, row1row5, row1row6, row2row4, row2row5, row2row6, row3row4, row3row5, row3row6

Каждая возможная комбинация строк. Вот как это определяется. Ничего больше.

За исключением вашего замечания «Поэтому очень важно сделать все возможное, чтобы уменьшить размер обоих операндов перед применением оператора перекрестного произведения». Важно понимать, что существуют оптимизаторы, которые способны «переписать» определенные операции алгебры. Это, конечно, не тот случай, когда автор запросов всегда должен определять «наиболее подходящий способ сочетания ограничений с другими операциями». На самом деле, «продвигая ограничения внутрь как можно дальше» - это одна из вещей, в которых промышленные оптимизаторы действительно очень хороши.

2 голосов
/ 10 октября 2011

Только представьте, что у вас есть две таблицы: одна со студентами, а другая - с университетами. Когда вы делаете декартовый запрос к реляционной базе данных, вы получаете ряд для каждого студента, который в свою очередь присоединяется к каждому университету.

Select *
   From students, 
        universities;

OR

SELECT * FROM students CROSS JOIN universities

Я знаю, что это не имеет ничего общего с алгеброй, но так как вы в стеке: D

0 голосов
/ 23 октября 2011

| | е || | Е || | Г || Б | е || Б | е || Б | г || С | е || С | е || c | g |

Поэтому 9

0 голосов
/ 10 октября 2011

Нет общего атрибута для связи между студентом и университетом, поэтому каждая строка в студенте сопоставляется с каждой строкой в ​​университете, 3 * 3 = 9

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...