# Tipos de Banco de dados

### **Bases Relacionais**

As **bases relacionais**, também conhecidas como SQL, seguem uma modelagem de dados intuitiva baseada em tabelas.

**Características:**

* **Tabelas:** Cada tabela representa uma entidade.
* **Colunas:** Representam os campos da entidade.
* **Linhas:** Representam os registros.

**Vantagens:**

* **Relacionamentos:** Permitem relacionar duas ou mais tabelas.
* **Integridade dos Dados:** Através de chaves primárias e estrangeiras.

### **Exemplos de SGBDs Relacionais:**

* MySQL
* PostgreSQL
* SQLite
* SQL Server

<figure><img src="https://552011742-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MEJ_IxNzk9of-u9NQeq%2Fuploads%2F4epulX622Lo5hcWSf7kM%2Fimage.png?alt=media&#x26;token=0537863e-1d11-47d4-b206-ca7e6cfb8b9a" alt=""><figcaption><p>esquema que exemplifica uma base de dados relacional</p></figcaption></figure>

**Chaves em Bancos Relacionais:**

* **Primary Key (PK):** Identificador único de cada registro.
* **Foreign Key (FK):** Referencia uma chave primária de outra tabela, estabelecendo relacionamentos.

**Cardinalidades das Relações:**

* **1:1 (Um para Um):** Um registro de uma tabela se relaciona com um único registro de outra tabela.
* **N:1 (Muitos para Um):** Muitos registros de uma tabela se relacionam com um único registro de outra tabela.
* **N:M (Muitos para Muitos):** Muitos registros de uma tabela se relacionam com muitos registros de outra tabela, geralmente implementados com tabelas intermediárias.

## Banco de dados nao relacionais (NoSQL)

As **bases não relacionais** não utilizam tabelas e possuem maior flexibilidade, sendo ideais para aplicações que exigem escalabilidade e esquemas dinâmicos.

**Modelos Comuns de NoSQL:**

* **MongoDB:** Baseado em documentos.
* **Redis:** Chave-valor.
* **Cassandra:** Colunar.
* **Neo4j:** Grafos.
* **Qdrant:** Vetores.

<figure><img src="https://552011742-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MEJ_IxNzk9of-u9NQeq%2Fuploads%2FQOK8grhWnmIGCItQbQN6%2Fimage.png?alt=media&#x26;token=da3fbca5-e026-41eb-93e1-aa45822bea7e" alt=""><figcaption><p>esquematização de NoSQL e atributos</p></figcaption></figure>



## Escolha do tipo de Banco de Dados

Escolher qual banco de dados utilizar pode ser um desafio comum na vida dos desenvolvedores. A decisão depende principalmente da **modelagem dos dados** e da **arquitetura do projeto**.

**Considerações para a Escolha:**

* **Bancos Relacionais (SQL):**
  * **Quando Usar:** Projetos com esquema fixo e requisitos de segurança (ACID), como sistemas bancários e lojas.
  * **Vantagens:** Integridade e consistência dos dados, suporte a transações complexas.
* **Bancos Não Relacionais (NoSQL):**
  * **Quando Usar:** Sistemas que exigem alta escalabilidade ou possuem esquemas dinâmicos, como aplicações em tempo real e grandes volumes de dados não estruturados.
  * **Vantagens:** Flexibilidade na modelagem de dados, escalabilidade horizontal, desempenho em operações específicas.

**Dica:**

Para **projetos pequenos**, considere utilizar **SQLite** (relacional) ou **CouchDB** (NoSQL). Essas opções são leves e fáceis de configurar, facilitando o desenvolvimento inicial.
