Поглядел тут на одну очень полезную и круто защищенную систему продажи билетов на всякие мероприятия. Даже на стороне клиента чувствуется вонь от ненормализованной базы данных, PHP головного мозга разработчиков и прочий ад и погибель. Валидация данных (в том числе — и о стоимости) в Javascript на стороне клиента на фоне всего этого кажется всего лишь милой шалостью.
И кто-то ведь доверяет деньги этим людям, неспособным понять слова «функциональная зависимость» и «нормальная форма».
>Валидация данных (в том числе – и о стоимости) в Javascript
это прекрасно :)
к слову сказать, нормализиция иногда вредит, но тут явно не тот случай
Главное тут даже не нормализация, а полное отсутствие, так сказать, «функционального мышления». Чуваки просто не понимают, что от чего зависит (и, соответственно, не могут понять определение нормальной формы). Скажем, передавать стоимость скрытым полем в форме, когда уже есть идентификатор мероприятия и количество билетов — совершенно не нужно. Проводимое мероприятие, стоимость билетов и тд однозначно определяется по идентификатору проданного билета — которых, кстати, существует минимум два. Созданы все условия для образования аномалий — то есть потенциальных косяков с «денежными» вопросами.
На стороне клиента делается предварительная валидация — для фильтрации явных ошибок ввода. Она нужна.
«Чуваки просто не понимают, что от чего зависит»
Это да.
«передавать стоимость скрытым полем в форме, когда уже есть идентификатор мероприятия и количество билетов – совершенно не нужно»
Это речь теоретика :)
На самом деле цена определяются массой побочных факторов и даже если на экранной форме нет в данный момент опций выбора, то не факт, что не появятся дальше. Ну и теория еКоммерца подразумевает, что каталог товаров, корзина и список заказов — это три разных, практически изолированных сущности.
«Созданы все условия для образования аномалий »
ну они предсказуемы и, при необоходимости, легко проверяются.
> предварительная валидация
Как я вчера убедился — она финальная, то есть на стороне сервера проверяется далеко не все.
> На самом деле цена определяются массой побочных факторов и даже если на экранной форме нет в данный момент опций выбора, то не факт, что не появятся дальше.
Согласен, но тогда надо тащить в скрытых полях не результат вычислений, а сами эти опции выбора.
> при необоходимости
Проблема в том, что проверка может проводиться только постфактум, когда на мероприятие придет толпа людей с левыми билетами, например. А этого вполне можно избежать.
> Как я вчера убедился – она финальная, то есть на стороне сервера проверяется далеко не все.
Статьи 272 и 274 УК РФ. не? :)
ps. откуда таких олений берут — я догадываюсь.
Может и так, да.
«Согласен, но тогда надо тащить в скрытых полях не результат вычислений, а сами эти опции выбора.»
Они тоже живут своей жизнью — нужно будет хранить историю всех изменений — противно. Ну и нарушает изоляцию трех разных систем — каталога, корзины, заказов.
«Проблема в том, что проверка может проводиться только постфактум»
Да почему. Можно на регулярной основе запускать контрольный скрипт (в древних совкоязычных системах частенько присутсвовала кнопка «переиндексация»), хотя вообще-то это делается в момент сохранения в базе.
Де-нормализация абсолютно необходима, когда в реляционной базе хранится сложная структура (а магазины содержат *очень сложные* структуры) — иначе выборка из пяти таблиц с сортировкой по полю последней ложит любой сервер.
Правильные системы содержат кеши с данными, которые используются для отчетов и отображают нормализованные данные. Но это дорого и в «наколенке» сразу делаю де-нормализованные системы хранения.
Я про этот конкретный случай. Да и вообще — вот нашел ты аномалию, а она тебе говорит человеческим голосом: «Слющай, чего меня ловиш? Поймаэш — щито дэлать будэш?» :)
Ну и если уж говорить про денормализацию — то для начала надо понять, что такое нормализация — а тут, похоже, просто шлепают таблички, особо не вдаваясь в «теоретические вопросы». Журнал Ксакеп, статья «похапе для дебилов»:
http://shura.luberetsky.ru/2011/01/12/pro-php-i-bazy-dannykh/
Кстати, эти черти все-таки пользуются контрольными скриптами :) Сегодня написали мне емейл, типа «как у вас это получилось, не могли бы вы нам сообщить, чтобы мы исправили ошибку». Думаю, надо либо послать их читать главу про функциональную зависимость из книжки Дейта, либо ответить «пьяный был, не помню».