6 práticas recomendadas para design de banco de dados (2024)

6 práticas recomendadas para design de banco de dados (3)

Vai começar um sistema novo? Às vezes, com a urgência em colocar uma aplicação no ar, negligenciamos alguns pontos muito importantes. Mas, se tivermos tempo e disponibilidade na hora de definir e construir uma solução, podemos levar as melhores práticas como guia.

Recentemente realizei a palestra “Escalabilidade em Microsserviços” no Instituto Infnet. Um dos principais itens apresentados está relacionado ao planejamento para design de banco de dados. Por isso, achei relevante elencar neste artigo 6 práticas essenciais de #database que vão te ajudar muito no desenvolvimento de um novo sistema. Confira!

Se você tem tempo para planejar, considere tudo. Quais informações será preciso guardar? Quais tomadas de decisão serão necessárias? Como será modelado? Como defino o meu domínio? Então, você começa a planejar bem tudo isso para entender o que será válido para a aplicação ou não.

Por exemplo, você fez uma persistência de alguma lógica para uma loja e negligenciou os pontos de vista, fazendo sempre a consulta do produto pelo preço. Você definiu e assumiu isso, mas quando colocou o site no ar, percebeu que os usuários queriam buscar os produtos por um outro critério. Por exemplo: televisões que tenham determinado tamanho de tela. A partir disso, você passa a ter outros critérios na busca.

Ao não considerar este ponto durante o seu planejamento, muito provavelmente você terá de fazer alguma solução paliativa para criar uma consulta mega complexa. E essa consulta mega complexa vai ferir a sua base de dados. Por tanto, considere, pense, troque ideias com a equipe para prever possíveis pontos que irão impactar no banco futuramente.

6 práticas recomendadas para design de banco de dados (4)

Hoje, alguns bancos de dados estão na moda, como Cassandra e Mongo. Parece que hoje eles viraram “bala de prata” para resolver qualquer tipo de problema. Vão resolver? Não, não vão, porque depende da necessidade do sistema.

O mesmo banco de dados não vai servir para tudo o que você precisa. Por exemplo, se você utiliza uma chave natural que sabe que nunca vai mudar, como uma busca por CPF, opte por um NoSQL. No entanto, supondo que você precise fazer uma ferramenta de atendimento, como um call center por exemplo, em que você precisa ter várias consultas com várias visões do seu domínio, opte pelo relacional.

Performance em cima de uma chave que nunca vai mudar ➡ NoSQL

Vários tipos de consultas a serem empregadas em cima do modelo ➡ Relacional

6 práticas recomendadas para design de banco de dados (5)

Normalizar não relacional? Sim, também!

Parece um pouco contraditório, mas, por exemplo, imagine que você tem duas entidades: cliente e produto, em que a chave do seu cliente é o CPF e a chave do produto é um código de identificação. Daí, a partir disso, você gostaria de representar uma venda: produtos foram vendidos pelo site X para o cliente Y.

Já vi casos de desenvolvedores utilizarem a entidade do documento de produto referenciando os usuários que compraram. Também já vi casos onde fizeram o oposto. Colocaram referência de produtos dentro da tabela de documentos de usuários.

Então, o que acontece quando for necessário buscar todos os produtos que foram vendidos? Será necessário navegar em cima da entidade de produtos para saber quem foram os usuários que compraram. Isso não é escalável e não performa bem.

De repente, uma outra visão pode ser muito melhor: se possuo os dados cliente e produto, por que não criar uma outra entidade de documento denominada: “venda”?

Quando este documento for gerado, é possível inserir a identificação que referencia o produto e a identificação que referencia o cliente.

Agora fica mais fácil tendo uma entidade única, buscar a informação que se precisa.

Sempre evite jogar coisas dentro de documentos que vão complicar uma consulta futura.

6 práticas recomendadas para design de banco de dados (6)

Algumas vezes, acabamos persistindo muita informação desnecessária em nosso banco de dados. Por exemplo, para a validação de uma regra de negócio ou apenas para um enriquecimento de dados, pode estar em sobrecarga apenas pelo fato de estar trazendo informação demais para o seu contexto.

Na maioria das vezes, um grande volume de informações passa pelo nosso fluxo de negócios. Por exemplo, você faz uma consulta no Serasa e obtém uma resposta com uma série de informações do usuário. Pode vir o nome, nome da mãe, endereço, estado civil, idade, se declarou imposto de renda, se tem protesto e por aí vai. Então você persiste tudo no banco. Na hora de tomar a decisão e fazer uma consulta, de repente, todo esse overhead de informação vai trazer um peso que vai degradar a consulta no final, sendo que você só precisaria da informação de que ele estaria com o nome sujo naquele período em que a consulta aconteceu. Uma abordagem mais interessante poderia ser guardar no banco de dados apenas a data em que foi consultado e um booleano dizendo se o cliente está com o nome limpo ou sujo.

Se entendemos que as informações podem ser relevantes para uma análise futura, registramos em arquivos de log num formato bem estruturado. Pode ser em formato JSON ou PARQUET. Assim, podemos ter processos de ETL que consolidam esses dados numa estrutura para que os cientistas de dados possam efetuar suas análises.

Sendo redundante, mas muito importante lembrar que somente sejam carregadas as informações necessárias para o contexto da aplicação/serviço. Todo o resto dos dados, jogue em Logs estruturados para serem analisadas posteriormente.

6 práticas recomendadas para design de banco de dados (7)

Se você puder, logo no início da sua solução, trabalhando com banco relacional ou não relacional, considere o particionamento de data.

Por exemplo: Você tem uma tabela no banco de dados chamada CLIENTES. Isso quer dizer que o sistema gerenciado de banco de dados criou um arquivo em disco para armazenar os registros desta tabela. Então, você começa a inserir os registros de clientes. Ao longo do tempo, você percebe que sua tabela contém milhões de registros e que suas consultas estão cada vez mais lentas. Isso acontece porque todos os dados da tabela estão em um arquivo só e este está ficando gigante e computacionalmente falando, é muito custoso varrer arquivos em disco.

A primeira coisa que todo mundo faz para resolver este problema é criar os índices. De fato, eles costumam resolver. Mas também podem gerar outros problemas. Se você muitos critérios variados de busca, precisará criar índices para cada um deles. Porém, note que para cada índice que você cria, o sistema de banco pode criar uma estrutura de recuperação que pode ocupar até mais do tamanho do arquivo em disco do que sua tabela física. Então, pode ser que aumente muito seu custo de infra para suportar a quantidade de índices necessários para atender suas múltiplas visões.

Então, agora que você tem um índice e faz a consulta, o resultado vai surgir rapidamente. Mas aí você tem de pesquisar em cima de algo que não está indexado, o que vai acontecer? Uma busca extremamente longa em um arquivo de, por exemplo, 30TB. Linha por linha… Horas e horas esperando o retorno… Aplicação travada.. Clientes reclamando.. E por aí vai…

Nessa hora você pensa: “Nossa, por que eu não particionei esses dados?”

Como fazer isso?

Vou usar um exemplo de um problema que tivemos, no mercado telecom. Separamos os números de telefones dos usuários por DDD. O banco gera um um arquivo diferente para cada localidade, pois quando precisar realizar uma busca, não vai ter que varrer um documento gigantesco em que todas as informações estão misturadas e acredite, a segmentação da informação vai facilitar muito o trabalho.

Temos cenários em que particionamos por data também. A partir disso, fica mais simples até na hora do expurgo. Pense só, sem a partição, como o banco de dados faz para remover registros da tabela de um determinado período? Se tudo está misturado, ele vai precisar lockar a tabela. Isso já pode trazer um grande transtorno para sua aplicação, que vai ficar esperando esse processo terminar. Com a tabela particionada, o banco não precisa nem pensar. Consegue remover milhões de registros em segundos apenas deletando o arquivo que referencia aquela tabela através do seu particionamento lógico.

6 práticas recomendadas para design de banco de dados (8)

Faz sentido você manter a informação de uma venda que foi feita há mais de cinco anos? Se não fizer, expurgue-a. Ou a jogue para um arquivo morto. Qualquer que seja a sua escolha, não deixe essa informação defasada no banco de dados, pois ela vai onerar a sua infraestrutura.

6 práticas recomendadas para design de banco de dados (9)

Essas são algumas boas práticas para planejamento de banco de dados que podem poupar muitas dores de cabeça no futuro. Tem mais alguma dica ou sugestão? Comente abaixo!

Alexandre Assis é Líder Técnico na Akross, spin-off da Mobicare, Arquiteto de Soluções com mais de 15 anos de experiência em sistemas de alta performance com alta disponibilidade. Oracle certified master java ee enterprise architect.

6 práticas recomendadas para design de banco de dados (10)

A Mobicare e a Akross combinam os Melhores Talentos, Tecnologias de Ponta, Práticas Agile e DevOps com Capacidades Operacionais avançadas para ajudar Operadoras Telecom e grandes empresas a gerarem novas receitas e a melhorarem a experiência dos seus próprios clientes.

Se você gosta de inovar, trabalhar com tecnologia de ponta e está sempre buscando conhecimento, somos um match perfeito!

Faça parte do nosso time. 😉

6 práticas recomendadas para design de banco de dados (2024)

FAQs

What is the importance of database design? ›

A properly designed database provides you with access to up-to-date, accurate information. Because a correct design is essential to achieving your goals in working with a database, investing the time required to learn the principles of good design makes sense.

How to create a database step by step? ›

Create a blank database

On the File tab, click New, and then click Blank Database. Type a file name in the File Name box. To change the location of the file from the default, click Browse for a location to put your database (next to the File Name box), browse to the new location, and then click OK. Click Create.

What is database design with example? ›

Database design is the organization of data according to a database model. The designer determines what data must be stored and how the data elements interrelate. With this information, they can begin to fit the data to the database model. A database management system manages the data accordingly.

What are the 3 types of DBMS architecture? ›

The most common models include:
  • One-tier architecture. In one-tier architecture, the database, user interface, and application logic all reside on the same machine or server. ...
  • Two-tier architecture. ...
  • Three-tier architecture. ...
  • The three levels of database architecture in MongoDB Atlas.

What is a good example of a schema? ›

For example, when a child is young, they may develop a schema for a dog. They know a dog walks on four legs, is hairy, and has a tail. When the child goes to the zoo for the first time and sees a tiger, they may initially think the tiger is a dog as well.

What are 10 advantages of database? ›

Advantages of Databases
  • Minimum data redundancy.
  • Improved data security.
  • Increased consistency.
  • Lower updating errors.
  • Reduced costs of data entry, data storage, and data retrieval.
  • Improved data access using host and query languages.
  • Higher data integrity from application programs.
7 days ago

What are the 4 properties of good database design? ›

In order to make sure a database does not fail us, we need to design and create it properly. Database systems are designed to meet a set of properties known as ACID. Atomicity, Consistency, Isolation, and Durability are the properties that constitute ACID.

What are the three major steps of database design? ›

Database design includes the following three stages:
  • Conceptual Database Design.
  • Logical Database Design.
  • Physical Database Design.

How will you create a table? ›

To add a blank table, select the cells you want included in the table and click Insert > Table. To format existing data as a table by using the default table style, do this: Select the cells containing the data. Click Home > Table > Format as Table.

How can I create my own database free? ›

You can deploy a MongoDB database in the cloud with just a few clicks. With best-in-class automation and proven practices that guarantee high availability, elastic scalability, and optimal performance, MongoDB Atlas is the easiest way to try out the database for free on AWS, Azure, or Google Cloud.

How to organize a database? ›

Best tips and practices for data organization
  1. Establish naming conventions that are precise and dependable. Clearly and descriptively name your files. ...
  2. File names should be made shorter. ...
  3. Maintain consistent file versioning. ...
  4. Create and utilize a data dictionary to standardize categories and define each one's function.

What is the structure of a database design? ›

Database structure: the building blocks of a database

Within a database, related data are grouped into tables, each of which consists of rows (also called tuples) and columns, like a spreadsheet.

How is database design done? ›

The five steps involved in creating a database design process include analyzing requirements, identifying entities and relationships, normalizing data, creating a data model, and implementing the database.

What schema is the best design in data warehouse? ›

Use a star schema when query performance and simplicity are essential, and data redundancy is acceptable. Use a snowflake schema when data integrity, storage efficiency, and data update/insert/delete operations are more critical, and you can manage the increased complexity in query construction.

What are the common considerations when designing database schema? ›

Key Considerations
  • Data model: The data model governs how data is saved and arranged in your database and serves as the architectural cornerstone of your database design. ...
  • Scalability: ...
  • Maintainability: ...
  • Data security: ...
  • Cloud vs. ...
  • Performance: ...
  • Data integration: ...
  • Future technology:
Dec 23, 2022

Which of the following is the best way to describe what a schema is? ›

In psychology, a schema is a cognitive framework or concept that helps organize and interpret information. Simply put, a schema describes patterns of thinking and behavior that people use to interpret the world.

Why is a good schema design important? ›

Schema diagrams help ensure that databases follow a consistent structure so that they can be used effectively by anyone accessing the database. When a database has multiple schemas, it's important to ensure they are effectively integrated with one another.

References

Top Articles
Latest Posts
Article information

Author: Reed Wilderman

Last Updated:

Views: 6489

Rating: 4.1 / 5 (72 voted)

Reviews: 87% of readers found this page helpful

Author information

Name: Reed Wilderman

Birthday: 1992-06-14

Address: 998 Estell Village, Lake Oscarberg, SD 48713-6877

Phone: +21813267449721

Job: Technology Engineer

Hobby: Swimming, Do it yourself, Beekeeping, Lapidary, Cosplaying, Hiking, Graffiti

Introduction: My name is Reed Wilderman, I am a faithful, bright, lucky, adventurous, lively, rich, vast person who loves writing and wants to share my knowledge and understanding with you.