Banco de dados relacional - Introdução
Tags: bancodedados, sql, modelorelacional
Published: 2020-08-09 22:08:00

O modelo relacional foi introduzido na década de 1970 e é uma linguagem unificada para definição e manipulação de dados.

Para auxiliar no gerenciamento de bancos de dados relacionais são usados sistemas conhecidos como SGBDs (Sistemas de Gerenciamento de Bancos de Dados). Alguns exemplos são: MySQL, Oracle e SQL Server.

## Terminologias:
- **Dados**: fatos com significado implícito.
- **Tuplas**: linhas de uma tabela.
- **Atributo**: Nome da coluna de uma tabela.
- **Domínio**: Conjunto de valores que um atributo pode ter.
- **Relação**: tabela (no modelo relacional também são chamadas de entidade).

## Modelo de dados

Modelo de dados é um conjunto de conceitos que descrevem o banco de dados e as restrições que este deve garantir. Pode-se organizar por nível de abstração do mais para o menos abstrato da seguinte forma:
<center><img src="https://dev-to-uploads.s3.amazonaws.com/i/30kuq6580idsb5lk3yps.png" alt ="Modelos de dados ordenados por nível de abstração" width="480"></center>

- **Modelo conceitual**: conceitos que descrevem os dados como são percebidos pelo usuário. Baseia-se em entidades, atributos e relacionamentos. São alto nível e não dependem de SGBDs.
- **Modelo Lógico**: intermediário entre o modelo conceitual e o modelo físico. São representativos ou de implementação. Um exemplo é o modelo relacional.
- **Modelo físico**: conceitos que descrevem como os dados estão armazenados no computador (tipo e tamanho de registros). São baixo nível.

## Conceitos

Para que um banco de dados relacional funcione de maneira correta é necessário atender a 4 conceitos:
<center><img src="https://dev-to-uploads.s3.amazonaws.com/i/155k73vc6704266s6662.png" alt ="ACID = Atomicidade, Consistência, Isolamento e Durabilidade" width="480"></center>

- **Atomicidade**: a transação é executada inteiramente ou não é executada e volta ao estado inicial.
- **Consistência**: apenas dados válidos são salvos.
- **Isolamento**: uma transação não sofre interferência de outra transação corrente.
- **Durabilidade**: o que é salvo não será perdido.

## Linguagem

A SQL é a linguagem de pesquisa declarativa padrão para banco de dados relacional e se divide em 5 grupos de comandos:
<center><img src="https://dev-to-uploads.s3.amazonaws.com/i/aslikch692lwa90ohndh.png" alt ="Grupos de comandos SQL" width="480"></center>

- **DDL**: Data Definition Language - para definir os esquemas.
- **DML**: Data Manipulation Language - para manipular os esquemas.
- **DCL**: Data Control Language - para conceder ou remover privilégios de usuários de bancos de dados em objetos destes.
- **DQL**: Data Query Language - para fazer consultas no banco de dados.
- **TCL**: Transaction Control Language - para lidar com transações no banco de dados.

## Chaves

Uma **chave primária** (primary key ou pk) é formada de um ou mais campos que serão utilizados como referência para criar relacionamentos com as demais entidades do banco de dados. Seus valores nunca se repetem nem podem ser nulos.
Já uma **chave estrangeira** (foreign key ou fk) é o campo que estabelece o relacionamento entre duas entidades. Portanto, um atributo corresponde ao mesmo atributo que é a chave primária de outra entidade. 

## Restrições de integridade

A integridade dos dados é garantida pelo próprio SGBD por meio das  *restrições de integridade*, que são utilizadas para garantir que os dados representem de forma assertiva a realidade modelada em um banco de dados relacional.
<center><img src="https://dev-to-uploads.s3.amazonaws.com/i/f7qd78od2utfe1g9uwup.png" alt ="Restrições de integridade" width="600"></center>

- **Restrição de entidade**: a chave primária de uma relação não pode ter valor nulo.
- **Restrição de chave**: a chave primária não pode se repetir. É também chamada de *restrição de unicidade*.
- **Restrição de domínio**: define o conjunto de valores possíveis ou permitidos que um campo pode ter.
- **Restrição referencial**: todo valor de chave estrangeira de uma entidade deve corresponder a um valor de chave primária a que a chave estrangeira se refere ou ser nulo.

## Normalização
Uma entidade está normalizada se todos seus atributos são dependentes exclusivamente de suas chaves.
### Formas normais:
- **1FN**: eliminação de atributos compostos e/ou multivalorados. Impede "entidades dentro de entidades".
- **2FN**: todo atributo de uma relação não pertencente a uma de suas chaves deve ser totalmente dependente da chave primária.
- **3FN**: eliminar dependência transitiva de atributo não-chave.

_______________
**REFERÊNCIA**:
ELMASRI, Ramez e NAVATHE, Shamkant B. **Sistemas de Banco de Dados**. Pearson Addison Wesley. 6a Edição, 2011.

*Este post é um resumo do que aprendi na primeira parte da Unidade 1 da disciplina "Banco de Dados Relacionais e não Relacionais". Esta é ministrada pelo Prof. Henrique Batista da Silva no curso de especialização em Ciência de Dados e Big Data da PUC Minas Virtual.*