1. SQL / Говнокод #10376

    −131

    1. 1
    2. 2
    alter table EqualityCodes add constraint chk_EqualityCodes_Code
      check (Code not in ('', ' ', '  ', '   ', '    ', '     ', '      ', '       '));

    Запостил: glprizes, 28 Мая 2012

    Комментарии (16) RSS

    • А если 8 пробелов?
      Ответить
      • Длина поля в клиенте - 7 символов, так что 8 пробелов не пройдут! :-)
        Ответить
        • Как я понимаю, 'qwe' и ' qwe' считаются разными вещами?
          Ответить
          • trim() делается на сервере
            Ответить
            • Ага, то есть чудеса вида " ' ', ' ', ' ' " до базы таки не доходят?..
              Ответить
              • Да. Потому и неясно, зачем этот constraint вообще нужен.
                Ответить
    • Пусть автор напишет поле для телефонного номера с валидацией. Вот уж вариантов-то подбирать... есть разгуляться где на воле.
      Ответить
    • Не БД это дело, за качеством входных данных следить.
      Лучше устроить жесткую валидацию на клиентском ПО.
      А на БД можно делать проверки, которые без БД ну никак не сделать (проверка наличия натурального ключа по справочнику и т.п.)
      Ответить
      • Ой-ли.. может все-таки на серверном ПО. Я бы клиентскому ПО доверять не стал.
        Ответить
        • Может всё-таки и там и там?
          Была недавно и клиентская валидация http://govnokod.ru/10362 и серверная http://govnokod.ru/10363
          Ответить
          • Тогда нужен некий механизм спецификаций, по которому будет генерироваться код валидации, иначе нарушается DRY. Наверное, некоторые фрэймворки умеют втыкать джаваскриптовые валидаторы в довесок к серверным проверкам.
            Ответить
          • Все от ситуации зависит :)

            Мое мнение по поводу валидаций:
            Валидация на клиенте - чисто для удобства - быстрее реакция на ошибки, меньше напрягает сервер. Ни о какой безопасности тут речи нет.
            Валидация на сервере - основа безопасности системы.
            Валидация в СУБД - целостность связей и не-null поля - т.е. не допускаем явного нарушения структуры БД при каких-либо багах в ПО.

            P.S. Простых систем с локальными базами это, конечно же, не касается.
            Ответить
        • Вы не поверите, но иногда бывают толстые клиенты и серверную прослойку просто не предусмотрено архитектурой.
          Ответить
          • Ну почему не поверю. Такие системы тоже имеют полное право на существование.
            Ответить
      • Весь вопрос в уровнях доверия. Особо параноидальные системы не доверяют не только пользовательским данным, но и данным пришедшим из другого модуля, например, из БД. Лично сталкивался с ситуацией, когда БД была "голая", вся обработка ложилась на толстенького клиента. Поскольку частенько проверки работали не так, данные лезли какие Ктулху на душу положит. Хитрые задвоения, которые потом вычищали с матюгами - плёвое дело.
        Ответить

    Добавить комментарий