UC00602 · Modelo relacional de bases de dados
Aulify · Componente Tecnológica

Modelo relacional de bases de dados

ER, normalização, chaves e relações
UC00602 · 25 horas · 2,25 pontos Nível 4 · TDS
Aulify · Componente Tecnológica · Cursos Profissionais
UC00602 · Modelo relacional de bases de dados

Resultados de aprendizagem

  1. Modelar dados com diagramas entidade-relação.
  2. Aplicar normalização até à 3FN.
  3. Definir chaves, relações e restrições.
O modelo é a fundação. Erros aqui propagam-se a todo o software construído por cima.
Aulify · Componente Tecnológica · Cursos Profissionais
UC00602 · Modelo relacional de bases de dados
Bloco 1 · Conceitos

Do real ao relacional

Aulify · Componente Tecnológica · Cursos Profissionais
UC00602 · Modelo relacional de bases de dados

Vocabulário base

Termo Significado
Entidade "Coisa" do mundo real: Aluno, Curso, Encomenda
Atributo Propriedade da entidade: nome, preço, data
Instância Ocorrência concreta: o aluno João
Relação Associação entre entidades: Aluno inscreve-se em Curso
Cardinalidade Quantos: 1:1, 1:N, N:M
Chave primária Identificador único da entidade
Chave estrangeira Referência a outra entidade
Aulify · Componente Tecnológica · Cursos Profissionais
UC00602 · Modelo relacional de bases de dados

Tipos de relação

1:1 — Pessoa ↔ BI (uma pessoa tem um BI; um BI pertence a uma pessoa).

1:N — Cliente → Encomendas (um cliente faz várias encomendas; cada encomenda pertence a um cliente).

N:M — Aluno ↔ Curso (cada aluno faz vários cursos; cada curso tem vários alunos).

N:M sempre se resolve com tabela de associação (Aluno_Curso) com chaves estrangeiras para os dois lados.
Aulify · Componente Tecnológica · Cursos Profissionais
UC00602 · Modelo relacional de bases de dados
Bloco 2 · Diagramas ER

Desenhar o modelo

Aulify · Componente Tecnológica · Cursos Profissionais
UC00602 · Modelo relacional de bases de dados

Notações comuns

  • Chen — rectângulos para entidades, losangos para relações, óvalos para atributos. Académico, prolixo.
  • Crow's Foot (IE) — rectângulos com colunas, linhas com "pés de galinha" para cardinalidade. Mais usado em 2026.
  • UML — class diagrams adaptados.

Ferramentas: dbdiagram.io, drawSQL, MySQL Workbench, DataGrip, Lucidchart.

Aulify · Componente Tecnológica · Cursos Profissionais
UC00602 · Modelo relacional de bases de dados

Exemplo · livraria

+----------+        +-------------+        +-------+
|  Autor   |  N:M   |    Livro    |  N:M   | Cliente|
+----------+--------+-------------+--------+--------+
| id (PK)  |        | isbn (PK)   |        | id (PK)|
| nome     |        | titulo      |        | nome   |
| nac.     |        | ano         |        | email  |
+----------+        | preço       |        +--------+
                    +-------------+

Relações N:M resolvem-se com tabelas Autor_Livro e Encomenda (Cliente ↔ Livro).

Aulify · Componente Tecnológica · Cursos Profissionais
UC00602 · Modelo relacional de bases de dados
Bloco 3 · Normalização

Formas normais

Aulify · Componente Tecnológica · Cursos Profissionais
UC00602 · Modelo relacional de bases de dados

1FN · 2FN · 3FN

1FN — cada célula tem valor atómico (não listas, não múltiplos valores).

✗ aluno.telefones = "919...,933..."
✓ tabela separada Telefone com FK aluno_id.

2FN — 1FN + cada atributo não-chave depende da chave inteira (relevante em chaves compostas).

✗ tabela Encomenda_Item com (encomenda_id, produto_id, preço_produto, nome_produto). nome depende só do produto.
✓ mover nome para tabela Produto.

3FN — 2FN + sem dependências transitivas.

✗ Aluno (id, codigo_postal, cidade). cidade depende do código postal.
✓ tabela CodigoPostal separada.

Aulify · Componente Tecnológica · Cursos Profissionais
UC00602 · Modelo relacional de bases de dados

Quando desnormalizar?

Em sistemas de leitura intensiva (relatórios, BI), desnormalização melhora performance — duplicam-se dados para evitar JOINs.

Exemplo: relatório de vendas com nome do cliente repetido em cada linha do extracto, em vez de fazer JOIN com Cliente.

Regra: normalizar primeiro, desnormalizar só com motivo medido.

Aulify · Componente Tecnológica · Cursos Profissionais
UC00602 · Modelo relacional de bases de dados
Bloco 4 · Restrições

Garantir integridade

Aulify · Componente Tecnológica · Cursos Profissionais
UC00602 · Modelo relacional de bases de dados

Tipos de restrição

Tipo Função
PRIMARY KEY Identifica unicamente cada linha
FOREIGN KEY Liga a outra tabela
UNIQUE Valor único na coluna (ex.: email)
NOT NULL Obrigatório preencher
CHECK Regra customizada (ex.: idade >= 0)
DEFAULT Valor por defeito se omisso
Aulify · Componente Tecnológica · Cursos Profissionais
UC00602 · Modelo relacional de bases de dados

Acções referenciais

Quando se apaga ou actualiza uma linha "pai" referenciada por filhos:

  • CASCADE — apaga/actualiza os filhos também.
  • SET NULL — coloca FK a NULL nos filhos.
  • RESTRICT / NO ACTION — impede a operação se houver filhos.
  • SET DEFAULT — coloca valor default.
Para tabelas de log/histórico, geralmente RESTRICT. Para detalhes que só existem se o pai existir (ex.: itens de encomenda), CASCADE.
Aulify · Componente Tecnológica · Cursos Profissionais
UC00602 · Modelo relacional de bases de dados
Bloco 5 · Caso prático

Modelar uma loja online

Aulify · Componente Tecnológica · Cursos Profissionais
UC00602 · Modelo relacional de bases de dados

Entidades

  • Cliente — id, nome, email, telefone, morada.
  • Produto — id, nome, descricao, preco, stock.
  • Categoria — id, nome.
  • Encomenda — id, data, cliente_id (FK), estado.
  • EncomendaItem — encomenda_id (FK), produto_id (FK), qty, preço unitário.
Aulify · Componente Tecnológica · Cursos Profissionais
UC00602 · Modelo relacional de bases de dados

Relações

  • Categoria 1:N Produto
  • Cliente 1:N Encomenda
  • Encomenda 1:N EncomendaItem
  • Produto N:M Encomenda (via EncomendaItem)
CREATE TABLE Categoria (
  id INT PRIMARY KEY AUTO_INCREMENT,
  nome VARCHAR(80) NOT NULL UNIQUE
);

CREATE TABLE Produto (
  id INT PRIMARY KEY AUTO_INCREMENT,
  nome VARCHAR(150) NOT NULL,
  preco DECIMAL(10,2) NOT NULL CHECK (preco >= 0),
  stock INT NOT NULL DEFAULT 0,
  categoria_id INT REFERENCES Categoria(id)
);
Aulify · Componente Tecnológica · Cursos Profissionais
UC00602 · Modelo relacional de bases de dados
Aulify · UC00602 · Fim

Modelo bem desenhado, SQL fácil.

📧 geral@aulify.pt
Aulify · Componente Tecnológica · Cursos Profissionais