Уместно ли использовать диаграммы Венна для изображения SQL объединений, где таблицы представляют собой наборы? - PullRequest
1 голос
/ 08 мая 2020

Следующее изображение можно найти, выполнив поиск по запросу SQL join на inte rnet:

enter image description here

Можно ли интерпретировать это как Диаграмма Венна , следующим образом?

  • Круг, обозначенный Таблица A, представляет собой набор записей в Таблице A
  • Круг, обозначенный Таблица B, представляет собой набор записей в Таблице B
  • Пересечение наборов представляет собой внутреннее соединение (также известное как просто соединение SQL)

Мотивация

Показанная диаграмма в различных формах, широко распространенных на net, ужасно напоминает диаграмму Венна. Итак, первая интуиция - думать об этом как о диаграмме Венна. Однако можно застрять, пытаясь определить содержимое наборов «Таблица A» и «Таблица B».

Существует также информация о rnet integer, которая кажется конфликтующей. Этот вопрос поможет разрешить некоторые из возникающих конфликтов. Некоторые сайты утверждают, что мы не должны использовать диаграммы Венна для объяснения объединений:

Хотя есть и другая информация, в которой диаграммы Венна между таблицами A и B используются для объяснения объединений в этих таблицах, например,

1 Ответ

1 голос
/ 08 мая 2020

Нет. Диаграмму нельзя интерпретировать как диаграмму Венна, если она представляет соединения. Покажем почему на контрпримере. Давайте выберем минимальный контрпример, чтобы избежать беспорядка. Поэтому предположим, что в обеих таблицах есть только один столбец: ID. Кроме того, давайте предположим, что в обеих таблицах есть только две записи, и обе имеют одинаковые две записи: только идентификаторы 1 и 2. Итак, обе таблицы выглядят просто так:

enter image description here

Теперь предположим, что мы запускаем следующую SQL:

select * from A join B

Поскольку предложения ON нет, мы вернем таблицу всех комбинаций записи в A со всеми записями в B. Так как в каждой по 2 записи, мы вернем 4 = 2 * 2 записей. Наша результирующая таблица из выбранной будет выглядеть следующим образом, с столбцами идентификаторов A и B, полностью квалифицированными именем таблицы:

enter image description here

Однако пересечение два набора записей, как показано на диаграмме Венна, не равны этому, независимо от того, какую интерпретацию мы выбираем для записей.

Интерпретация # 1: Каждая запись - это просто кортеж ценностей. В этом случае, поскольку у нас есть только один столбец в каждой таблице, наши кортежи сводятся только к отдельным значениям. Поскольку наш столбец идентификатора - numeri c, эта интерпретация сводится к тому, что запись представляет собой просто идентификатор numeri c. Пересечение множеств - это пересечение множества {1, 2} с самим собой. Это всего лишь оригинальный набор. Или в виде таблицы пересечение будет:

enter image description here

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

Это завершает доказательство того, что эта точная интерпретация диаграммы Венна не может рассматриваться как представляющая SQL соединение.

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