[firebase-br] Pedido de opinião

Rogerio Calixto roger.programador em gmail.com
Sex Out 30 14:00:34 -03 2009


Olá pessoal,

Estou estudando o Firebird e gostaria de opinião de vocês sobre algumas
questões

1)

Estou usando uma Trigger em conjunto com uma generator para criar um campo
autoincremental para as minhas Primaty Keys

Seto a Trigger como Before Insert da maneira abaixo:

BEGIN
   IF (NEW.CODFORNEC IS NULL) THEN
      NEW.CODFORNEC = GEN_ID(GEN_FORNEC, 1);
END

A minha dúvida: Qual o melhor método para fazer o controle autoincremental
Trigger ou Select Max() ?
2)

   No caso da trigger acima toda vez que uma inserção não é aceita devido à
uma violação da integridade, o generator é incrementado da mesma
   maneira e este código fica descartado

   Tem como evitar isso ?
3)

   Criei uma Tabela de movimentos para gravar entradas e saidas do estoque.
E uso um campo para espeficiar o tipo de lançamento: "E"  ou  "S".
   Com este campo eu controlo em uma trigger qual o código de lançamento
usarei: Se for "E" incremento um generator se for "S" outro e gravo o valor
no campo codmovto.
   Dessa maneira eu posso ter um mesmo código de movto lançado uma vez para
Entradas eoutra vez para saída, onde a Primaty Key é  Codmovto+Tipolan

   A trigger é essa abaixo:

    BEGIN
       IF (NEW.CODMOVTO IS NULL) THEN
       BEGIN
          IF (NEW.TIPO = 'E') THEN  NEW.CODMOVTO = GEN_ID(GEN_MOV_E,1);
          IF (NEW.TIPO = 'S') THEN  NEW.CODMOVTO = GEN_ID(GEN_MOV_S,1);
       END
    END
   Aqui a questão é: Estou no caminho correto ou existem formas melhores de
se trabalhar neste conceito

Se alguém puder me dar a sua opinião de acordo com suas experiências fico
muito agradecido

Obrigado e bom Final de Semana á todos

-- 
Rogério Calixto
Programador de Sistemas



Mais detalhes sobre a lista de discussão lista