O que é e para o que servem os relacionamentos entre tabelas?
Published: 2022-12-23 02:20:20

Relacionamentos entre tabelas é uma característica de bancos de dados relacionais. Esses relacionamentos são as associações estabelecidas entre duas ou mais tabelas.  

Os relacionamentos são baseados em campos comuns de uma ou mais tabelas, geralmente envolvendo chaves primárias e estrangeiras. 

Uma chave primária é o campo (ou campos) usado para identificar exclusivamente cada registro em uma tabela. 

Vamos imaginar uma API para melhor entender? 

Imagine um site de venda de jogos que tem como base um conjunto de lojas físicas. 

Provavelmente a primeira tarefa do desenvolvedor seja identificar o conjunto de entidades para construir assim sua API. 

No nosso exemplo utilizaremos 4 entidades principais: 

1 - User -> (Entidade para clientes)
2 - Game -> (Entidade para jogos)
3 - Store -> (Entidade que representa uma loja)
4 - Sale -> (Entidade para venda)

Cada uma dessas entidades vai ser representada por uma tabela, e cada tabela por sua vez terá um número finito de colunas que será preenchido com os dados. 

Digamos que nossa tabela de usuários tenha 3 colunas. 
( Id / Nome / CPF ) 
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ow8p2dh76uf2y8oy9011.png)

Nossa tabela de jogos tenha 3 colunas. 
(Id / Nome / Preço)
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c7vxe70tzovf7ipfs9z0.png)

Nossa tabela referente a loja tenha 3 colunas.
( Id / Nome / CNPJ )
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lytw3qxbpjftq3jxm7yh.png)

E nossa tabela de venda tenha 3 colunas. 
(Id de Usuário / Id do Jogo / Data da Compra )
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/onvuti6dkamnrf1jx7u2.png)

**Tipos de Relacionamento**

Existem no mundo dos relacionamentos entre as tabelas 3 tipos de relacionamentos.
Relacionamento de 1:1 (Um para um), 1:N (Um para muitos) e N:N (Muitos para muitos).

**Relacionamento 1:1 (Um para um)**

O primeiro deles é o relacionamento de 1:1. 
Para exemplificar vamos usar o exemplo de duas tabelas.
Uma tabela de Usuário e uma tabela de endereço de usuário.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1oqs5wtk7b1xq9w32cga.png)

Nesse caso de uso é possível observar que um usuário pode ter apenas um endereço, por sua vez esse mesmo endereço será relacionado a esse mesmo usuário.

Pois bem, agora eu sei do que se trata uma conexão de 1:1, mas será que essa é a melhor forma de construir no banco?

Em uma relação 1:1, cada registro na primeira tabela pode ter somente um registro correspondente na segunda tabela, e cada registro na segunda tabela pode ter somente um registro correspondente na primeira tabela. Essa relação não é comum porque, geralmente, as informações relacionadas dessa maneira são armazenadas na mesma tabela.

Concorda que dessa forma...
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4znttfk8yeeowek75xif.png)
...faz muito mais sentido que o exemplo anterior?

 Para casos muito específicos seria possível usar uma relação 1:1 para dividir uma tabela com muitos campos, isolar parte de uma tabela por motivos de segurança ou armazenar informações que se apliquem apenas a um subconjunto da tabela principal. Quando você identifica esse tipo de relação, ambas as tabelas devem compartilhar um campo em comum.

**Relacionamento 1:N (Um para muitos)**

O segundo tipo de relacionamento é o relacionamento 1:N (Um para muitos).
Para exemplificar esse tipo, imagine um relacionamento entre a loja que vende os jogos e todos os jogos que eles dispõem.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z0cvsebmsk01a7bbg0i1.png)

Utilizando este tipo de relacionamento é possível que uma loja tenha centenas ou até milhares de jogos cadastrados.

**Relacionamento N:N (Muitos para muitos)**

O terceiro tipo de relacionamento é N:N (Muitos para muitos).
Para exemplificar esse tipo imagine a venda de um jogo para um cliente. 
Esse relacionamento, diferente dos outros, depende de uma terceira tabela para relacionar as outras duas. 
Ela será responsável por conectar o usuário que fez a compra ao jogo que foi vendido, podendo dessa forma um jogo ser comprado por vários usuários, assim como um usuário possa por sua vez poder comprar muitos jogos.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/irrxrhzj99x5ldvif45p.png)