Перевод. Оригинал статьи Автор Андреас Мартинсон (Andreas Martinson)
От 4 апреля 2022 г.
Диаграммы Венна (Venn Diagrams) устарели (по утверждению автора).
Выше показано изображение автора, вдохновленное R for Data Science (предлагаемое им вместо диаграмм Венна)
Пару недель назад я опубликовал статью о SQL Anti-Joins на Reddit. Вскоре после того, как я поделился ей, получил такой ответ:
Это меня заинтересовало, так как до этого не встречал информации ни о ком, кто считал бы диаграммы Венна плохим способом визуализации соединений SQL, а я имею опыт работы с SQL более трёх лет. Лично я считаю, что диаграммы Венна помогают быстро запомнить и визуализировать типы соединений между двумя таблицами. Итак, затем был мой ответ:
После этого комментария получил несколько эмоциональных откликов и понял, что это уже широко обсуждалось и имеет некоторую историю. Когда стал изучать этот вопрос подробнее, то нашел популярный пост Reddit под названием “Say NO to Venn Diagrams When Explaining Joins” . Интересно было почитать мнения других об этом. Я также нашел похожую популярную публикацию, опубликованную в журнале Towards Data Science пару лет назад, под названием “Can we stop with the SQL JOINs venn diagrams insanity?”.
Эти дебаты напомнили мне споры о том, как произносится "SQL", или когда я впервые услышал о разности мнений о табуляциях и пробелах . Я решил написать эту статью после того, как обдумал аргументы обеих сторон, а затем нашел тот способ, который считаю недооцененной визуализацией соединений SQL, и которую я называю диаграммами клетчатых флагов (под "клетчатым флагом" здесь имеется ввиду финишный черно-белый флаг, используемый в автогонках - прим. переводчика).
Небольшое примечание: что касается произношения SQL, то SQL изначально писался как «SEQUEL» и был изменен только на "SQL" из-за проблемы с товарным знаком.
Несмотря на то, что у меня есть собственное мнение по этой теме, думаю, что стоит заявить, как я считаю, что у обеих сторон аргумента есть некоторые обоснованные точки зрения и что обе эти визуализации являются допустимыми способами представления соединений SQL. Причина, по которой существуют эти споры, заключается в том, что обе стороны увидели преимущества различных подходов к обучению, и это нормально. Конечно, для большинства людей может существовать оптимальный путь обучения, но обучение — это индивидуальный опыт, и поэтому я не хочу сбрасывать со счетов преимущества, которые другие обнаружили, используя различные визуализации. Пожалуйста, помните, однако, что лучший способ по-настоящему понять соединения SQL — это погрузиться в код и попрактиковаться!
При этом надеюсь затронуть далее обоюдные ключевые моменты и предложу решение, которое, возможно, удовлетворит людей по обе стороны.
Ключевые моменты противоположных сторон спора
Пытаясь лучше понять спорщиков, я прочитал немало мнений на Reddit, а также несколько статей. Вот причины, по которым было обнаружено, что люди не согласны с использованием диаграмм Венна для визуализации соединений SQL:
- Диаграммы Венна возникли из теории множеств и поэтому не должны использоваться для визуализации соединений между двумя реляционными таблицами.
- Некоторые люди утверждают, что учащимся трудно понять соединения, когда они знакомятся с концепцией с помощью диаграмм Венна.
- Диаграммы Венна не являются технически правильным представлением того, что на самом деле делает соединение.
- Диаграммы Венна имеют различные ограничения: например, они не могут хорошо визуализировать другие типы соединений (например, перекрестные соединения), не могут показать, что происходит при возникновении дубликатов и т. д.
Это основные критические замечания, которые я обнаружил у противников использования диаграмм Венна. Сторонники диаграмм Венна в SQL ответили двумя основными моментами:
- Хотя диаграммы Венна могут быть технически неправильными, они помогают людям запомнить типы соединений и их проще понять.
- Соединения и выполнения операций могут привести к одному и тому же результату в зависимости от выбранных столбцов.
Независимо от того, какая сторона вам больше нравится, теперь у вас есть некоторый контекст к той причине, по которой я решил написать эту статью.
Одна из альтернатив для диаграмм Венна
В 2016 году вышла популярная статья, в которой также выступали против использования диаграмм Венна, и автор предложил альтернативную диаграмму, называемую «диаграммой соединения». Привожу пример внутреннего соединения, визуализированного в виде диаграммы соединения:
Изображение автора, вдохновленное блогом Jooq
Эта диаграмма удобна, поскольку она более точно представляет табличную структуру, используемую в соединениях SQL, чем диаграммы Венна. Проблема с этой диаграммой заключается в том, что она показывает первичные ключи в виде цветов, но также содержит числа или буквы внутри этих цветов. Буквы и цифры внутри прямоугольников должны представлять столбцы помимо столбца первичного ключа (представленного цветом), но именно здесь эта визуализация начинает давать сбой. Представление нескольких столбцов с помощью одного прямоугольника может быть запутанным и неинтуитивным (по крайней мере, для меня). Несмотря на это, такая визуализация может оказаться полезной для некоторых людей, которым трудно понять соединения с использованием SQL. У каждой визуализации определенно есть ограничения.
Схема клетчатого флага 🏁
Когда я рассматривал различные способы визуализации соединений SQL, то нашел и себе по вкусу. Надеюсь, что эта диаграмма сможет преодолеть разногласия между двумя сторонами или, по крайней мере, предоставить еще один вариант, который поможет людям понять соединения SQL.
Эта диаграмма была первоначально создана Hadley Wickham & Garrett Grolemund в их книге «R for Data Science» . Диаграммы можно найти в главе "Relational data".
Мне удалось повторить эти диаграммы для шпаргалки, которую покажу ниже.
Почему мне нравится схема клетчатого флага
Вот перечень причин, по которым я предпочитаю эту диаграмму:
- Она представляет соединение более точно, чем "диаграмма соединения", поскольку имеет первичные ключи с одинаковыми цветами и номерами.
- Показывает 1 дополнительный столбец значений для каждой таблицы, чтобы помочь отобразить, что происходит с данными в столбцах в дополнение к столбцам первичного ключа.
- Соединительные линии помогают упростить визуальное представление, позволяя легко увидеть соединяющиеся строки.
- Подобно диаграмме соединения, конечная таблица, полученная в результате соединения, показана справа.
- При необходимости отображаются нулевые значения, что и происходит при выполнении объединений в SQL.
- Можно показать перекрестное соединение, что является преимуществом по сравнению с диаграммами Венна.
- Синтаксис SQL показан для справки, аналогично шпаргалке по диаграмме Венна здесь .
Я по-прежнему считаю, что диаграммы Венна полезны для визуализации соединений SQL, но они ограничены в диапазоне и точности того, что они могут представлять. Надеюсь, что эти диаграммы клетчатых флагов могут стать отличным справочником при изучении SQL. Спасибо за то, что дочитали до конца!
Перевод. Оригинал статьи Автор Андреас Мартинсон (Andreas Martinson)