Os dez erros mais comuns em projeto de Banco de Dados - Parte 1
Este artigo apresenta cinco dos dez erros mais comuns no processo de modelagem de um banco de dados, tanto no tocante à modelagem, quanto à manutenção e também o desempenho geral do banco de dados. Para isso, discutiremos tópicos associados ao uso da coluna auto-incremento como sua única chave, não utilização das características do SQL para proteger a integridade de dados, não uso de stored procedures para acessar dados, dentre outros.
Em que situação o tema é útil
Durante o desenvolvimento de um modelo de dados, evitar certos vícios e práticas pouco adequadas é especialmente útil para que o projeto como um todo alcance o êxito desejado ou que, ao menos, o retrabalho seja o mínimo possível.
Resumo DevMan
No artigo anterior foram apresentados os cinco primeiros erros mais comuns em projetos de banco de dados. Neste artigo serão apresentados os cinco erros finais.
É muito comum encontrarmos sistemas em que, ao invés do arquiteto de dados procurar por uma informação no mundo real que consiga definir um registro como sendo único, ele decida por utilizar colunas do tipo autoincremento para modelar a chave primária de uma tabela. Outra falha bastante comum é não utilizar das características da linguagem SQL para implementar a proteção da integridade de dados. A linguagem SQL é bastante poderosa e concentrar as regras de integridade de dados no próprio banco de dados, além de melhorar o desempenho, garante confiabilidade.
Ainda neste assunto, também é comum deixar toda a regra de negócio na camada da aplicação prevenindo ataques hacker na forma de SQL Injection.
Não podemos deixar de citar também a tentativa “preguiçosa” de construir objetos genéricos no banco de dados, principalmente em stored procedures, onde se tenta utilizar o mesmo código para efetuar alterações em diferentes tabelas, apenas passando parâmetros ao código.
Finalmente falaremos sobre o famigerado problema de falta de testes, ou seja, para garantir a entrega do sistema dentro do prazo, deixa-se de lado a qualidade do código.
Continuando nossa saga de apresentar os dez erros mais comuns no projeto de bancos de dados apresentarei os cinco erros restantes. Na edição passada trabalhamos sobre temas como má concepção / planejamento e o não uso da normalização de dados.
Neste segundo e último artigo de nossa série serão abordados os seguintes erros:
1. Usar coluna auto-incremento como sua única chave;
2. Não utilizar as características do SQL para proteger a integridade de dados;
3. Não usar stored procedures para acessar dados;
4. Tentativa de construção de objetos genéricos;
5. Falta de testes.
Usar coluna auto-incremento como sua única chave
A Primeira Forma Normal (1FN) dita que todas as linhas em uma tabela devem ser unicamente identificáveis. Assim, cada tabela deve ter uma chave primária. O SQL Server permite que você defina uma coluna numérica como uma coluna do tipo IDENTITY (identidade), que gera automaticamente um valor único para cada linha. Alternativamente, você pode usar NEWID() (ou NEWSEQUENTIALID()) para gerar um valor de 16 bytes aleatório e único para cada linha. Estes tipos de valores, quando usados como chaves, são o que são conhecidos como chaves substitutas (ver Nota DevMan 1). A palavra substituto significa "algo que substitui" e, neste caso, uma chave substituta deve ser o substituto para uma chave natural.
A chave substituta (surrogate key) em um banco de dados é um identificador único para qualquer entidade do mundo modelado ou um objeto no banco de dados. A chave substituta não é derivada dos dados da aplicação.
Uma distinção importante entre uma chave substituta e uma chave primária depende se o banco de dados é um banco de dados atual (como os transacionais, ou on-line) ou um banco de dados temporal (conhecido como bando de dados históricos). Uma vez que um banco de dados atual armazena somente dados atuais válidos, há uma correspondência um-para-um entre uma chave substituta no mundo modelado e a chave primária do banco de dados. Neste caso, a chave substituta pode ser utilizada como uma chave primária. Numa base de dados temporal, no entanto, existe uma relação muitos-para-um entre as chaves primárias e as chaves substitutas. Uma vez que podem haver vários objetos na base de dados correspondentes a uma chave substituta única, não podemos usar o substituto como uma chave primária; outro atributo é necessário, para além do substituto, identificar exclusivamente cada objeto.
Alguns estudiosos argumentam que uma chave substituta deve ter as seguintes características:
- O valor é único para todo o sistema, portanto, nunca reutilizado;
- O valor é gerado pelo sistema;
- O valor não é manipulável pelo usuário ou aplicação;
- O valor não contém nenhum significado semântico;
- O valor não é visível para o usuário ou aplicação;
- O valor não é composto de vários valores de domínios diferentes.
Em um banco de dados atual, a chave substituta pode ser a chave primária gerada pelo sistema de gerenciamento de banco de dados e não derivada dos dados do aplicativo no banco de dados. O único motivo de se ter uma chave substituta é o de atuar como a chave primária. É também possível que a chave substituta exista além do UUID gerado pelo banco de dados (por exemplo, um número de RH para cada empregado que não seja o UUID de cada empregado).
A chave substituta é frequentemente um número sequencial (por exemplo, em Sybase ou SQL Server uma coluna do tipo "identity column", um número serial no PostgreSQL, uma sequência (sequence) no Oracle ou uma coluna definida com AUTO_INCREMENT no MySQL), mas não necessariamente precise ser. Estes são apenas mecanismos que auxiliam nesta tarefa. Ter a chave independente de todas as outras colunas isola as relações de banco de dados a partir de mudanças nos valores de dados ou projeto do banco de dados (tornando a base de dados mais ágil) e garante a exclusividade.
Numa base de dados temporal é necessário distinguir entre a chave substituta e a chave primária. Normalmente, cada linha teria tanto uma chave primária quanto uma chave substituta. A chave primária identifica a linha única no banco de dados, a chave substituta identifica a entidade única no mundo modelado; estas duas chaves não são as mesmas. Por exemplo, a tabela “Funcionário” pode conter duas linhas para "John Smith", uma linha quando ele foi contratado entre 1990 e 1999, outra linha quando ele foi contratado entre 2001 e 2006. A chave substituta é idêntica (não exclusivo) em ambas as linhas, no entanto, a chave primária será única.
...Confira outros conteúdos:
Black November
Desconto exclusivo para as primeiras 200 matrículas!
Pagamento anual
12x no cartão
De: R$ 69,00
Por: R$ 54,90
Total: R$ 658,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- 12 meses de acesso
Pagamento recorrente
Cobrado mensalmente no cartão
De: R$ 79,00
Por: R$ 54,90 /mês
Total: R$ 658,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- Fidelidade de 12 meses
- Não compromete o limite do seu cartão
<Perguntas frequentes>
Nossos casos de sucesso
Eu sabia pouquíssimas coisas de programação antes de começar a estudar com vocês, fui me especializando em várias áreas e ferramentas que tinham na plataforma, e com essa bagagem consegui um estágio logo no início do meu primeiro período na faculdade.
Estudo aqui na Dev desde o meio do ano passado!
Nesse período a Dev me ajudou a crescer muito aqui no trampo.
Fui o primeiro desenvolvedor contratado pela minha
empresa. Hoje eu lidero um time de desenvolvimento!
Minha meta é continuar estudando e praticando para ser um
Full-Stack Dev!
Economizei 3 meses para assinar a plataforma e sendo sincero valeu muito a pena, pois a plataforma é bem intuitiva e muuuuito didática a metodologia de ensino. Sinto que estou EVOLUINDO a cada dia. Muito obrigado!
Nossa! Plataforma maravilhosa. To amando o curso de desenvolvimento front-end, tinha coisas que eu ainda não tinha visto. A didática é do jeito que qualquer pessoa consegue aprender. Sério, to apaixonado, adorando demais.
Adquiri o curso de vocês e logo percebi que são os melhores do Brasil. É um passo a passo incrível. Só não aprende quem não quer. Foi o melhor investimento da minha vida!
Foi um dos melhores investimentos que já fiz na vida e tenho aprendido bastante com a plataforma. Vocês estão fazendo parte da minha jornada nesse mundo da programação, irei assinar meu contrato como programador graças a plataforma.
Wanderson Oliveira
Comprei a assinatura tem uma semana, aprendi mais do que 4 meses estudando outros cursos. Exercícios práticos que não tem como não aprender, estão de parabéns!
Obrigado DevMedia, nunca presenciei uma plataforma de ensino tão presente na vida acadêmica de seus alunos, parabéns!
Eduardo Dorneles
Aprendi React na plataforma da DevMedia há cerca de 1 ano e meio... Hoje estou há 1 ano empregado trabalhando 100% com React!
Adauto Junior
Já fiz alguns cursos na área e nenhum é tão bom quanto o de vocês. Estou aprendendo muito, muito obrigado por existirem. Estão de parabéns... Espero um dia conseguir um emprego na área.
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.