1. Неправильний, Interbase, Бази даних, статті

У чому він полягає … Ідея дуже проста – при додаванні записів отримуєте
максимальне значення ключа (select max (ID) from TABLE1), збільшуєте його на
деяку величину і використовуєте в запиті (insert into table1
values ​​(максимальное_значение_ключа +1 ,……) Недоліки цього способу досить
очевидні – при многопользовательской роботі виникають конфлікти, коли кілька
клієнтів, які пишуть в БД, отримують однакові значення ключа.

2. Нестерпний


У чому він полягає … Використання цього методу засноване на механізмі
ГЕНЕРАТОРІВ в Interbase. Генератор – це особливий механізм, який гарантує, що при
кожному зверненні до нього буде генеруватися новий ключ.

Синтаксис – CREATE GENERATOR <ім'я генератора>;

Далі можна встановити, з якої величини буде генеруватися ключ.

Синтаксис – SET GENERATOR <ім'я генератора> TO <початкове значення
генератора>;

Далі створюється процедура, що зберігається

CREATE PROCEDURE <ім'я процедури>
RETURNS (ID INTEGER)
AS
BEGIN
ID = GEN_ID (<ім'я генератора>, <прирощення генератора>);
END !!

Після цього в Delphi кидаємо на форму об'єкт TStoredProc, прописуємо в
властивостях Alias ​​і вибираємо ім'я процедури. При необхідності згенерувати
значення ключа пишемо щось типу:

…….
sp_InNaklTextId.ExecProc;
PRIM_KEY:=sp_InNaklTextId.Params[0].AsInteger;

І далі Prim_key використовуємо в запиті на додавання запису.

3. Стерпний


Ідея полягає в деякому видозміні 2 способи. Всі також оголошуємо
генератор, але от збереженої процедури більше немає, зате є тригер. Виглядає це
приблизно так:

create generator TABLE1_GEN;
set generator TABLE1_GEN to 0;
commit;

set term !! ;
create trigger TRG_TABLE1_INSERT for TABLE1
before insert
as begin
new.ID= GEN_ID(TABLE1_GEN,1);
end!!

set term ; !!
commit;


Далі при додаванні запису запит вказує у вигляді:

insert into TABLE1(name,adr)
values(“xxx”,”xxx”);

Загалом з'являється певна незручність при написанні запитів, так як
перше поле ключове, і треба вказати, що в нього запис не проводитися.

Головна ж перевага такого підходу в тому, що збільшується переносимість
програми між різними SQL серверами. Ідея створення автогенератора ключа не
нова – це і AutoIncrement поле в Paradox, і тип поля Identity в Ms SQL Server /
Sybase, і начебто теж якийсь тип поля в Oracle (на жаль не знаю точно). Але
ці механізми не стандартизоване і кожен реалізує їх по своєму. Описаний ж
вище підхід забезпечує переносимість, і, наприклад, одне з написаних мною
додатків, якщо не брати до уваги процедури, однаково працює і на
IB і на MS SQL.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*