Banco de Dados I — 2026.2

Aula 8
Laboratório: Criação Completa de um Banco

👨‍🏫 Prof. Gustavo Pinto 🏛️ UFPA 📅 14 de maio de 2026 🕣 7h30 – 9h10

Objetivo do Lab

Criar um banco de dados completo do zero: DDL (estrutura) + DML (dados). Domínio: Sistema de Biblioteca.

Passo 1 — CREATE TABLE

CREATE TABLE editora (
    id    SERIAL PRIMARY KEY,
    nome  VARCHAR(100) NOT NULL UNIQUE
);
CREATE TABLE autor (
    id    SERIAL PRIMARY KEY,
    nome  VARCHAR(100) NOT NULL
);
CREATE TABLE livro (
    isbn       CHAR(13) PRIMARY KEY,
    titulo     VARCHAR(200) NOT NULL,
    ano        INTEGER CHECK (ano > 1900),
    editora_id INTEGER NOT NULL REFERENCES editora(id)
);
CREATE TABLE livro_autor ( -- tabela associativa N:M
    livro_isbn CHAR(13) REFERENCES livro(isbn),
    autor_id   INTEGER REFERENCES autor(id),
    PRIMARY KEY (livro_isbn, autor_id)
);

Passo 1 — CREATE TABLE (cont.)

CREATE TABLE membro (
    id       SERIAL PRIMARY KEY,
    nome     VARCHAR(100) NOT NULL,
    email    VARCHAR(150) UNIQUE,
    dt_cadastro DATE DEFAULT CURRENT_DATE
);
CREATE TABLE emprestimo (
    id         SERIAL PRIMARY KEY,
    membro_id  INTEGER NOT NULL REFERENCES membro(id),
    livro_isbn CHAR(13) NOT NULL REFERENCES livro(isbn),
    dt_retirada DATE NOT NULL DEFAULT CURRENT_DATE,
    dt_devolucao DATE,
    CHECK (dt_devolucao IS NULL OR dt_devolucao >= dt_retirada)
);

Passo 2 — INSERT (populando)

INSERT INTO editora (nome) VALUES
  ('Novatec'), ('Casa do Código'), ('O Reilly');

INSERT INTO autor (nome) VALUES
  ('Carlos Heuser'), ('Abraham Silberschatz'),
  ('Thomas Connolly');

INSERT INTO livro (isbn, titulo, ano, editora_id) VALUES
  ('9788577807826', 'Projeto de Banco de Dados', 2009, 1),
  ('9780073523323', 'Database System Concepts', 2019, 3),
  ('9780132943727', 'Database Systems', 2015, 3);

INSERT INTO livro_autor VALUES
  ('9788577807826', 1), ('9780073523323', 2),
  ('9780132943727', 3);

INSERT INTO membro (nome, email) VALUES
  ('Ana', 'ana@ufpa.br'), ('Bia', 'bia@ufpa.br');

INSERT INTO emprestimo (membro_id, livro_isbn, dt_retirada) VALUES
  (1, '9788577807826', '2026-05-01'),
  (2, '9780073523323', '2026-05-03');
Exercício

Estenda o banco da Biblioteca

① Crie a tabela Reserva

Um membro pode reservar um livro. Campos: id (PK), membro_id (FK), livro_isbn (FK), dt_reserva (NOT NULL), status (VARCHAR: 'ativa', 'cancelada', 'concluída').

② Popule com dados

Insira mais 3 livros, 2 autores, 3 membros e 5 empréstimos. Registre 3 devoluções (UPDATE dt_devolucao). Insira 2 reservas.

Próxima Aula — 19/05 (Ter)

SELECT
WHERE, ORDER BY & LIMIT