- 1
- 2
- 3
- 4
- 5
- 6
CREATE TABLE GOVNOTABLE(
GOVNOTABLEID VARCHAR2(60) NOT NULL DEFAULT ''
/*
Еще всякого говна
*/
)
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−859.5
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 12.03.2009 13:55 # −5.2
guest 12.03.2009 14:00 # −5.2
guest 13.03.2009 14:24 # 0
К первому комментарию: Аффтор имеет в виду,что исходя из формата ID его длина никак не может быть больше 12 символов.
guest 19.03.2009 19:57 # +1.2
* Идея делать идентификатор не 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=
Не ты ли эту хуйню писал, дарагой?
guest 20.03.2009 17:09 # +1.2
К комментарию 2:
выполни этот запрос в Oracle и посмотри, что он вернёт, оракловый гуру...:)
SELECT CASE WHEN '' IS NULL THEN 'null' ELSE 'not null' END FROM dual
guest 20.03.2009 17:11 # +1.2
К комментарию 1:
ты - мудоёб :) Аффтар имел ввиду, что по бизнес-логике он не может быть больше 12 символов.
Говногость под номером 4 это понял. Я тоже.
А ты, матерщиное животное, нет :)
guest 27.03.2009 21:03 # +1.2
Я, вообще, обожаю эту хренотень - NOT NULL DEFAULT NULL
Вообще, заболевание идеей делать идентификаторы 0000xxx обычно переживают в первые полтора-два месяца.
Но иногда это идет в ынтрыпрайз.
Немного секретов - это в ЦБ.
guest 11.08.2009 14:53 # 0
guest 12.12.2009 01:25 # 0
stokito 15.01.2010 12:38 # 0
guest 11.02.2010 13:26 # 0
п. 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" решит что там автогенерация значения?
В общем - незачет
guest 14.03.2010 16:43 # 0
Зачем строка в 60 байтов, когда можно два инта суммарно 8 байтов?
Без всяких to_number(substr
guest 21.05.2010 17:03 # 0