mysql_real_escape_string / Говнокод #641 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
CREATE TABLE GOVNOTABLE(
  GOVNOTABLEID VARCHAR2(60) NOT NULL DEFAULT ''
  /*
   Еще всякого говна
  */
)

Это Oracle 7.
Так построены все таблицы складской системы, разработанной каким-то нашим НИИ.

Меня поражает, что в одной строчке можно сделать столько говна:

1. Все ID в системе имеют вид XYZ000NNN, где XYZ - префикс подразделения, 0000NNNN - численный идентификатор, переведенный в строку и добитый нулями. (Сто раз такое говно видел, до сих пор поражаюсь)

2. VARCHAR2(60) - идентификатор никогда не может быть больше 12 символов, на хрена 60?

3. NOT NULL DEFAULT '' - вот это мое любимое! Присмотритесь.
Если кто не догадался: это Oracle, Oracle отличается тем, что '' = NULL.
Т.е. этот цинизм расшифровывается как NOT NULL DEFAULT NULL!!!

Еще в догонку:
Индексация базы ОООЧЕНЬ порадовала.
Индексы это хорошо, они все ускоряют, поэтому проиндексировано КАЖДОЕ ПОЛЕ В БАЗЕ!

Запостил: guest guest, (Updated )

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

  • Ты хуй и говносос. Идентификатор в Оракле вообще-то 30 символов по умолчанию. Даже в семерке. Ты хуй. Иди читай трахнутые оракловые мануалы.
    Ответить
  • В догонку к комментарию 1 если уж взялся критиковать чужой код, сначала Read the fucking manualsптому как NULL это NULL а пустая строка это пустая строка.
    Ответить
  • Sano:
    К первому комментарию: Аффтор имеет в виду,что исходя из формата ID его длина никак не может быть больше 12 символов.
    Ответить
  • К первому комментарию:
    * Идея делать идентификатор не int дурацкая изначально
    * Если длина идентификатора по логике должна быть не больше и не меньше 12 символов, значит не VARCHAR2, а CHAR2 и ровно 12 символов.

    Ко второму комментарию:

    Чего я распинался? Если ты не знаешь этого ораклевого твика (который я, кстати, одобряю):

    http://www.google.ru/search?hl=ru&as_qdr=all&newwindow=1&q=Or acle+NULL+empty+string+site%3Aoracle.com &btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr= &aq=f&oq=

    Не ты ли эту хуйню писал, дарагой?
    Ответить
  • Говнораклист:
    К комментарию 2:

    выполни этот запрос в Oracle и посмотри, что он вернёт, оракловый гуру...:)
    SELECT CASE WHEN '' IS NULL THEN 'null' ELSE 'not null' END FROM dual
    Ответить
  • Говнораклист:
    К комментарию 1:

    ты - мудоёб 🙂 Аффтар имел ввиду, что по бизнес-логике он не может быть больше 12 символов.

    Говногость под номером 4 это понял. Я тоже.

    А ты, матерщиное животное, нет 🙂
    Ответить
  • Говногость 4 это я, он же ОП.


    Я, вообще, обожаю эту хренотень - NOT NULL DEFAULT NULL

    Вообще, заболевание идеей делать идентификаторы 0000xxx обычно переживают в первые полтора-два месяца.
    Но иногда это идет в ынтрыпрайз.

    Немного секретов - это в ЦБ.
    Ответить
  • это что еще прикольнее когда идентификатор состоит из 3 полей
    Ответить
  • "это в ЦБ." - а потом ещё удивляются что это рубль вдруг падает. Похоже дело не только в нефти.
    Ответить
  • по сути претензий:
    п. 1 - вполне себе удобный идентификатор для весчей типа
    /*выбор всего по подразделению*/
    select t.*,to_number(substr(ID,4)) as number_id
    from table t
    where ID like :TREBA_ID||'%'
    особенно для Data Warehouse
    п.2. и 3. - это вероятнее всего результат генерации какого-нить CASE-средства и кривые руки пейсателей из "какого-то нашего НИИ" тут не причём.
    п.3. - это м.б. защита от дураков, которые потом приписывают модули расширения системы - требование обязательного указания идентификатора, а то вдруг пишущий является мс-скульщиком/аксесником и т.п., и увидев наименование поля "ID" решит что там автогенерация значения?
    В общем - незачет
    Ответить
    • Дубина.
      Зачем строка в 60 байтов, когда можно два инта суммарно 8 байтов?
      Без всяких to_number(substr
      Ответить
      • Тип VARCHAR2 имеет переменную длину, можно написать хоть VARCHAR2(1000) — от этого место, используемое под хранение данных, не увеличится.
        Ответить

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

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8