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

    −857

    1. 1
    CREATE DOMAIN D_TRIBOOL AS SMALLINT DEFAULT 0 NOT NULL CHECK (VALUE IN (-1,0,1));

    Возможно, вопрос о говнокодистости этой строчки является холиварным. Но меня приведённый отрывок по крайней мере немало удивил.

    Запостил: konsoletyper, 17 Августа 2011

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

    • >Но меня приведённый отрывок по крайней мере немало удивил.
      Чем? Судя по всему, это http://en.wikipedia.org/wiki/Three-valued_logic
      Ответить
      • Да не, оно, конечно, понятно что такое. Вот только как-то удивило само название. Плюс подбор значений какой-то странный. И вообще, думаю, можно было бы и NULL'ом обойтись.
        Ответить
        • Такой набор можно использовать, например, для обозначения типа операций со счетами: -1 - списание, 0 - создание, 1 - начисление.
          Ответить
          • Во-первых, для такого набора операций нужно другое наименование (ибо tribool не отражает). Во-вторых, я бы сделал varchar(1) с какими-нибудь осмысленными буковками, отражающими тип операции. Но это если действительно большая табличка и требуется экономить дисковое пространство. А так можно и вообще varchar произвольной длины.
            Ответить
            • Зато легко считать баланс:
              SELECT SUM(TYPE * AMOUNT)
              ,
              где TYPE - тип операции,
              AMOUNT - сумма операции.
              Ответить
              • Ну я плохо знаю предметную область, потому не буду заморачиваться с английскими буковками. Напишу по наитию:
                SELECT SUM(CASE type WHEN 'начисление' THEN 1 WHEN 'списание' THEN -1 ELSE 0 END * amount)

                Заодно так можно ввести дополнительные типы операций, которые не влияют на балланс.
                Ответить
    • трибул... фигасе название
      Ответить

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