Início

Software Design

UA14 — Conceitos de Banco de Dados

Banco de dados relacional organiza dados em tabelas com linhas e colunas, usando SQL para criar, consultar e manipular esses dados. É a tecnologia mais usada para persistência de dados em aplicações corporativas.

Slides — Da Planta ao Código: Banco de Dados

Da Planta ao Código
Da Planta ao Código
A Escalabilidade Exige Engenharia
A escalabilidade exige engenharia
Ciclo de Vida da Engenharia de Dados
Ciclo de vida da engenharia de dados
Da Desordem à Estrutura
Do caos do mundo real ao modelo matemático do PostgreSQL
Anatomia do Sistema Relacional
Database → Tables → Rows → Columns — a hierarquia relacional

Por que banco relacional?

Imagine 30 vendas por mês controladas em planilha — funciona. Agora imagine 40 milhões de transações diárias. A planilha estoura. O banco relacional resolve escalabilidade, consistência e consultas complexas que planilhas jamais conseguiriam.

Conceitos fundamentais

Tabela (Relação)

Estrutura bidimensional: linhas (registros/tuplas) e colunas (atributos/campos).

Chave Primária (PK)

Coluna que identifica unicamente cada registro. Nunca nula, nunca duplicada. O “CPF” da linha.

Chave Estrangeira (FK)

Coluna que referencia a PK de outra tabela. Cria o “elo” entre tabelas e garante integridade referencial.

Índice

Estrutura auxiliar que acelera buscas. Pense como o índice de um livro: você não precisa ler tudo para achar o que quer.

PK e FK
A Estrutura Física: PK & FK
O Triunfo da FK
O segredo da escalabilidade: FK vs. redundância

SQL — DDL e DML

SQL: DDL e DML
SQL: DDL e DML
Anatomia de uma consulta
Anatomia de uma consulta SELECT
A Caixa de Ferramentas: Taxonomia SQL
DDL, DML, DQL, DCL e DTL — cada sublinguagem e seu papel
A Peça Fundamental do Ecossistema Web
Client → Web Tier → Business Tier → EIS (banco de dados)

SQL tem duas sub-linguagens principais:

  • DDL (Data Definition Language): define a estrutura. Comandos: CREATE TABLE, ALTER TABLE, DROP TABLE.
  • DML (Data Manipulation Language): manipula os dados. Comandos: SELECT, INSERT, UPDATE, DELETE.

SELECT — anatomia completa

SELECT   nome, telefone          -- O Quê: colunas desejadas
FROM     Cliente                 -- De Onde: tabela fonte
WHERE    mes_aniversario = 'janeiro' -- O Filtro: condição
ORDER BY nome ASC;               -- Ordenação

INSERT, UPDATE, DELETE

-- Inserir
INSERT INTO Cliente (nome, email, telefone)
VALUES ('Marcus', 'marcus@email.com', '(47) 99999-0000');

-- Atualizar
UPDATE Produto SET preco = 29.90 WHERE id = 15;

-- Deletar (sempre com WHERE!)
DELETE FROM Pedido WHERE status = 'cancelado' AND data < '2023-01-01';

JOIN — unindo tabelas

SELECT c.nome, p.data, p.status
FROM   Cliente c
INNER JOIN Pedido p ON c.id = p.id_cliente
WHERE  p.status = 'pendente';
Tipo de JOINRetorna
INNER JOINApenas registros com correspondência em ambas as tabelas
LEFT JOINTodos da esquerda + correspondências da direita (null onde não há)
RIGHT JOINTodos da direita + correspondências da esquerda
FULL JOINTodos de ambas as tabelas

DELETE sem WHERE = catástrofe

Nunca execute DELETE FROM tabela sem uma cláusula WHERE. Você apagará todos os registros da tabela. Em produção, isso pode ser irreversível. Sempre teste um SELECT com o mesmo WHERE antes de executar um DELETE ou UPDATE.

Principais SGBDs e licenças

Banco de DadosLicençaCusto de administraçãoTamanho do projeto
MySQLPagaBaixoPequeno a médio
MariaDBGratuitaBaixoPequeno a médio
Microsoft SQL Server (Standard/Enterprise)PagaAltoMédio a grande
Microsoft SQL Server (Express)GratuitaMédioPequeno
PostgreSQLGratuitaMédioMédio a grande
OraclePagaAltoGrande
MongoDBGratuitaAltoMédio a grande (NoSQL)

MongoDB é não relacional — não usa SQL. Organiza dados em documentos JSON e oferece velocidade de resposta superior a consultas em cenários de alta escala.

Propriedades ACID

Garantem a robustez de transações em banco de dados relacionais:

Atomicidade

A transação é tudo ou nada. Se uma operação falhar no meio, todas as alterações são desfeitas (rollback).

Consistência

O banco sai de um estado válido e chega a outro estado válido. Regras e constraints são respeitadas.

Isolamento

Transações concorrentes não interferem entre si. O resultado é como se fossem executadas em série.

Durabilidade

Uma vez confirmada (commit), a transação persiste mesmo em caso de falha de energia ou crash.

Práticas Modernas — Banco de Dados

  • MySQL vs. PostgreSQL: após a aquisição pela Oracle em 2010, PostgreSQL tornou-se a escolha preferida para novos projetos — mais recursos avançados (JSON, window functions, extensões), licença BSD, crescimento acelerado.
  • ORMs modernos: Prisma (TypeScript-first), TypeORM, Sequelize e Hibernate abstraem SQL e geram migrações automaticamente. Permitem trabalhar com banco de dados usando objetos e tipos.
  • Database migrations como código: Flyway (Java) e Alembic (Python) versionam as mudanças de schema no banco — executadas automaticamente no deploy, auditáveis e reversíveis.
  • Banco de dados como serviço (DBaaS): Supabase (PostgreSQL), PlanetScale (MySQL com branching), Neon (PostgreSQL serverless) eliminam a necessidade de administrar servidores de banco.

Dicas para a prova — UA14

  • Banco de dados supera planilha em: pesquisa avançada, volume, integridade e automação.
  • Chave primária ideal: ISBN para livros (número único mundialmente por edição).
  • Tipos de atributos: VARCHAR=texto, INT=inteiro, DATE=data, BOOLEAN=0 ou 1.
  • Em SELECT: SELECT e FROM são obrigatórios; WHERE é opcional.
  • Projeto pequeno com orçamento limitado → MariaDB (gratuita, baixo custo de administração).
  • MongoDB é não relacional (NoSQL) — não usa SQL.
  • ACID: Atomicidade, Consistência, Isolamento, Durabilidade.

Referências bibliográficas desta UA

  • Barboza, F. F. M. Modelagem e Desenvolvimento de Banco de Dados. Porto Alegre: SAGAH, 2018.
  • Elmasri, R.; Navathe, S. B. Fundamentals of database systems. 4. ed. London: Pearson, 2007.