sexta-feira, 13 de janeiro de 2017

Controle de estoque com o LibreOffice Base - parte 3: relacionamentos

      
     Nesta postagem daremos continuidade ao nosso programa de banco de dados gerenciador de estoques no Base, tratando agora dos relacionamentos de informações entre dados das tabelas.
       Há de se fazer algumas observações referentes às tabelas feitas. Na tabela Produto, além de alterar a propriedade Valor automático do campo produto, também precisamos modificar as propriedades Casas decimais para 2 nos campos preço_custo e preço_venda porque vamos trabalhar com valores monetários que utilizam duas casas decimais para os centavos. Temos que fazer isso para que possamos acrescentar os centavos aos valores dos custos.
Mas antes de continuar, caso tenha se perdido, acesse o que já fizemos em nosso banco de dados na Parte 1 e Parte 2
A sua lista de tabelas deve ficar como as mesmas configurações que apresentamos em nossa lista acima. É muito importante também que os nomes do banco (estoque.odb), das tabelas e dos campos sejam iguais aos desse tutorial, para evitar erros de referência mais a frente.
Os Tipos de campos Text se diferenciam. Veja como saber qual deve ser utilizado:
● Text [ Varchar ] - Todos os campos do tipo Text são Text [ Varchar ], pois este campo permite armazenar vários caracteres.
● Text [ Char ] armazena somente um caractere.
● Text [ Varchar_ignorecase ] é semelhante ao Text [ Varchar ] porém não faz distinção entre letras maiúsculas e minúsculas.
Exemplos:
● Text [ Varchar ] “Revista” não é a mesma coisa que “revista”
● Text [ Varchar_ignorecase ] “Revista” é a mesma coisa que “revista”

Os Relacionamentos

Pelo o que já mostramos na introdução ao base e também na construção das tabelas já é possível rabiscar como seriam construídas as relações no banco de dados. Se para as tabelas precisamos criar tipos de informações com campos de dados classificados em numéricos, textos ou decimais, era por uma razão: a inter-relação entre os tipos de informações. É justamente a construção do relacionamento entre os dados nas diferentes tabelas que faz com que um banco de dados tenha eficácia em sua tarefa de organizar dados para gerar informações e é isso que veremos neste tópico.
Para tabelas poderem relacionar-se entre si devemos deve-se proceder da seguinte maneira: clique no menu Ferramentas > Relações.... Por padrão no LibreOffice, quando vamos adicionar pela primeira vez as tabelas no editor de relações, a janela Adicionar tabelas é aberta e por meio dela poderemos adicionar quantas tabelas quisermos, adicionar uma a uma e criar relações entre duas por vez ou inserir todas, fechar a janela e partir para a criação de relações.

Do jeito mais fácil:
● Selecione a tabela e em seguida clique em Adicionar, para poder adicionar mais objetos para serem relacionados entre si;
● Adicione todas as tabelas e conclua fechando a janela Adicionar tabelas. Com isso terá menos janelas abertas e limpará a sua visão para o que importa.
Seu editor de relações vai ficar com as tabelas alinhadas como na figura abaixo.
Como resultado você retá cinco janelas contendo os nomes dos campos de nossas tabelas alinhadas e prontas para receberem os relacionamentos. Caso não consiga ver os textos, basta clicar com o mouse sobre a que estiver com problema, para selecioná-la, e segurando o mouse nas bordas, arrastar para expandir a altura ou largura.
Agora está tudo pronto para começar a brincadeira. Há mais de uma forma de se relacionar os dados de uma tabela com outra, mas aqui mostraremos o modo mais prático.
Vamos começar relacionando a tabela Cliente com a tabela Pedidos.
  • Com um clique com o botão esquerdo do mouse sobre o campo codigo_cliente da tabela Cliente (isto é, a tabela onde codigo_cliente é chave primária) e mantendo o botão pressionado arrasta-se o mouse até o campo codigo_cliente da tabela Pedidos (que embora tenha dados numéricos, não é a chave primária na sua tabela).
Com esse processo feito será estabelecida uma relação entre os dados de uma chave primária referente ao numero cadastral de um cliente para o número dele quando este efetuar o pedido de uma mercadoria para ser comprada. Ao final, o editor mostrará uma linha contínua ligando as duas tabelas pelos dados descritos acima com o número 1 ao lado do campo da tabela Cliente (que é a fonte de informação, ou seja, a origem do dado) e com a letra n ao lado do campo da tabela Pedidos (que tem o dado derivado da tabela clientes). Destaca-se a utilizada de um número 1 para n, ou simplesmente, o tipo “um para muitos”. Nesta relação, um cliente pode fazer muitos pedidos, ou muitos pedidos podem pertencer a um cliente específico.
Uma outra maneira de estabelecer a relação é clicando sobre um dos nomes de dados na tabela de origem e em seguida, na parte de cima, clicar no botão de relações. Na janela que abrir-se-á selecionamos do lado esquerdo e de cima a tabela que tem o dado original e no lado direito superior, a que tem o dado derivado. Na parte de baixo, à esquerda selecionamos qual o dado que tem a chave primária ou outro dado de origem (como seria no caso deste banco de dado, pois adotamos o uso do integer como fonte) e à direita, o que está na tabela e que se busca do dado da selecionada á esquerda. E mais abaixo temos as opções de tipo de relação, como por exemplo, se é de um para muitos ou para um entre outras opções.
Mas de qualquer modo o resultado obtido deve ser este:
Agora vamos à segunda relação: vincular a tabela Pedidos e a tabela DetalhePedido. Para tanto procederemos da mesma forma que antes, apenas mudaremos as tabelas, mas a lógica é igual:
  • Com um clique com o botão esquerdo do mouse sobre o campo codigo_pedido da tabela Pedidos (isto é, fonte ou origem de dados de cadastro) e mantendo o botão pressionado arrasta-se até o campo codigo_pedido da tabela DetalhePedido (que não é chave primária e buscará os dados cadastrados).
Após isso partiremos para mais um relacionamento: entre a tabela DetalhePedido e a tabela Produto, para poder criar o meio para que se façam os orçamentos e pedidos de compra ou venda de mercadorias em nosso programa de estoque:
  • Procedemos com um clique do mouse sobre o campo codigo_produto da tabela DetalhePedido (contém a chave primária do cadastro de produtos)e mantendo o botão pressionado arraste até o campo codigo_produto da tabela Produto, que não é chave primária e buscará dados daquela.
E agora vamos para o último relacionamento, desta vez entre a tabela de cadastro de Produto e a tabela de cadastro de Fornecedor. E os procedimentos se repetem novamente sem surpresas:
  • Clique sobre o item codigo_fornecedor na tabela de cadastro de Produto e arraste-o para o campo codigo_fornecedor da tabela de fornecedores.
Ao terminar isso teremos todos os relacionamentos prontos e seu mapa de relacionamentos deve ficar semelhante a figura a seguir.
Acreditamos que devem ter notado que entre a tabela Pedidos e a tabela Produto existe a tabela DetalhePedido. Esta tabela que criamos serve como uma ponte. Este tipo de relacionamento se chama de “muitos para muitos”, pois um único pedido pode conter vários produtos e também um produto pode estar em vários pedidos. Por exemplo, vamos imaginar o caso de uma empresa que venda equipamentos de combate a incêndio e receba os orçamentos por e-mail. Por dia a empresa pode receber vários pedidos de orçamentos de pessoas interessadas em adquirir seus produtos ou que precisem de seus serviços. Um único cliente pode precisar de uma completa rede hidráulica para se adequar às normas de segurança e exigidas no Auto de Vistoria do Corpo de Bombeiros (AVCB). Assim, a empresa criará a sua relação de produtos, com quantidades, preços e prazo de entra. É o orçamento de vendas para o único cliente, que se aceitar, adquirirá vários produtos da empresa.
Nosso tutorial é bem detalhado, no entanto, é possível que venham a ocorrer erros na hora de relacionar as tabelas e isso interferirá mais adiante, na criação de consultas e relatórios. Deve-se reparar bem que todos os campos que foram ligados são do tipo Integer (Inteiro). Se o editor retornar algum erro quando você estiver relacionando as tabelas volte no editor de tabelas e veja qual foi o tipo de dado que você atribuiu a este campo.

Com isso terminamos a fase de criação de relações entre as tabelas. No próximo tópico entraremos na parte da formulação das consultas, que servirão posteriormente para a base dos relatórios de controle e verificação dos estoques.