Про честный SQL и вычисления для бизнес-аналитики
Есть чудесная поговорка: "не только ботинок по ноге, но и нога по ботинку", и другая, тоже в тему: "если у вас в руках молоток - все проблемы выглядят как гвозди".
SQL появился очень давно - когда инженеры ещё не привыкли, что в мире информационных технологий всё меняется быстрее, чем успеваешь кофе попить, а потому спроектировали его тщательно, вдумчиво и строго. Есть таблица, есть разнообразные нормальные формы (из институтского курса помню, что их никак не менее шести, но в реальных задачах обычно безальтернативным выбором является третья), есть строгие правила объединения данных (всякие RIGHT/LEFT/INNER/FULL/прочие JOIN), строгие правила конвертации (включая кодировку для строк), строгие правила фильтрации (всякие WHERE [xxx].[yyy].[zzz] = 'Q' со всякой булевой алгеброй в условиях)...
Суть в том, что сам SQL спроектирован под работу с табличными данными: у таблицы есть сколько-то столбцов разных типов, в таблице есть некоторое произвольное количество строк и мы некоторым образом (по каким-то условиям) выбираем (и иногда по каким-то правилам группируем) подмножество строк/столбцов этой таблицы. Чтобы было интереснее - есть те счамые JOIN и другие страшные операторы (я уже порядочно позабыл, что нам в институте рассказывали, ибо, слава Богу, не DBA, а классический программист), всякие хранимые процедуры и VIEW - но всё равно это сводится к "получить некоторое множество строк некоторого множества столбцов". На самом деле, это гораздо сложнее, чем выглядит, и гораздо мощнее, чем можно было бы ожидать от такой простой формулировки - в частности поэтому классические СУБД живут и здравствуют и совершенно не собираются никуда уходить несмотря на огромное количество концептуально новых подходов к хранению и обработки данных - всякие "No-SQL" (учитывая, что SQL - это Structured Query Language, язык структурированных запросов, "No-SQL" - это обман в названии, там тоже есть язык запросов и он тоже структурированный).
Описанная концепция SQL позволила его очень качественно формализовать и разработать массу разных решений (в математическом смысле) для решения разных прикладных задач. Если брать бизнес-аналитику - например, какой-нибудь средний чек - то задача формализуется как "подсчитать количество уникальных чеков и их общую сумму и поделить второе на первое". Под это же адаптируется структура хранения данных, когда один чек записывается как несколько строк таблицы - по одной на каждый товар в чеке (что-то вроде кортежа {"идентификатор чека", "артикул товара", "количество товара"} - и потом из справочника товаров через упоминавшийся выше JOIN можно подтянуть цену единицы товара, а в ещё одну таблицу потом записать {"идентификатор чека", "дата-время покупки", "идентификатор кассового аппарата", "способ оплаты", "код скидки"} или как-то так, и ещё всякие дополнительные данные, размазанные по СУБД - магазин, например).
работа
rapeed
Если реально интересны именно технические моменты - могу рассказать чуть-чуть подробнее (строго в рамках соглашения о неразглашении).
Реально - да, действительно охренительно быстро, сам в шоке. :-)