|
Тема |
AutoInc и Генератори |
|
Автор |
Miro () |
|
Публикувано | 06.06.05 21:30 |
|
|
Връщам в клуба една дискусия, която се заформи между мен и salle:
Твърдиш, че основнатга задача на auto_increment да генерират уникални стойности (което е оснавна и единствен а задача на UUID финкциите) и не желаеш да възприемеш въобще, че има друга задача която те изпълняват а именно генерирането на последователности
Както се казах (или поне се опитах да кажа) на няколко пъти: Основната цел и на AutoInc и на Генераторите е да дадат уникална стойност в случай на конкурентни транзакции/връзки. Всеки DB сървър гарантира че конкурентни връзки няма да получат еднакво ID дори и в един и същ момент да подадат заявка за генериране на ID.
Четох статията ти и в нея се стараеш да докажеш, че auto_increment нямат никакво приложение.
Както казах в статията Ползвал съм AutoInc колони - не мога да го отрека. Също така не мога да отрека че за простички случаи тези колони си пасват идеално, т.е. не ги отричам - просто казвам къде са идеални за ползване и къде не.
Виж ако беше казал, че в частния случай когато използваш свойството уникалност предимстват аим не са особено големи щеше да е друго. Само, че цялата ти статия е изградена върху пълно отрицание при това тенденциозно именно защото вадиш частния случай от контекста му на такъв и обобщаваш.
Мога да ти дам един пример. Ти самият се съгласяваш, че всеки случай е специфичен и, че дадено решение може да е добро в един случай но неподходящо в друг. В същото време обаче се самоопровергаваш твърдейки, че има "Абсолютно погрешно виждане"
Визирам следния абзац:
"Работех по един проект известно време, където т.нар. project manager си беше втълпил идеята че всяка една таблица трябва да има AutoInc поле! Абсолютно погрешно виждане."
Ами ти противопоставяш едно напълно крайно виждане срещу друго крайно виждане. При това положение с нищо не си по-добър от въпросния мениджър
Ако се замислим по-добре над цитирания абзац, аз лично виждам следния смисъл : "Абсолютно погрешното виждане" е че всяка таблица се поставя под "общ знаменател" и се казва от този project manager "че ВСЯКА таблица трябва да има AutoInc Ей това е абсолютно погрешното - не можеш всички таблици да ги приравняваш, всяка таблица си има особености и трябва да се преценява според таблицата.
Аз бих казал "Чак пък всяка таблица ..."
По-нататък подкрепяш твърдението си с още по-краен пример:
"Когато една таблица си има "естествена" уникалност в някоя стойност от данните - няма никаква нужда да се добавя още едно поле (AutoInc), което не носи никаква информация в повече. "
На теория си прав. На практика много често има нужда и това е прословутото (практическо) правило на Администраторите на Бази Данни (DBA):
Първо Нормализирай колкото се може повече. След това Денормализирай там където ще спечелиш скорост.
Когато имаш композитен първичен ключ върху няколко стрингови колонки (Някакви имена да речем) тогава добавянего на излишък под формата на уникална целочислена колонка може многократно да ускори работата на заявките.
Напълно съм съгласен
Колкото до генерирането на последователности това е изключително важна задача просто защото има куп "външни" фактори които я изискват включително нормативни и законови. Пример: Номера на фактури, заповеди, служебни бележки, командировъчни и т.н. трябва да са последователни по закон.
Ок, напълно съм съгласен за генерирането на последователности, но основната задача според мен на AutoInc-а и генераторите я написах в началото. (Между другото според доста закони и наредби е проблемно наличието на "дупки" в последователностите. А такива дупки се получават много лесно при AutoInc и генераторите. Затова аз лично не ползвам генератори/AutoInc за местата, където по закон се искат последователни номера без дупки).
"Защо не кажеш нищо за статията ми за лиценза на MySQL?"
Къде е тази статия?
http://cleverdevelopers.blogspot.com/2005/05/open-source.html
Изпаднала е от списъка с recent статии.
"Нещо невярно и непроучено ли съм написал там?"
Интересно ми е къде си проучвал. Честно казано през годините съм изчел тонове глупости по въпроса.
(Работя за MySQL AB от март 2002 а използвам MySQL от 1997)
Проучвал съм от сайта на MySQL, но ти като вътрешен човек ще ме изкоригираш тук там за статията . Както казах в един друг разговор - коригирал съм в почти всяка публикувана статия след получени коментари от читатели
"Ами статиите ми за Firebird?"
Не разибрам от Firebird а твърдо вярвам, че е непрофесионално да изказваш мнение за нещо което не разбираш. В това отношерние явно имаме големи различия.
Нямаме различия по тази точка, но както винаги съм мразил електронната комуникация - винаги все нещо остава неразбрано от двете страни. Няма нищо по-добро от директния разговор.
Между другото защо изнесе този спор извън клуба? Аз не изпитвам никакви притеснения това което пиша тук да може да се чете от всекиго.
Ето, върнах го. Просто не очаквах че ще продължи дълго разговора ![](http://i.dirbg.com/clubs/icons/smile.gif)
--
Miroslav Penchev
|
| |
|
|
|