beldmit: (Программизм)
Dmitry Belyavskiy ([personal profile] beldmit) wrote2015-04-10 09:31 pm

Почти наброс

А почему бы не обучать основам программирования, начиная с SQL?

Записные книжки есть у всех, что такое таблица – более-менее понятно.

Часть обсуждения здесь.

[identity profile] besm6.livejournal.com 2015-04-11 05:06 am (UTC)(link)
Да в том и дело, что и на практике там от таблицы только слово table в create table, alter table да drop table.

[identity profile] beldmit.livejournal.com 2015-04-11 06:40 pm (UTC)(link)
Да не сказал бы. Хотя возможно, я слишком широко понимаю понятие таблицы.

[identity profile] besm6.livejournal.com 2015-04-11 08:21 pm (UTC)(link)
Я попробую пояснить. SQL - это, на самом деле линеаризованная в текст, причем далеко не самым удачным образом, довольно простая, но алгебраическая конструкция. В "алгебраическая" в данном случае существенна возможность неограниченного усложения выражения, составленного из простых элементов. Ситуация, очень удобная для вычислений с помощью компьютера (малыми усилиями по программированию можно обработать сложную задачу), но с большим трудом воспринимаемая человеческим мозгом (поэтому оказывается сложно выразить реально стоящую задачу в терминах этой модели).

В попытке донести эту конструкцию до людей, которые видели и кое-как понимали табличное представление данных, под эту структуру кто-то подложил модель таблицы. Легла она туда хреново - во-первых, таблиц оказывается существенно не одна, а во-вторых, связи между ними в той же модели оказываются настолько запутанным графом, что больше двух связей в одном предложении с трудом осиливает даже весьма опытный программист, чего уж говорить об изначальной ЦА этой модели. "Родная" алгебраическая структура отношений позволяет все же удержать в голове на пару двоичных порядков больше. Но не всякому, а тому, кому сумели наработать хотя бы какую-то интуицию на алгебраический подход.

Человек же, воспринимая таблицу, воспринимает только одну таблицу за раз. Отфильтровать строки (WHERE) и столбцы (список полей в SELECT), отсортировать по указанному критерию - это достаточно просто и понятно, хотя синтаксис уже представляется корявым (а в случае не вполне тривиального принципа сортировки - уже и невменяемым). А с первым JOIN - все, суши весла. На модель таблицы JOIN не ложится от слова "никак", потому что декартово произведение двух отношений, подмножество которого выдает JOIN - это уже не два, а три измерения (не четыре - наборы столбцов довольно естественно воспринимаются как одно измерение). А трехмерная таблица в человеческом восприятии с двумерной и рядом не лежала.

[identity profile] beldmit.livejournal.com 2015-04-13 08:31 am (UTC)(link)
Я воспринимаю JOIN как отсылку к внешнему справочнику. Который тоже таблица.

[identity profile] besm6.livejournal.com 2015-04-13 10:58 am (UTC)(link)
Отсылка к внешнему справочнику - это subselect. А join - это гораздо более толстый мех, и синтаксис у него существенно страшнее.