Artigo Clube Delphi 78 - Uma abordagem prática de Stored Procedures e Triggers

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (0)  (0)

Artigo da Revista Clube Delphi Edição 78.

 

Esse artigo faz parte da revista Clube Delphi Edição 78. Clique aqui para ler todos os artigos desta edição

IB/FB

Uma abordagem prática de Stored Procedures e Triggers

 

Quando começamos o desenvolvimento de um sistema, algumas perguntas que não querem se calar: “Quais regras de negócio ficarão no banco de dados? Quais devem ficar na camada servidora? E quais ficariam na camada cliente?”. Responder a essas três perguntas não é fácil. Se você coloca todas as regras no banco, corre o risco de sobrecarregá-lo. O mesmo vale para a aplicação servidora, seja ela cliente/servidor ou multicamadas. E no cliente? Devo colocar alguma regra?

Existem algumas sugestões básicas: quando você desenvolve uma aplicação Web, as regras mais simples você utiliza JavaScript para checar/validar no próprio navegador, não é mesmo? Campos obrigatórios, validação de datas, verificação de CPF e outras.

E as outras? Como decidir quais ficarão na aplicação servidora e quais ficarão no banco? Eu uso a seguinte lógica: se a regra envolve atualização em uma ou duas tabelas e com isso incluir/alterar um ou dois registros, prefiro deixá-la na camada da aplicação, pois muito provavelmente serão enviados um ou dois comandos SQL para o banco pela rede.

Agora, se a regra atualiza mais de duas tabelas e com isso temos que incluir/alterar vários registros, então é forte candidata a ficar no banco. Há também aquelas regras que mudam com muita freqüência. Prefira deixá-las no banco.

Obviamente que isso é muito relativo. Por exemplo: se o cliente tem um servidor de banco de dados dedicado, você pode colocar mais regras no banco, pois a máquina vai agüentar a carga de serviço. O melhor caminho mesmo é testar.

E é justamente isso que faremos. Partindo de um sistema semi pronto, com uma solução, digamos, pouco aconselhável de uma regra de negócio, vamos primeiramente colocar essa regra de maneira mais segura na própria aplicação. Depois vamos colocar a mesma regra no banco e assim poderemos analisar qual a melhor solução. Utilizaremos Delphi com o banco de dados Firebird. Sinta-se a vontade em utilizar outro banco de dados. Aliás, estou testando a versão Express do DB2 da IBM e estou gostando muito.

 

Nota: A criação de banco de dados no Firebird, bem como detalhes sobre configurações de conexões dbExpress, estão fora do escopo deste artigo. Você pode encontrar muitos artigos no portal, acessando www.clubedelphi.net/portal.

 

O sistema de exemplo

A aplicação CDEstoque (acho que já vi esse nome em algum lugar) é bastante simples. O modelo de dados está na Figura 1.

 

Figura 1. Modelo de Dados do CDEstoque

 

Não é a intenção aqui desenvolver uma aplicação completa, passo a passo. Por esse motivo algumas tabelas estão resumidas, com poucos campos, especialmente as tabelas de fornecedores e de clientes, e outras nem estão no modelo, como vendedores.

A aplicação tem o seguinte funcionamento: o cliente primeiramente faz um orçamento dos produtos que pretende comprar, inclusive com a forma de pagamento. O orçamento fica gravado no banco para posterior confirmação (Figura 2). Quando o orçamento é confirmado, o sistema grava os dados na tabela de venda, baixa o estoque, gera as parcelas a receber e grava a movimentação dos produtos.

 

Figura 2. A aplicação sendo executada

 

É justamente essa regra que vamos trabalhar. Para não tornar muito extenso o artigo, suprimi algumas verificações, como a de disponibilidade no estoque, a situação do cliente e coisas assim. No endereço de download do artigo temos as três versões do sistema, apresentadas adiante.

"

A exibição deste artigo foi interrompida :(
Este post está disponível para assinantes MVP

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?