Pesquisar este blog

terça-feira, 18 de agosto de 2015

Banco de dados para o sistema Web de Cadastro de Usuários

Neste post vamos discutir como montar um banco de dados para um cadastro de usuários para um sistema web simples.

Estrutura do Banco de dados

Ao desenvolver um sistema devemos inicialmente pensar em como dividir os dados, que serão utilizados naquele sistema. Pensando-se em um sistema de armazenamento comumente utilizado, como um banco de dados SQL, devemos pensar também em normalização de dados.

Normalização de dados

Normalização de dados são um dos passos que devem ser executados ao se planejar um banco de dados. A normalização consiste na divisão dos dados, afim de evitar uma replicação de dados. Por exemplo, não faz sentido termos mais de uma tabela no banco de dados, que esteja armazenando emails. Portanto, pensar em uma tabela de emails faz sentido.
Para termos um banco de dados normalizado, quanto mais separados e isolados estiverem os dados, melhor.
Por isolação dos dados, entenda que o intúito aqui é não replicar um dado em mais de um lugar. Por exemplo em uma tabela de endereços, se tivermos um banco denormalizado, todos os dados ficariam em apenas uma tabela. Então caso tivéssemos 10.000 usuários morando na cidade de São Paulo, teríamos a entrada São Paulo, 10.000 vezes nesta tabela, portanto este dado estaria replicado.
Existem múltiplas formas de se escrever São Paulo, com e sem acento, maiúsculo e minúsculo, e depender de um usuário digitar estas informações, faz com que os dados no sistema fiquem muito diferentes. Com isso, depois de um tempo ficará muito difícil conseguir extrair os dados de quantos e quais usuários vivem na cidade de São Paulo, o que pode ser muito útil para se planejar uma promoção.
Um sistema de armazenamento de dados de endereço, totalmente normalizado teria tabelas para armazemanento dos tipos de Logradouros, das Ruas, Bairros, das Cidades, dos Estados e uma tabela que agregaria todos estes dados, com o número, formando assim o endereço.
A normalização dos dados de um sistema gera uma economia de armazenamento, já que os dados quase não seriam replicados. Porém, como para se obter um dados deveríamos ler várias tabelas, isso faz com que a busca dos dados fique um pouco mais lenta, já que cada operação de leitura em uma tabela é uma operação para o banco de dados, se tivermos tabelas muito grandes isto pode acarretar que udma operação de leitura leve muito tempo.

Isolamento dos dados

Alguns dados, considerados sensíveis, devem ficar isolados em uma tabela separada, já que caso alguém invada o seu sistema de banco de dados, fique mais difícil conseguir juntar os dados sensíveis aos seus verdadeiros donos.
Pode-se também usar níveis de acessos diferentes nestas tabelas, por exemplo, apenas alguns usuários terem acessos aos dados destas tabelas, ou mesmo usuários diferentes com permissão de acesso, Um acessa apenas a tabela usuários e outro acessa apenas a tabela de dados sensíveis.
Teremos uma discussão em aula a respeito de como modelar os dados deste sistema


Dados de um sistema de cadastro de usuários

Aqui serão enumerados os dados que iremos usar no cadastro dos usuários do nosso sistema:

Nome do usuário
Idade
Email
Endereço (rua, cidade, estado, bairro, cep, nr, complemento)
CPF, RG, ...
Senha
Disciplinas
Notas
Profissão

Parte da evolução desta disciplina serão as discussões de como dividir estes dados.

E isto também deve fazer parte de quem está construindo um sistema do zero. O banco de dados é uma das principais fontes de problemas, então é muito bom pensar nele com carinho.
Muitas vezes só descobrimos as falhas do nosso modelo, após o sistema estar em funcionamento e neste ponto, qualquer modificação dele é complicada, ainda mais em um sistema web, que deve ficar online 24h por dia, 7 dias por semana.

Além do banco de dados

Por ser um sistema web, devemos prever métodos para aliviar o banco e pensar em uma estrutura de serviços afim de suportar outros tipos de armazenamento de dados, que não um SQL.
Existe um grande movimento hoje, que prega a utilização de Bancos de dados NO-SQL, veja este NO é de Not Only (não apenas) e não uma negação dos bancos de SQL.
Um banco de dados SQL tem suas vantagens e suas limitações, por isso devemos pensar em como é possível contornar estas limitações.

Múltiplos acessos aos mesmos dados

Quando temos um sistema onde o mesmo dado é acessado diversas vezes, cabe o uso de um sistema de cache. O cache nada mais é do que um sistema de armazenamento de chave -> valor, definimos alguma coisa como sendo a chave, que deverá ser única, e a cada select, verifia-se no sistema de cache se os dados estão por lá, se estiverem, você não precisará ir ao banco de dados para coletar esteas informações, aliviando um pouco a sua carga.
Como os caches possuem armazenamento em memória, o acesso aos dados fica bem mais rápido, porém a quantidade de dados que podemos armazenar nele é bem limitada.
Com isso, devemos ter alguma maneira de expirar estes dados, e alguns dos sistemas de armazenamento possuem isso implementado. Você seta um timeout, e caso o dado não seja acessado durante aquele período estabelecido, ele simplesmente será descartado.
Uma outra estratégia de descarte, é descartar os dados mais antigos, quando a memória está cheia e não há mais espaço para armazenar, o sistema começa a descartar os dados mais antigos, antes de armazenar algo novo.

Bancos de Documentos

Existem alguns tipos de banco de dados que armazenam documentos. Estes bancos são bem úteis para armazenar dados de documentos, por documento podemos ter arquivos de texto, jsons, xmls e páginas htmls. Os buscadores da internet, por exemplo, indexam o conteúdo dos sites para que ao digitarmos algumas palavras, eles consigam achar as páginas que são mais próximas do que estamos procurando.
Existem uma série de algorítimos para calcular qual é a ordem de relevância de cada uma das páginas que estão armazenadas nestes bancos.
Este tipo de banco, geralmente não possui uma estrutura fixa, ou seja, você pode gravar mais de um tipo de dados diferente, em um mesmo índice, o que faz com que estes bancos sejam bem rápidos para a pesquisa, porém por não ter um modelo definido, torna-se difícil relacionar os dados e buscar ligações entre os dados.
Por serem feitos para armazenar documentos eles possuem uma grande capacidade de armazenamento.

Banco de dados Orientado a Objeto.

 Banco de dados orientados a objetos eliminam a necessidade de mapeamento entre os objetos a serem armazenados e os dados armazenados, uma vez que eles armazenam o objeto em si. Com isso a velocidade de inserção destes bancos de dados é bem elevada. Porém alguns tipos de consultas, principalmente as que possuem ligações entre os dados, como os relacionamentos, são difíceis de serem realizadas.
Algumas das implementações destes bancos entendem SQL, o que fez com que as consultas fossem realizadas mais facilmente.
Pouco código é necessário para armazenar e carregar os dados.

Banco de dados de Grafos

Banco de dados de armazenamento de grafos, são baseados na teoria dos grafos. Estes bancos armazenam os dados em forma de grafo e possuem três propriedades:
  • Os nós, que são as entidades, como pessoas, endereços, conta bancária
  • As propriedades, que são informações pertinentes a cada um dos nós, como amizades, conexões 
  • E finalmente, as linhas que conectam os nós, cada linha indica qual nó esta ligado a um outro nó.
Estes bancos são muito utilizados em redes sociais e são muito rapidos para fazer buscas de ligações a partir de um nó.
Apresentação

Nenhum comentário:

Postar um comentário