Pular para o conteúdo principal

04 - Relacionamento entre tabelas

Ao trabalhar com bancos de dados relacionais, é fundamental compreender como as tabelas se relacionam entre si. Nesta aula, você aprenderá sobre os tipos de relacionamento entre tabelas, como criar essas relações e como utilizá-las para recuperar informações de maneira eficiente.


O que é um relacionamento entre tabelas?

Um banco de dados relacional organiza suas informações em tabelas, mas muitas vezes os dados de uma tabela estão relacionados aos de outra. O relacionamento entre tabelas permite que esses dados sejam conectados de forma eficiente, evitando redundâncias e garantindo a integridade dos dados.

Por exemplo, imagine um sistema de uma livraria onde temos:

  • Uma tabela CLIENTES, que armazena informações sobre os clientes.
  • Uma tabela EMPRESTIMOS, que armazena os empréstimos feitos pelos clientes.

Cada empréstimo precisa estar vinculado a um cliente. Essa conexão é feita através de um relacionamento entre tabelas.


Chaves primárias e estrangeiras

Para criar relacionamentos entre tabelas, utilizamos chaves primárias e chaves estrangeiras:

  • Chave primária (Primary Key - PK): Identifica de forma única um registro dentro de uma tabela.
  • Chave estrangeira (Foreign Key - FK): É uma coluna que faz referência à chave primária de outra tabela, estabelecendo a conexão entre os dados.

Tipos de relacionamento

Existem três tipos principais de relacionamento entre tabelas:

Relacionamento um para um (1:1)

Neste tipo de relacionamento, cada registro em uma tabela está relacionado com no máximo um registro em outra tabela.

Exemplo: Uma tabela CLIENTES e uma tabela DOCUMENTOS, onde cada cliente tem um único documento associado.

CREATE TABLE CLIENTES (
ID INT PRIMARY KEY,
NOME VARCHAR(100)
);

CREATE TABLE DOCUMENTOS (
ID INT PRIMARY KEY,
ID_CLIENTE INT UNIQUE,
DOCUMENTO VARCHAR(20),
FOREIGN KEY (ID_CLIENTE) REFERENCES CLIENTE(ID)
);

O uso da restrição UNIQUE na chave estrangeira impede que um cliente tenha mais de um documento cadastrado.


Relacionamento um para muitos (1:N)

Este é o tipo de relacionamento mais comum. Um registro em uma tabela pode estar relacionado a vários registros em outra tabela.

Exemplo: Uma tabela CLIENTES e uma tabela EMPRESTIMOS, onde cada cliente pode ter vários empréstimos, mas cada empréstimo pertence a apenas um cliente.

CREATE TABLE CLIENTES (
ID INT PRIMARY KEY,
NOME VARCHAR(100)
);

CREATE TABLE EMPRESTIMOS (
ID INT PRIMARY KEY,
ID_CLIENTE INT,
DATA_EMPRESTIMO DATE,
FOREIGN KEY (ID_CLIENTE) REFERENCES Clientes(ID)
);

Neste caso, a chave estrangeira ID_CLIENTE na tabela EMPRESTIMOS faz referência à chave primária da tabela CLIENTES.


Relacionamento muitos para muitos (N:N)

Neste relacionamento, um registro em uma tabela pode estar associado a vários registros em outra tabela, e vice-versa. Para implementar isso, utilizamos uma tabela intermediária.

Exemplo: Uma tabela ALUNOS e uma tabela CURSOS, onde cada aluno pode se matricular em vários cursos e cada curso pode ter vários alunos.

CREATE TABLE ALUNOS (
ID INT PRIMARY KEY,
NOME VARCHAR(100)
);

CREATE TABLE CURSOS (
ID INT PRIMARY KEY,
NOME VARCHAR(100)
);

CREATE TABLE MATRICULAS (
ID_ALUNO INT,
ID_CURSO INT,
DATA_MATRICULA DATE,
PRIMARY KEY (ID_ALUNO, ID_CURSO),
FOREIGN KEY (ID_ALUNO) REFERENCES ALUNOS(ID_ALUNO),
FOREIGN KEY (ID_CURSO) REFERENCES CURSOS(ID_CURSO)
);

A tabela MATRICULAS atua como uma ponte entre ALUNOS e CURSOS, estabelecendo o relacionamento N:N.


Consultando dados relacionados

Para consultar dados de tabelas relacionadas, utilizamos JOINs.

Exemplo: Buscar os emprestimos de cada cliente usando INNER JOIN.

SELECT 
CLI.NOME,
EMP.ID AS "ID_EMPRESTIMO",
EMP.DT_EMPRESTIMO
FROM CLIENTES AS CLI
INNER JOIN EMPRESTIMOS AS EMP ON CLI.ID = EMP.ID_CLIENTE;

Outros tipos de JOIN:

  • INNER JOIN: Retorna apenas os registros que possuem correspondência em ambas as tabelas.
  • LEFT JOIN: Retorna todos os registros da tabela da esquerda e os correspondentes da tabela da direita (se houver).
  • RIGHT JOIN: Retorna todos os registros da tabela da direita e os correspondentes da tabela da esquerda (se houver).
  • FULL JOIN: Retorna todos os registros quando há correspondência em uma das tabelas.

Conclusão

Nesta aula, aprendemos:

  • O que são relacionamentos entre tabelas e sua importância.
  • Os tipos de relacionamento: Um para Um, Um para Muitos e Muitos para Muitos.
  • Como utilizar chaves primárias e estrangeiras para criar relacionamentos.
  • Como consultar dados relacionados usando JOIN.