|
Тема |
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
|
| |
|
|
|