# 10.3 Banco Relacional vs. Não Relacional

E aí, arquiteto(a) de informação! Já temos nosso QG Supabase montado e sabemos o que são dados. Agora, precisamos decidir *como* vamos organizar nossas informações lá dentro.

No mundo dos bancos de dados, existem dois grandes "estilos" de organização, duas filosofias diferentes. É como escolher entre organizar suas roupas em gavetas separadas (camisetas, calças, meias) ou jogar tudo numa caixa grande!

Esses estilos são chamados **Relacional (SQL)** e **Não Relacional (NoSQL)**.

<figure><img src="https://3296352579-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FM6UO6l8WmCnDy7MzGKD1%2Fuploads%2Fyf4ygdS4fnvKih9D6rzk%2Fimage.png?alt=media&#x26;token=953d39bb-c6f7-4e90-9a90-7a41994ebdf3" alt=""><figcaption></figcaption></figure>

### O Mundo Organizado: Bancos de Dados Relacionais (SQL) 🗄️ <a href="#o-mundo-organizado-bancos-de-dados-relacionais-sql" id="o-mundo-organizado-bancos-de-dados-relacionais-sql"></a>

Os bancos de dados relacionais são os veteranos, os mais tradicionais. Eles funcionam como um conjunto de **tabelas**, muito parecido com planilhas do Excel ou Google Sheets.

* **Tabelas:** Cada tabela guarda informações sobre um tipo específico de "coisa" (Entidade), como `Usuarios`, `Produtos`, `Posts`.
* **Colunas:** Cada coluna na tabela representa uma característica (Atributo) dessa "coisa", como `nome`, `email`, `preco`, `texto_do_post`.
* **Linhas:** Cada linha é um registro individual, uma "coisa" específica, como um usuário específico, um produto específico.
* **Relações:** O ponto chave! As tabelas podem ser conectadas umas às outras através de "chaves" (vamos ver isso em detalhes logo logo!). Isso permite que você cruze informações. Por exemplo, conectar a tabela `Pedidos` com a tabela `Usuarios` pra saber quem fez qual pedido.

**Linguagem:** Para conversar com esses bancos, usamos uma linguagem padrão chamada **SQL (Structured Query Language)**. É como o "inglês" dos bancos de dados relacionais. Com SQL, você pode pedir pra buscar dados, inserir novos, atualizar, deletar, etc.

**Exemplos Famosos:** PostgreSQL (o que o Supabase usa!), MySQL, SQL Server, Oracle.

**Vantagens:**

* **Organização:** Tudo bem estruturado, fácil de entender as relações.
* **Consistência:** Regras garantem que os dados fiquem corretos (ex: não deixar cadastrar um pedido sem um cliente associado).
* **SQL:** Uma linguagem poderosa e muito usada no mercado.

**Desvantagens:**

* **Menos Flexível:** Mudar a estrutura (adicionar uma coluna, por exemplo) pode ser um pouco mais chatinho.
* **Escalabilidade:** Lidar com quantidades *absurdas* de dados ou usuários simultâneos pode exigir mais planejamento (embora bancos como o PostgreSQL sejam muito bons nisso hoje em dia).

**Por que o Supabase usa Relacional (PostgreSQL)?** O Supabase escolheu o PostgreSQL porque ele é:

* **Poderoso e Confiável:** É usado por empresas gigantes e tem décadas de desenvolvimento.
* **Open Source:** Combina com a filosofia do Supabase.
* **Cheio de Recursos:** Suporta muitos tipos de dados, funções avançadas, etc.
* **SQL Padrão:** Aprender SQL com PostgreSQL te prepara para muitos outros bancos.

Basicamente, o Supabase te dá a força e a confiabilidade do mundo relacional com uma camada de ferramentas modernas por cima!

### O Mundo Flexível: Bancos de Dados Não Relacionais (NoSQL) 📦 <a href="#o-mundo-flexivel-bancos-de-dados-nao-relacionais-nosql" id="o-mundo-flexivel-bancos-de-dados-nao-relacionais-nosql"></a>

Do outro lado da batalha, temos os bancos de dados **Não Relacionais**, ou **NoSQL** (que geralmente significa "Not Only SQL" - Não Apenas SQL).

Eles surgiram mais recentemente, pensando em problemas diferentes, como lidar com volumes GIGANTESCOS de dados (pensa no Facebook, Google, Twitter) e ter mais flexibilidade.

Em vez de usar só tabelas, os bancos NoSQL podem guardar dados de várias formas:

* **Documentos (JSON/BSON):** Pense num arquivo de texto organizado com chaves e valores. É ótimo pra guardar informações que não têm uma estrutura super rígida. (Ex: MongoDB)
* **Chave-Valor:** Super simples, como um dicionário gigante. Você tem uma chave única e um valor associado. (Ex: Redis, Memcached)
* **Colunares:** Otimizados para ler e escrever colunas inteiras de dados rapidamente. (Ex: Cassandra, HBase)
* **Grafos:** Perfeitos para representar relações complexas, como redes sociais (quem é amigo de quem?). (Ex: Neo4j)

**Linguagem:** Aqui não tem um padrão único como o SQL. Cada tipo de banco NoSQL tem sua própria forma de ser consultado.

**Vantagens:**

* **Flexibilidade:** Mais fácil de mudar a estrutura dos dados sem quebrar tudo.
* **Escalabilidade Horizontal:** Geralmente mais fácil de distribuir os dados em várias máquinas pra aguentar muito tráfego.
* **Performance para Casos Específicos:** Podem ser mais rápidos que SQL para certos tipos de operações (ex: buscas simples por chave).

**Desvantagens:**

* **Menos Consistência (às vezes):** Algumas garantias de consistência do SQL podem ser mais relaxadas (o que pode ser bom ou ruim, dependendo do caso).
* **Consultas Complexas:** Fazer buscas que envolvem cruzar dados de diferentes "tipos" pode ser mais complicado que um `JOIN` no SQL.
* **Falta de Padrão:** Você precisa aprender a linguagem específica do banco que está usando.

### Qual Mundo é Melhor? 🤔 <a href="#qual-mundo-e-melhor" id="qual-mundo-e-melhor"></a>

**Nenhum!** Não existe "melhor" ou "pior", existe o **mais adequado** para cada missão.

* Se você precisa de estrutura clara, relações bem definidas e garantia de que os dados estão consistentes (como num sistema financeiro, um cadastro de alunos, um e-commerce), o **Relacional (SQL)** costuma ser uma ótima escolha.
* Se você tem dados que mudam muito de formato, precisa de altíssima velocidade pra leituras/escritas simples, ou tem um volume de dados que não para de crescer exponencialmente, o **Não Relacional (NoSQL)** pode ser mais interessante.

Muitas empresas grandes usam os **dois tipos** de bancos de dados, cada um para o que faz de melhor!

**Para nossa jornada no Favelaware com Supabase, vamos focar no mundo Relacional com PostgreSQL.** É uma base excelente e muito versátil pra maioria dos projetos que vamos querer construir.

Mas é legal saber que o mundo NoSQL existe, caso um dia você precise dele em outra missão!

No próximo capítulo, vamos mergulhar de cabeça na estrutura do nosso banco relacional: vamos aprender a criar as tabelas, colunas e linhas que vão guardar nossos preciosos dados.
