Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 02:03 01.07.24 
Компютри и Интернет
   >> Бази данни
*Кратък преглед

Страници по тази тема: 1 | 2 | 3 | >> (покажи всички)
Тема 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 а твърдо вярвам, че е непрофесионално да изказваш мнение за нещо което не разбираш. В това отношерние явно имаме големи различия.


Нямаме различия по тази точка, но както винаги съм мразил електронната комуникация - винаги все нещо остава неразбрано от двете страни. Няма нищо по-добро от директния разговор.


Между другото защо изнесе този спор извън клуба? Аз не изпитвам никакви притеснения това което пиша тук да може да се чете от всекиго.

Ето, върнах го. Просто не очаквах че ще продължи дълго разговора

--
Miroslav Penchev



Тема Re: AutoInc и Генераторинови [re: Miro]  
Автор Miro ()
Публикувано06.06.05 21:36



За тези, които ще прочетат статията за лиценза, но ще пропуснат коментарите към нея - това е цитат от един мой коментар към статията:

Проблема е че MySQL е пуснат под GPL лиценза. А още по-важния проблем е че много хора не разбират (и не знаят) нищо за open source лицензите. Почти всички програмисти са на мнение че щом нещо се нарича Open Source - значи можеш да го вземеш и да правиш каквото си искаш с него. Идеята на статията е да даде пример че това изобщо не е вярно. И в Open Source-а си има лицензни режими, които трябва да се следят и спазват.

--
Miroslav Penchev



Тема Re: AutoInc и Генераторинови [re: Miro]  
АвторTTRex (Нерегистриран)
Публикувано06.06.05 23:03



по този въпрос аз си чета преди лягане ето това:
http://www.ibase.ru/devinfo/NaturalKeysVersusAtrificialKeysByTentser.html
сега погледнах в един от последните си проекти:
- 8 бр. таблици са с PK autoinc-полета
- 3 бр. са "справочници", от вида (id, name) и няма да се променят никога, и са твърдо зададени в БД. Е, пак са с PK inc-полета, но не "auto".
- 1 бр. е с "естествен ключ", т.е в PK има стойности 101..150, 201..210, 301..330 и т.н. те се генерират от логиката на приложението (само от едно работно място)
- 2 бр. са с композитни PK, и са "междинни" таблици, които служат за връзка между 2 таблици с отношение n:m . Нещо като (idTableLeft, idTableRight, Value)

Чудя се, дали съотношението между бройките на разните видове таблици е правилно? ;)



Тема Re: AutoInc и Генераторинови [re: Miro]  
Автор fiffy ()
Публикувано06.06.05 23:44



Следях всички дискусии около статията и честно казано смятам че е прекалено тенденциозна и пресилена. И за пореден път представя едно крайно мнение, базирано на принципи и идеализъм, а не на практическа стойност.

За мен, идеята на АутоИнк е точно да се спести работа на програмиста. Има хиляди начини да се генерират уникални стойности, но няма груг начин, който напълно да елиминира нуждата от каквито и да е познания за начина на генериране. Всичко което един програмист очаква от това поле е точно уникална стойност, бе никаква необходимост от какъвто и да е контрол върху нея, по простата причина че такъв не е необходим - каква е стаийността не е от значение, защото тя не носи никаква информация.

Ето и няколко коментара по основните точки на статията:

1. Не може да се insert-ва произволна стойност в това поле (освен със "специални" разширения на съответната база данни).
2. Не може да се задава начална стойност на това поле, от което да започне генериране.
3. Не може да се генерират стойности с променлива стъпка.
4. Не може да се прескача дадена област от стойности (например стигнал е AutoInc-а до 1000 - не може да се прескочат 2000 стойности и да се продължи от 3000).

Всички точки по-горе сочат че АутоИнк не е полезен защото програмиста няма контрол върху него. Но това е точно идеята - да няма контрол. По този начин никога и никой неможе да въведе грешна стойност, никога и никой неможе да обърка каквото и да било; нови програмисти не трябва да заят нищо за това поле; всичко е чисто и ясно и ако друго приложение трябва да работи с тази база, неговите програмисти знаят какво да очакват от полето. Точно това е силата - в простотата на този вид поле. Когато се работи в екип от много хора, няма нищо по-полезно от твърди стандарти и АутоИнк е точно това - просто концепция която е ясна на всяко хлапе и на всеки ветеран.

Защо въобще бих искал да въведа прозиволна стойност е полето - ако тази стойност няма никакъв смисъл (не носи информация), едно приложение никога не би имало нужда да специфицира стойността.
Защо бих искал да дефинирам начална стойност или стъпка или области - не това е целта на подобно поле. Ако искам да разграничавам записи базирано на области на това поле, много по-добре е да си направя друго поле в таблицата, отколкото да разчитам на странни правила като ИД МОД 5 = 3 или подобни.

5.Всички средства за програмиране изпитват редица проблеми с това че стойноста на полето се генерира от самия сървър. Затова се налага дадения компонент или клас да прави задължително refresh-ване на данните след като са изпратени към сървъра, за да се изтегли генерираната стойност.
Това не е проблем - това е предимство. По този начин базата е цяла. Какво ще стане ако 5 приложения трябва да работят със същата таблица - и 5-те ли ще трябва да генерират стойности по същия начин. Ами е ако публик сървис? Всеки който трябва да работи с таблицата ще трябва предварително да бъде инструктиран по кой точно начин се генерират стойностите.

6.Не е известна стойноста на полето преди то да бъде изпратено към сървъра (това е доста полезно при системи със сложни връзки между различни модули).
Какъв е проблема тук? Защо въобше бих искал да зная стойността преди да е създадена? В случите които искам да я зная, след създаване на записа мога да си я поискам. Това е напълно аналогично с първо поискване на стойността и после въвеждане на записа.

7.Силна зависимост от базата данни. Ако използвате такива полета вашето приложение става силно зависимо от текущата база данни и прехвърлянето на приложението към друг сървър става доста трудно. AutoInc полета има в MS SQL, MS Access и MySQL (доколкото чувам по форумите), но такива полета няма със сигурност в Firebird, Interbase и Oracle (не зная как е положението при DB2).
Добре, а ако реша да мигрирам от Фиребирд, на МССЯЛ, нали МССЯЛ няма да има въпросния генератор? Това не е ли същия (и даже по-голям) проблем?

За мен генераторите имат напълно различен смисъл и не би трябвало да се използват вместо АутоИнк полета. Могат да се използват, но за мен това е чиста загуба на ресурси и създаване на по-голяма възможност за проблеми и по-трудна разбота с базата. В реалния свят, програмисти и потребители на базите се менят прекалено често и колкото повече информция е необходима на един нов програмист да работи с дадена база, толкова по-големи са шансовете за проблеми и толкова по неефективна е системата като цяло.

Редактирано от fiffy на 06.06.05 23:45.



Тема Re: AutoInc и Генераторинови [re: Miro]  
Автор salle (един такъв)
Публикувано07.06.05 04:33



Сега се сещам, че бях мяркал тази твоя статия, но просто тя попадна в кюпа на "многото"

Радвам се, че поне схващаш същността на GPL много по-добре от доста хора. За съжаление дори защитниците на GPL не винаги са наясно с него.

Колкото до изненадата ти от

тя само показва, че не си проучил нещата преди да пишеш

За съжаление...

Ако знаеше малко за историята на MySQL и MySQL AB (а това е нещо което повтарям до втръсване вече на доста конференции и семинари) нямаше да намериш нищо чудно в съдържанието на частта MySQL.com

То е ... ами най-просто казано бизнес ориентирано.

За разлика от частта Developers Zone или която между другото беше основното съдържание на уеб сайта ни допреди време.

Да си признай честно не харесвам особено маркетинга и рекламата, но когато компанията ти играе на конкретен пазар просто трябва да се съобразява правилата му. При това става въпрос за пазар с традиции ...

Защо казвам, че нямаше да се изненадаш ако беше прочел малко повече?

Защото компанията MySQL AB е създадена от авторите на MySQL след като MySQL вече беше придобила популярност като GPL продукт. И след като MySQL от самото си начало е създаден с идеята да се печелят пари - първо като вътрешнифирмено решение, после като свободен продукт лицендзиран под собствен лиценз и чак от 2001 под GPL (MySQL AB е регистрирана през 2001)

Тъй, че не няма " ... рекламна фирмичка .. хванала MySQL в крачка че не са си подновили домейна и са им взели сайта, настанявайки си неприятните и натрапващи реклами на мястото, където е стоял един велик Open Source проект."

Има една един Open Source проект (дали е велик или не не се наемам да съдя) чиито автори са решили да опитат да изградят бизнес базиран на този именно проект и които на даден етап са освен програмисти бизнес са взели на работа и търговци и специалисти по маркетинг и т.н. и т.н.

Ако фирмата ти е от 5 човека нормално е шефът да се занимава и със счетоводство а програмистите с търговия и т.н. но при 180 нещата са други...

Както и да е. По-лошото е, че статията оставя впечатлението, че не познаваш MySQL, но пък си готов да го обявиш за "за нищо не става"

Виж ако беше казал, че не MySQL просто не ти харесва или че не желаеш да пробващ MySQL "ей тъй на !!!" или пък, че няма начин да използваш MySQL за конкретна задача защото xyz това биха били аргументи достойни за уважение.

Твоите "аргументи" са в стил: "Абе вие селяните с Опелите!" "Пък вие Голфаджиите къде с тия каруци " "Що ги карате тея боклуциииии! Само Пежо!"

Нямам нищо против да не харесваш MySQL. Всеки има право на предпочитания.

Аз никога не успях да харесам нито Interbase нито Firebird, но от това не правя изводи за качеството им. Аз и прословутата бира Гинес не харесвам, но това не значи, че не я бива за нищо

Навремето харесвах Oracle, но това беше отдавна ... още по времето когато транзакциите в Orcale бяха опция с отделна цена.



Тема Re: AutoInc и Генераторинови [re: salle]  
Автор Miro ()
Публикувано07.06.05 10:41



Радвам се, че поне схващаш същността на GPL много по-добре от доста хора. За съжаление дори защитниците на GPL не винаги са наясно с него.
Мда... доста объркана работа с толкова много Open Source лицензи.

Колкото до MySQL-а - никога преди това не съм се интересувал от него. Просто не мога да го използвам като DB сървър, защото за системите, които разработваме това да нямаш транзакции (отскоро ги има в MySQL), да нямаш тригери, SP-та и разни други подобни (мисля че и view-та няма) е недопустимо. Няма как да си изградим системата (която спада в графата Enterprise приложения с доста тежка бизнес логика). Но все пак да не се отплесваме в тази тема да обсъждаме функционалните възможности на MySQL. Ако някой иска да поговорим на тази тема - нека направи отделна тема тук. Лично на мен ще ми е интересно да разбера в повече подробности какво има и какво няма MySQL-а от "първа ръка".

Основната цел на статията беше да накарам много хора да се замислят за това какво е Open Source и бе провокирана от все повече теми по форумите за лиценза на MySQL. Затова и в статията съм използвал не строго "научни" похвати за изразяване. Изобщо цялата работа по "изненадата" ми и т.н беше да накара хората да обърнат внимание на лицензните режими на Open Source софтуера. И изобщо нямам намерение в блога си да пиша статии, които приличат на някакви сухарски лекции на гл.асистенти (или доценти) от университетите (нищо не знаят но приказват с разни сложни думички)

Аз принципно не харесвам много бизнес ориентираното мислене, но определено MySQL са се справили много добре в "печеленето на пари" от идеята за Open Source-а.

--
Miroslav Penchev



Тема Re: AutoInc и Генераторинови [re: TTRex]  
Автор Miro ()
Публикувано07.06.05 11:20



Добра е статията...

Ако трябва аз да направя равносметка (всички бройки са приблизителни):
- 200 с генератори без тригер (генериране на ID през сорса)
- 40 таблици със симулация на AutoInc (генератор + тригер)
- 10 с естествен РК
- 5 с композитен РК
- 1 физическа таблица за всички "справочници" (аз ги наричам lookup)

--
Miroslav Penchev



Тема Re: AutoInc и Генераторинови [re: fiffy]  
Автор Miro ()
Публикувано07.06.05 11:58



За мен, идеята на АутоИнк е точно да се спести работа на програмиста.
Напълно си прав но това не означава че резултатите ще се по-добри във всички ситуации.

Всичко което един програмист очаква от това поле е точно уникална стойност, бе никаква необходимост от какъвто и да е контрол върху нея, по простата причина че такъв не е необходим - каква е стаийността не е от значение, защото тя не носи никаква информация

Това може да бъде вярно (макар че не е задължително) само за изключително прости бази данни.

Защо въобще бих искал да въведа прозиволна стойност е полето - ако тази стойност няма никакъв смисъл (не носи информация), едно приложение никога не би имало нужда да специфицира стойността.

Виж сега - как ще пренебрегваш така това поле - това е най-важното поле от цялата таблица. То ти носи уникалноста на данните в един запис. Как ще merge-неш данни от два (и повече източника) без да контролираш това поле??? Как ще обработиш ситуациите при конкурентен update към един и същ запис без да работиш с това поле??? Тези и много други са все ситуации от реалните системи при многопотребителска работа.

Това не е проблем - това е предимство. По този начин базата е цяла. Какво ще стане ако 5 приложения трябва да работят със същата таблица - и 5-те ли ще трябва да генерират стойности по същия начин. Ами е ако публик сървис? Всеки който трябва да работи с таблицата ще трябва предварително да бъде инструктиран по кой точно начин се генерират стойностите.

Нямам си и на идея какво искаше да кажеш с това

Какъв е проблема тук? Защо въобше бих искал да зная стойността преди да е създадена?

А как ще insert-неш записи едновременно в няколко таблици, които имат връзки по това поле? Трябват специални похвати (които са налични в сървърите, които имат AutoInc полета) за да получиш току що генерираното ID и след това да продължиш с insert-ването на записите от свързаната таблица и т.н. докато insert-неш всички свързани таблици. Имам места в системата където наведнъж се insert-ват записи в 7-8 свързани таблици! И аз след всяка таблица, трябва да "ходя" до сървъра за да получа стойноста, за да я сложа тази стойност в съответното поле от другата таблица. Извинявай но това е прахосване на ресурсите на сървъра - всеки запис след записване, трябва да го прочета отново.

Добре, а ако реша да мигрирам от Фиребирд, на МССЯЛ, нали МССЯЛ няма да има въпросния генератор? Това не е ли същия (и даже по-голям) проблем?

Единствения проблем е с MSSQL. Но там лесно се симулират генератори. Иначе AutoInc трябва да се симулират в FB, Oracle, DB2 и не знам къде още.

За мен генераторите имат напълно различен смисъл и не би трябвало да се използват вместо АутоИнк полета.

Тук си в голяма грешка - логическия смисъл и на двете е един и същ: да ти дадат гарантирано уникална стойност, дори и две (и повече) конкурентни връзки да поискат такава стойност в един и същ момент.

--
Miroslav Penchev



Тема Re: AutoInc и Генераторинови [re: Miro]  
Автор Mixy (миксер)
Публикувано07.06.05 12:33



> Няма как да си изградим системата (която спада в графата Enterprise приложения с доста тежка бизнес логика).

Хм, ако ще правиш тежък Enterprise, то FB изобщо не е най-удачния избор, нищо, че е free - просто няма да издържи на натоварването. Едно е да му пуснеш 5-6 потребителя, друго 50-60, а за 500-600 просто забрави. Огледай се за DB2 или Oracle, лицензите и без това се плащат от клиента.

Mixy


Тема Re: Ама ти си повтаряш като развален грамофоннови [re: Miro]  
Автор salle (един такъв)
Публикувано07.06.05 12:55



" логическия смисъл и на двете е един и същ: да ти дадат гарантирано уникална стойност "

Пак ще го кажа. В голяма грешка си.

Генерирането на уникални стойности е страничен ефект. Главната задача на auto_increment е генерирането на последователност

Също както отоплението от ТЕЦ е страничен продукт на производството на електрическа енегрия. Твоите аргументи са все едно да доказваш, че след като предпочиташ да се отопляваш с локално отопление значи ТЕЦ-овете са безсмислени.




Страници по тази тема: 1 | 2 | 3 | >> (покажи всички)
*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.