Artigo do tipo ExemplosPráticos
Recursos especiais neste artigo:
Conteúdo sobre boas práticas.

Armazenamento de imagens no PostgreSQL e MySQL
O uso de imagens para ilustrar determinados tipos de informações é muito comum nos sistemas das mais diversas áreas. Por exemplo, em um sistema imobiliário é muito comum a necessidade de armazenar diversas fotos de determinado imóvel. Podemos citar também um sistema de vendas, onde pode ser muito útil apresentar uma ou mais imagens de determinado produto. Tal armazenamento pode ser realizado no banco de dados, desta forma facilitando e simplificando o trabalho do programador.

Neste artigo serão apresentadas metodologias para armazenamento de dados binários, em especial imagens, nos SGBDs MySQL e PosgreSQL. Além disso, o artigo apresenta metodologias que podem ser adotadas para armazenamento de arquivos em diretórios realizando o armazenamento fora do banco de dados. Neste contexto, será apresentada a sintaxe e função específica de cada banco para converter um arquivo de imagem em bytes e assim armazená-lo no SGBD. Ao final do artigo são apresentadas algumas dicas para o desenvolvimento de uma sistema que armazene imagens em Java.

Em que situação o tema útil
Para quem deseja conhecer as funcionalidades e tipos de colunas que podem armazenar dados binários em bancos de dados, este artigo introduz o assunto focando no armazenamento de imagens. Em outras situações, o leitor pode desejar o armazenamento de outros tipos de arquivos como o armazenamento de arquivos no formato .PDF (portable format document), ou ainda arquivos no formato DOCX, TXT , XML, HTML, etc.

O armazenamento de imagens é muito comum para as mais diversas aplicações e pode ser feito de várias formas. Para fins de esclarecimento, serão apresentadas três formas, sendo que uma delas será implementada ao longo do artigo:

· Armazenar a imagem apenas em diretórios com nomes associativos;

· Armazenar a imagem no banco de dados;

· Armazenar o nome da imagem no banco de dados e a imagem em diretórios com os mesmos nomes gravados no banco de dados.

Em todas elas podemos armazenar uma ou mais imagens para cada registro. Para exemplificar, vamos imaginar uma necessidade do mundo real: temos um cadastro do produto onde se deseja armazenar imagens do produto de diversas cores, ou de diversas faces do produto (de cima, de frente, de trás, etc.). Neste exemplo, perceba que cada produto pode ter diversas imagens ou mesmo nenhuma. Vale lembrar que podemos nos deparar com uma situação onde uma imagem pode estar associada a mais de um produto. Por exemplo, o produto laranja que pode ser fornecido por diferentes produtores. Apesar de possuir preços e outras informações diferentes, a imagem do produto é a mesma.

As três soluções para armazenamento apresentam vantagens e desvantagens. Vamos analisar cada solução e identificar os pontos fortes e fracos de cada uma.

O armazenamento em diretórios

O armazenamento em diretórios com nomes associativos exige um controle para a definição dos nomes das imagens. Tal controle deve ser rígido o suficiente para garantir que cada imagem seja fielmente associada ao registro ao qual deve ser relacionada. Um exemplo de tal tipo de controle é a utilização da sua chave primária (geralmente numérica) para compor o nome ou parte do nome do arquivo.

Como vantagem do armazenamento em diretórios, podemos citar a redução do volume de dados no banco de dados. No entanto, migrações tornam-se tarefas trabalhosas uma vez que a estrutura de diretórios e nomes dos arquivos deve ser mantida.

Como desvantagem podemos citar também a complexidade de realizar uma alteração. Supondo que desejamos realizar uma alteração de uma imagem de um registro, devemos primeiro deletar a imagem antiga e gravar uma nova imagem com o mesmo nome, ou forçar a substituição do arquivo. Em operações de exclusão de registros no banco de dados, deve ser desenvolvida uma rotina para exclusão das imagens. Para ilustrar este tipo de implementação, observe a Figura 1 ...

Quer ler esse conteúdo completo? Tenha acesso completo