O que é um banco de dados?
Tags: bancodedados, sgdb
Published: 2020-09-09 10:30:34

---
title: O que é um banco de dados?
published: true
description: Estudando bancos de dados, SGDBs e ciclo de vida de um banco de dados
tags: bancodedados, sgdb
cover_image: https://images.unsplash.com/photo-1544383835-bda2bc66a55d?ixlib=rb-1.2.1&auto=format&fit=crop&w=1321&q=80
---
Estive lendo o livro [__*Projeto e modelagem de bancos de dados*__](https://www.amazon.com.br/Projeto-Modelagem-Banco-Dados-Teorey/dp/8535264450?pf_rd_r=MN01WXYNH0MZ7ZNP4B2X&pf_rd_p=833b908c-b684-4739-ad1f-144d358d4115&pd_rd_r=10ce69b4-d511-4f39-85bd-7a2d9b3e29de&pd_rd_w=BRxST&pd_rd_wg=6Dk8g&ref_=pd_gw_ci_mcx_mr_hp_d) e resolvi anotar alguns conceitos aqui que podem ser úteis.

Cobrirei as seguintes questões nesse artigo:

1. O que é um banco de dados?
2. O que é um SGDB?
3. Como é o ciclo de vida de um banco de dados?

Recomendo a leitura do livro para mais detalhes. 

## O que é um banco de dados?
Um banco de dados é __uma coleção de dados relacionados e guardados em algum sistema, servindo às necessidades dos usuários em uma organização__. 

Um dado (__*item de dado*__) é a menor unidade de dado que tem significado na vida real, e quando agrupado com outros itens de dados temos um __*registro*__ numa aplicação. 

Uma coleção de *registros* é chamada de __*arquivo*__ e sistemas de bancos de dados possuem um conjunto de arquivos. 

## O que é um SGDB?
SGDB significa __sistema gerenciador de banco de dados__, ou seja, um __software que nos permite manipular bancos de dados__. 

Com um SGDB podemos ter uma visão lógica dos dados, usar uma linguagem de manipulação dos mesmos, como o SQL, usar utilitários para verificar integridade, controlar transações, entre outros.

Um exemplo muito conhecido de SGDB é o [MySQL](https://www.mysql.com/), amplamente utilizado no mundo. 

## Como é o ciclo de vida de um banco de dados?
Temos basicamente quatro etapas:

1. Análise de requisitos
2. Projeto lógico
3. Projeto físico
4. Implementação, monitoramento e modificação 

Vamos analisar cada uma, mas para ter uma ideia prévia, dê uma olhada na imagem abaixo:

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/1906j9qn7khst7mmjgit.png)

### Análise de requisitos
Para saber os __requisitos__ do banco de dados fazemos uma série de __entrevistas__ com o cliente e com os usuários para criar uma __especificação__. Tal especificação contém quais dados serão processados, quais os relacionamentos entre os dados, qual o software onde iremos implementar os banco, etc. 

Por relacionamento entre dados você pode entender como, por exemplo, a relação entre um email de um cliente e um pedido.

### Projeto lógico
Utilizando técnicas como __ER__ (*entidade-relacionamento*) e __UML__ (*unified modeling language*), podemos construir um *esquema global*, que basicamente é um diagrama onde temos todos os dados necessários e seus relacionamentos.

Essa etapa do ciclo de vida pode ser dividida em quatro momentos.

#### Modelagem conceitual de dados
É aqui que, usando a especificação, aplicamos o ER e o UML para modelar o banco. 

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/y2ph61x9nxtc4ch32mvz.png)

#### Integração da visão
É natural que quanto mais pessoas envolvidas na análise de requisitos, mais visões diferentes teremos sobre quais dados são necessários, quais os nomes para os dados, etc. Essas visões precisam ser unificadas para a modelagem do nosso banco.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/icgeseslxe3hixsu0i6m.png)

#### Transformação do modelo de dados conceitual em tabelas SQL
Após unificar as visões e montar nosso modelo conceitual, é hora de transformá-lo em tabelas __SQL__ (*structured query language*). O SQL é uma linguagem de consulta, ou seja, nos permite consultar dados em algum tipo de banco de dados. Além disso, é através do SQL que nós tradicionalmente criamos as tabelas, o famoso `CREATE TABLE`.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/yiwk7y8e6xkjrric3ywk.png)

#### Normalização de tabelas
De forma simplificada, normalizar tabelas nesse processo é decompor ou dividir tabelas em outras menores, além de eliminar redundâncias (repetições), sem macular a integridade dos dados. 

Veja na imagem o exemplo:

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/9of2qlxmyyc6xac0s2o0.png)

Podemos utilizar o termo *modelo lógico* para nos referirmos ao modelo de dados conceitual, e *modelo físico* para o modelo de implementação do SGBD, como uma tabela SQL ou NoSQL.

### Projeto físico
Podemos utilizar o termo *modelo lógico* para nos referirmos ao modelo de dados conceitual, e *modelo físico* para o modelo de implementação do SGBD, como uma tabela SQL.

O objetivo do projeto físico é otimizar o desempenho do projeto e dos dados através de, por exemplo, a clusterização de dados (agrupamento de dados com base em uma classificação). 

Nessa etapa faremos análises que podem acarretar em correções do esquema global. Algumas atividades que podem acontecer aqui:

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/umvmnzouvyhaqegmm8hw.png)

### Implementação, monitoramento e modificação
Finalizado o projeto, podemos começar a implementar com a linguagem de definição e o SGDB escolhido, por exemplo, implementar nosso esquema com SQL no MySQL.

Iniciada o operação do SGDB, precisamos monitorá-lo para saber se os requisitos de desempenho estão sendo atendidos. Caso os requisitos dos usuários mudem, podemos reprojetar e modificar o banco, e assim continua o ciclo. 

---
_Fontes_:
TEORY, Toby; LIGHTSTONE, Sam; NADEAU, Tom; JAGADISH, H.V.. __Projeto e modelagem de banco de dados__. São Paulo: Elsevier, 2014.

---
_Esse texto não tem intenção de esgotar o tema. Acrescente nos comentários, e também aponte erros quando os identificar._