Interbase, Gen_ID
3 отговора
442 прегледа
Interbase, Gen_ID
Искам да подпитам дали е добре като подход:
Сървъра е Interbase.
В базата на всяка таблица имам поле ID integer primary key, което е унификатора на записа. Съответно когато записвам нов запис трябва по някакъв начин да избера и подходяща стойност за това поле. Самото приложение ми е клиент-сървър, работи в мрежа. Досега го правех по следния начин : В една таблица RECCOUNTS има 2 полета: TableName и CurrentNо, съответно за всяка таблица каква е последната стойност за ID-то и. Съответно една stored-procedura
CREATE PROCEDURE GETNEXTID ( TBLNAME VARCHAR(32))
RETURNS (OUTID INTEGER)
AS
begin
SELECT CURRENTNO+1 FROM RECCOUNTS WHERE TABLENAME = :TBLNAME INTO :OUTID;
UPDATE RECCOUNTS SET CURRENTNO = CURRENTNO+1 WHERE TABLENAME = :TBLNAME;
suspend;
END;
и така си генерирам ID-та. Това обаче не е много добро като бързодействие май. От друга страна INTERBASE и така и така си има вградени генератори, та питанката ми е струва ли си да ползвам тях (все пак гарантират че независимо от броя портебители които в момента викат генератора, генерираните ID-та винаги ще са уникални). Проблема е че за всяка таблица трябва да има и генератор, ако съм разбрал правилно принципа, което май не е много добре. Мнения?
Сървъра е Interbase.
В базата на всяка таблица имам поле ID integer primary key, което е унификатора на записа. Съответно когато записвам нов запис трябва по някакъв начин да избера и подходяща стойност за това поле. Самото приложение ми е клиент-сървър, работи в мрежа. Досега го правех по следния начин : В една таблица RECCOUNTS има 2 полета: TableName и CurrentNо, съответно за всяка таблица каква е последната стойност за ID-то и. Съответно една stored-procedura
CREATE PROCEDURE GETNEXTID ( TBLNAME VARCHAR(32))
RETURNS (OUTID INTEGER)
AS
begin
SELECT CURRENTNO+1 FROM RECCOUNTS WHERE TABLENAME = :TBLNAME INTO :OUTID;
UPDATE RECCOUNTS SET CURRENTNO = CURRENTNO+1 WHERE TABLENAME = :TBLNAME;
suspend;
END;
и така си генерирам ID-та. Това обаче не е много добро като бързодействие май. От друга страна INTERBASE и така и така си има вградени генератори, та питанката ми е струва ли си да ползвам тях (все пак гарантират че независимо от броя портебители които в момента викат генератора, генерираните ID-та винаги ще са уникални). Проблема е че за всяка таблица трябва да има и генератор, ако съм разбрал правилно принципа, което май не е много добре. Мнения?
Re: Interbase, Gen_ID
------------------------------------------------------------------------------------------------------
Проблема е че за всяка таблица трябва да има и генератор, ако съм разбрал правилно принципа, което май не е много добре.
------------------------------------------------------------------------------------------------------
Това не е така. Можеш да ползваш един генератор за колкото таблици искаш.
Тук преди време се завихри един спор за AutoInc срещу генератори...
Всъщонст това според мен е най голямото предимство на генераторите. Пример: Имаш документ, който съдържа редове с различни структури на записа. Правиш си толкова таблици, колкото са типовете редове и ползваш ЕДИН генератор за ID.
Проблема е че за всяка таблица трябва да има и генератор, ако съм разбрал правилно принципа, което май не е много добре.
------------------------------------------------------------------------------------------------------
Това не е така. Можеш да ползваш един генератор за колкото таблици искаш.
Всъщонст това според мен е най голямото предимство на генераторите. Пример: Имаш документ, който съдържа редове с различни структури на записа. Правиш си толкова таблици, колкото са типовете редове и ползваш ЕДИН генератор за ID.
Re: Interbase, Gen_ID
Логично :)
Май много се бях вглъбил в идеята че като е ID, ще е с последователни стойности...иначе ОЧЕВИДНО няма проблем да си се ползва за няколко таблици генератора...забележката ми беше неуместна....а темата за генераторите и AutoInc-а беше наистина интересна.
Мерси!
Май много се бях вглъбил в идеята че като е ID, ще е с последователни стойности...иначе ОЧЕВИДНО няма проблем да си се ползва за няколко таблици генератора...забележката ми беше неуместна....а темата за генераторите и AutoInc-а беше наистина интересна.
Мерси!
Re: Interbase, Gen_ID
Не е проблем да има и на всяка таблица генератори. Хората говорят за бази данни с над 500 таблици, още толкова процедури и генератори. Всичко си работи.