Na lição anterior, introduzimos a ideia geral de uma base de dados e de um SGBD. Na prática, porém, nem todas as bases de dados são construídas da mesma forma. Diferentes tipos de bases de dados são otimizados para diferentes tipos de dados, padrões de consulta, requisitos de escalabilidade e necessidades de consistência.
Nesta lição, vamos analisar os tipos de bases de dados mais comuns, as suas principais diferenças, casos de uso típicos e exemplos do mundo real. Também vamos olhar com mais atenção para as Bases de Dados Relacionais, porque continuarão a ser o nosso principal foco ao longo deste curso.
Nenhum único modelo de base de dados é perfeito para todas as aplicações.
Por exemplo:
Como sistemas diferentes resolvem problemas diferentes, vários modelos de bases de dados surgiram ao longo do tempo.
Aqui está uma comparação rápida antes de analisarmos cada tipo com mais detalhe:
| Tipo | Modelo de Dados | Pontos Fortes | Casos de Uso Comuns | Exemplos |
|---|---|---|---|---|
| Relacional | Tabelas com linhas e colunas | Forte consistência, SQL, joins, dados estruturados | Banca, ERP, CRM, e-commerce, relatórios | PostgreSQL, MySQL, MariaDB, SQLite, Oracle |
| Chave-Valor | Chave associada a um valor | Pesquisas muito rápidas, escalabilidade simples | Caching, sessões, feature flags, carrinhos de compras | Redis, Amazon DynamoDB, Riak |
| Documental | Documentos do tipo JSON | Esquema flexível, dados aninhados | Gestão de conteúdo, perfis de utilizador, catálogos, aplicações web | MongoDB, Couchbase, Firestore |
| Colunas Largas | Linhas com colunas flexíveis agrupadas em famílias | Elevada taxa de escrita, escalabilidade horizontal | Registo de eventos, IoT, cargas distribuídas em grande escala | Apache Cassandra, HBase, ScyllaDB |
| Grafo | Nós e arestas | Consultas centradas em relações | Redes sociais, deteção de fraude, motores de recomendação | Neo4j, Amazon Neptune, ArangoDB |
| Séries Temporais | Registos com marca temporal | Ingestão e agregação eficientes ao longo do tempo | Monitorização, métricas, sensores, dados financeiros | InfluxDB, TimescaleDB, OpenTSDB |
| Colunar Analítica | Dados armazenados por coluna em vez de por linha | Análises e agregações rápidas | BI, dashboards, data warehousing, OLAP | ClickHouse, DuckDB, Amazon Redshift, BigQuery |
| Em Memória | Dados armazenados principalmente em RAM | Latência extremamente baixa | Caching, leaderboards, contadores em tempo real | Redis, Memcached, SAP HANA |
As bases de dados relacionais armazenam os dados em tabelas compostas por linhas e colunas. As tabelas podem ser ligadas entre si através de relações, normalmente usando chaves primárias e chaves estrangeiras.
Este modelo é especialmente adequado quando os dados estão bem estruturados e quando a correção, a consistência e as consultas complexas são importantes.
1. Esquema estruturado
As bases de dados relacionais exigem normalmente um esquema claramente definido. Antes de armazenar dados, definem-se tabelas, colunas, tipos de dados, restrições e relações.
Isto torna a estrutura previsível e mais fácil de validar.
2. Relações entre tabelas
Uma grande força dos sistemas relacionais é a capacidade de modelar relações de forma explícita.
Por exemplo:
customers pode estar relacionada com uma tabela orders.orders pode estar relacionada com uma tabela order_items.Isto torna as bases de dados relacionais muito adequadas para sistemas de negócio em que as entidades estão interligadas.
3. Suporte a SQL
As bases de dados relacionais são normalmente consultadas usando SQL (Structured Query Language). O SQL fornece uma forma padrão de filtrar, juntar, agregar, ordenar e modificar dados estruturados.
4. Transações ACID
As bases de dados relacionais são bem conhecidas por suportarem as propriedades ACID:
Estas propriedades são críticas em sistemas como banca, faturação, reservas e controlo de inventário.
5. Restrições de integridade dos dados
As bases de dados relacionais podem aplicar regras diretamente ao nível da base de dados, por exemplo:
NOT NULLCHECKEstas funcionalidades ajudam a evitar dados inválidos ou inconsistentes.
6. Joins poderosos e relatórios
As bases de dados relacionais destacam-se quando é necessário combinar informação de várias tabelas. Esta é uma das razões pelas quais continuam a ser centrais em relatórios, análise, finanças, operações e muitos sistemas transacionais.
7. Normalização e redução de redundância
A conceção relacional recorre frequentemente à normalização, o que significa organizar os dados em tabelas relacionadas para reduzir a duplicação e melhorar a consistência.
Por exemplo, a informação de um cliente pode ser armazenada uma única vez numa tabela customers em vez de ser repetida em cada registo de encomenda.
As bases de dados relacionais são normalmente a melhor escolha quando:
As bases de dados chave-valor armazenam os dados como um par simples: uma chave e o respetivo valor.
A chave funciona como um identificador único, e a base de dados recupera o valor diretamente a partir dessa chave. Este modelo é muito simples e muito rápido.
As bases de dados documentais armazenam dados como documentos, normalmente num formato semelhante a JSON. Cada documento pode conter campos, arrays e objetos aninhados.
Ao contrário das bases de dados relacionais, nem todos os documentos precisam de ter exatamente a mesma estrutura.
As bases de dados de colunas largas, por vezes chamadas bases de dados de família de colunas, armazenam dados em linhas, mas cada linha pode ter um conjunto muito grande e flexível de colunas. São concebidas para distribuição por muitos servidores e para elevada taxa de escrita.
Uma base de dados colunar armazena os valores da mesma coluna juntos em disco, em vez de armazenar uma linha completa. Isto é diferente de uma base de dados de colunas largas.
O armazenamento colunar é especialmente eficiente para consultas analíticas que leem algumas colunas de um conjunto de dados muito grande.
As bases de dados em grafo são concebidas para dados em que as relações são a parte mais importante do modelo. Armazenam nós (entidades) e arestas (relações).
As bases de dados de séries temporais são especializadas em pontos de dados associados ao tempo. Estão otimizadas para elevadas taxas de ingestão, políticas de retenção, compressão e agregação baseada no tempo.
As bases de dados em memória armazenam a maioria ou a totalidade dos dados em RAM em vez de em disco. Isto torna-as extremamente rápidas, embora a memória seja mais cara do que o armazenamento em disco.
Algumas bases de dados em memória são usadas apenas como caches temporárias, enquanto outras também podem persistir dados em disco.
Ao selecionar uma base de dados, convém fazer perguntas como estas:
Em muitos sistemas reais, as organizações usam mais do que um tipo de base de dados. Por exemplo:
Isto é frequentemente chamado de persistência poliglota.
As principais diferenças entre tipos de bases de dados normalmente envolvem:
Na próxima lição, vamos aprofundar a estrutura interna das Bases de Dados Relacionais, incluindo tabelas, linhas, colunas, chaves e restrições de integridade.