Atila Cordeiro Biolchi
Atila Cordeiro Biolchi
Atila Cordeiro Biolchi
AVALIAÇÃO DA IMPLEMENTAÇÃO DE
REGRAS DE NEGÓCIO EM POSTGRESQL
Ijuí - RS
2017
ÁTILA CORDEIRO BIOLCHI
Ijuí - RS
2017
Dedico este trabalho a minha esposa Danieli Biolchi e meu
filho Luís Otávio de Oliveira Biolchi, que me forneceram
apoio em todo o período do curso,
além de me dar motivação para superar todas as
dificuldades durante a graduação.
AGRADECIMENTOS
Agradeço primeiramente ao meu filho Luís Otávio, que mesmo com pouca
idade soube compreender as minhas ausências e servir de motivação para alcançar o
objetivo final.
A minha esposa, Danieli, que sempre me deu força e coragem para superar as
dificuldades de cada etapa da graduação.
Por fim, agradeço ao Dionei Buske, Lucas Gerhardt e Júlio Beal que apostaram
no meu trabalho quando iniciei minhas atividades na Coordenadoria de Informática,
sem os benefícios fornecidos pela UNIJUÍ minha caminhada acadêmica não seria
possível, sou muito grato por isso.
"Você nunca alcança o sucesso verdadeiro a menos
que você goste do que está fazendo."
(Dale Carnegie)
RESUMO
Com o aumento da complexidade dos sistemas de informação cresce também as
dificuldades em manter e gerenciar as regras de negócio. O gerenciamento, a im-
plementação e o reuso destas regras podem ser determinantes para o aumento da
qualidade e produtividade no desenvolvimento do software. Desta forma, a utilização
das ferramentas existentes nos Sistemas Gerenciadores de Banco de Dados(SGBD)
podem ser uma alternativa para centralização de regras de negócio complexas. Grande
parte dos SGBD’s oferecem suporte para implementação de Procedimento, Funções
e Programação Procedural SQL, um deles é o PostgreSQL Database Management
System, distribuído sob uma licença Open Source, possibilitando assim ser objeto de
estudo do presente trabalho.
DB Database
PG PostgreSQL
1 INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2 REFERENCIAL TEÓRICO . . . . . . . . . . . . . . . . . . . . . . . . 14
2.1 Arquitetura multicamadas . . . . . . . . . . . . . . . . . . . . . . . 14
2.1.1 Camada de Apresentação . . . . . . . . . . . . . . . . . . . . . . . . 16
2.1.2 Camada de Regras de Negócio . . . . . . . . . . . . . . . . . . . . . 17
2.1.3 Camada de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.2 Implementação de regras na Camada de Negócio . . . . . . . . . 20
2.3 Implementação de regras na Camada de Dados . . . . . . . . . . 21
2.3.1 PostgreSQL e as Regras de Negócio . . . . . . . . . . . . . . . . . . 22
2.3.2 Funções definidas pelo usuário . . . . . . . . . . . . . . . . . . . . . 23
2.3.3 Stored Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.3.4 Linguagem procedural para SQL . . . . . . . . . . . . . . . . . . . . 25
5 CONCLUSÕES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
REFERÊNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
ANEXOS 47
A criação das regras de negócio são muito complexa, pois necessita-se ter uma
ampla visão da funcionalidade que se quer implementar. Por vezes o desenvolvimento
se dá com o auxílio da utilização de tabelas de decisão ou árvores de decisão. Também
é possível determinar graficamente a sequência de execução da regra de negócios
usando um fluxo de regra ou casos de uso.
Há também uma camada destinada ao banco de dados, nesta camada por de-
finição, estão todas as bases de dados que o sistema acessa.Sistemas Gerenciadores
de Banco de Dados (SGBD), tem a incumbência de organizar os dados.
dados. O sentido é garantir que uma organização esteja cumprindo seus objetivos. As
melhores regras de negócios são claramente definidas, anotadas e implementadas.
O mesmo autor cita ainda que podem ser encontradas em todos os tipos de
aplicativos. Finanças e seguros, e-business, transporte, telecomunicações, serviços ba-
seados na Web e personalização, e que estes são apenas alguns dos muitos domínios
empresariais regidos pelas regras de negócios. Cada um domínios de negócio com-
partilha a necessidade de transmitir estratégias, políticas e regulamentos de negócios
para o pessoal de tecnologia da informação para inclusão em aplicativos de software.
Com base nas definições de regras de negócios, (SANTOS, 2014) afirma que
as linguagens de programação fornecem algum mecanismo de mapeamento para gerar
código de execução de nível mais baixo, geralmente classes de linguagem de uso geral.
Essas classes podem ser usadas como uma implementação parcial de um componente
de negócios maior. Uma consequência imediata desta abordagem é que o ciclo de
vida de implementação das regras de negócios está alinhado com o ciclo de vida do
componente de negócios ao qual elas pertencem.
As regra por vezes podem ser claras, no entanto, em alguns casos podem
ambíguas, e segundo (HAY; HEALY, 1997) na maioria das vezes, contêm mais de uma
ideia, e claramente não fazem nem sempre são originadas de uma análise profunda.
Banco de dados usando ações automatizadas que ocorrem cada vez que uma tabela é
modificada. Ou seja, as ações ou regras tornam-se parte do modelo de dados e não
o código da sua sua camada de regra de negócio. O mesmo autor afirma que não é
possível ignorar este tipo de implementação. Tendo em vista que em alguma momento
analistas ou gerentes de bancos de dados irão ter esta necessidade.
Seguindo este mesmo linha de pensamento (DATE, 2011) afirma que é possível
afirmar a grande maioria dos os sistema vinculados a um SGBD, utilizam regras
vinculadas à camada de dados, tendo em vista que todos os softwares se utilizam de
views, trigger’s ou functions. Pode se dizer que isso é prática inerente aos sistemas de
informação modernos.
As UDF’s podem ser executadas por outras consultas sem ter que escrever
todo SQL novamente. Para executar o código da UDF é necessário fazer uma chamada
para a função com o seu nome e todos os parâmetros entre parênteses. O uso de
funções também tornam o código mais claro, podem reduzir a duplicação de linhas e
regras que podem atrapalhar a compreensão de um script.
No artigo do autor (SANTOS, 2014), ele sintetiza que Uma Stored Procedure,
é uma coleção de instruções implementadas com linguagem plSQL que depois de
armazenadas, ficam vinculadas ao SGBD de forma pré-compilada, até o momento
que que alguma aplicação ou ação faz sua execução. Assim como VIEWS fazem
com relatórios e dados estatísticos escalonáveis, os procedimentos armazenados
encapsulam tarefas repetitivas, desde uma simples inserção, passando por inserções
por lote, alterações, ou ainda como cita o mesmo autor, instruções mais complexas,
25
Com o Delphi o desenvolvimento se torna mais rápido, pois permite que regras
implementadas no SGBD sejam executadas de forma rápida e facilitada. O Delphi pos-
sibilita um nível de abstração elevado, o que contribui para o aumento de produtividade
do desenvolvimento de software.
SGBD, tendo em vista que, o objetivo não é eliminar a camada de regra de negócio
e sim estender parte das regras para o SGBD. No entanto, isso deve ser feito com
controle e em casos específicos.
3.4 Visões
Uma visão é um objeto de dados que não contém dados, ou seja, o conteúdo
da visão é resultante de uma tabela de base, as views, são representações não
materializadas de uma entidade do banco de dados.
A diferença entre uma visão e uma tabela é que as as visões são definições
construídas em cima de outras tabelas. Se os dados forem alterados na tabela de
origem, a mesma alteração será refletida na view. Uma visão pode ser construída em
cima de uma ou várias tabelas.
1 CREATE [ OR REPLACE ]
2 [ TEMP | TEMPORARY ]
3 [ RECURSIVE ]
4 VIEW name [ ( column_name [ , ...] ) ]
5 [ WITH ( view_option_name [= view _optio n_valu e ] [ , ... ] ) ] AS
query
1 SELECT *
2 FROM get_dados_os () ;
1 SELECT *
2 FROM get_dados_os ()
3 where os = 201;
Fica perceptível que uma função ou uma visão tem muitas semelhanças,
no entanto, alguns recursos podem ser adicionados a uma função, melhorando seu
desempenho, o que não ocorre em uma View.
Na figura 11 fica evidente a diferença entre a uma Function e uma View, tendo
em vista que dependendo do tipo de implementação o desempenho da Function será
muito melhor do que em relação a View.
Fica evidente que este tipo de implementação permite que a camada de regras
de negócio fique mais simples, e consequentemente mais organizada.
34
Stored Procedure permitem ainda que outras implementações seja feitas, por
vezes, regras muito complexas do ponto de vista da orientação a objetos podem se
tornar simples em uma implementação no banco de dados.
Estas execuções ocorrem com base em alguma ação feita em tabela ou registro
como por exemplo, um insert, delete ou update. A trigger está relacionada a uma
entidade, ao executar uma destas ações é possível dispará-lo para executar alguma
tarefa.
Os gatilhos podem retornar valores nulos para indicar que não realizaram
nenhuma atualização e que o resto da operação deve ser ignorada. Caso haja outras
Triggers, estas não serão disparadas. Caso contrário, um valor não nulo pode ser
retornado, para indicar que o gatilho executou a operação solicitada.
4 IMPLEMENTAÇÃO DO ESTUDO DE
CASO
4.2 A implementação
• Ordens_Servico
• Alteracoes_OS
• Situacoes_OS
Partindo da finalidade desta aplicação, optou-se por utilizar uma Stored Proce-
dure, que aplicará a regra escrita em linguagem PL/SQL.
A figura 17, é o objetivo final, pois é esta instrução que irá inserir os dados na
tabela ALTERACOES_OS.
Vale aqui ressaltar que para poder efetuar a inserção na tabela ALTERA-
COES_OS, são necessários as seguintes informações: ID_ALTERACAO,
DT_ALTERACAO, HR_ALTERACAO, ID_USUARIO, ID_ORDEM_SERVICO,
ID_SITUACAO, ID_TECNICO.
1 select a . dt_alteracao ,
2 s . descricao ,
3 p . nome
4 from alteracoes_os a ,
5 situacoes_os s ,
6 usuarios u ,
7 pessoas p
8 where a . id_situacao = s . id_situacao and
9 a . id_usuario = u . id_usuario and
10 u . id_pessoa = p . id_pessoa and
11 a . id_ordem_servico = 123
12 order by dt_alteracao desc ;
Desta modo pode ser afirmado que a implementação feita no presente capítulo,
é plenamente plausível em um ambiente empresarial, onde exista esta necessidade,
pois é genérica e pode atender a grandes volumes de dados.
5 CONCLUSÕES
Assim sendo, conclui-se que a presente pesquisa é valiosa pelo fato de que
trada de um tema pouco abordado de forma objetiva, além disso, apresenta relevante
embasamento teórico, aliado a análise e implementação em um cenário real.
A presente pesquisa permite melhorias, não sendo uma obra finita principal-
mente porque o tema não é limitado. Desta forma não há verdades absolutas, pois cada
cenário, seja ele hipotético ou real, sempre será possível identificar pontos positivos e
pontos negativos.
Assim sendo, para trabalhos futuros, seria interessante traçar um paralelo entre
as implementações de regras de negócio no banco de dados e na camada de dados,
utilizando ferramentas de benchmark, para medir desempenho, cabendo ainda análises
de trafego de rede e métricas de tempo de implementações de regras de negócio.
REFERÊNCIAS
BPMN.IO. Site web-based tooling for bpmn, dmn and cmmn. Endereço
eletrônico:<https://bpmn.io/>Acesso em 02$jun.2017, 2016.
DATE, C. J. SQL and relational theory: how to write accurate SQL code. [S.l.]: "O’Reilly
Media, Inc.", 2011.
FEUERSTEIN, S.; PRIBYL, B. Oracle pl/sql Programming. [S.l.]: "O’Reilly Media, Inc.",
2005.
HAY, D.; HEALY, K. A. Guide business rules project, final report-revision 1.2. GUIDE
International Corporation, Chicago, 1997.
MARR, B. Big data overload: Why most companies can’t deal with the data explosion.
Forbes Magazine, 2015.
24
82
61
62 INSERT INTO alteracoes_os VALUES (1 , ’ 2018 -05 -19 ’ , ’ 2017 -06 -24
02:23:23.178067 ’ , 2 , 1 , 5 , 1) ;
63 INSERT INTO alteracoes_os VALUES (2 , ’ 2018 -05 -10 ’ , ’ 2017 -06 -24
02:23:23.178067 ’ , 1 , 4 , 1 , 2) ;
64 INSERT INTO alteracoes_os VALUES (3 , ’ 2017 -01 -09 ’ , ’ 2017 -06 -24
02:23:23.178067 ’ , 2 , 6 , 4 , 1) ;
65 INSERT INTO alteracoes_os VALUES (4 , ’ 2018 -01 -10 ’ , ’ 2017 -06 -24
02:23:23.178067 ’ , 3 , 3 , 1 , 2) ;
66 INSERT INTO alteracoes_os VALUES (5 , ’ 2018 -03 -11 ’ , ’ 2017 -06 -24
02:23:23.178067 ’ , 4 , 5 , 5 , 1) ;
67 INSERT INTO alteracoes_os VALUES (6 , ’ 2017 -03 -07 ’ , ’ 2017 -06 -24
02:23:23.178067 ’ , 4 , 3 , 4 , 1) ;
68 INSERT INTO alteracoes_os VALUES (7 , ’ 2018 -05 -15 ’ , ’ 2017 -06 -24
02:23:23.178067 ’ , 2 , 3 , 3 , 2) ;
69 INSERT INTO alteracoes_os VALUES (8 , ’ 2017 -09 -03 ’ , ’ 2017 -06 -24
02:23:23.178067 ’ , 4 , 8 , 5 , 1) ;
Listing B.1 – Fonte: Própio Autor