Informática

Bancos de dados: chaves, normalização, SQL e transações

Os editais de informática, mesmo os de nível médio, costumam trazer “noções de banco de dados”. Na prova, o conteúdo se resume a conceitos do modelo relacional, chaves, normalização, comandos SQL e transações. Este guia organiza esses pontos, resolve consultas sobre um conjunto pequeno de dados e destaca as pegadinhas, como a comparação com NULL e a diferença entre DELETE, TRUNCATE e DROP.

Conceitos básicos

  • Banco de dados: conjunto organizado de dados relacionados.
  • SGBD (Sistema Gerenciador de Banco de Dados): software que cria, mantém e controla o acesso ao banco. PostgreSQL, MySQL, Oracle e SQL Server são exemplos.
  • Modelo relacional: organiza os dados em tabelas (relações), com linhas (registros ou tuplas) e colunas (atributos ou campos).
  • Esquema: a estrutura (tabelas, colunas, tipos e restrições); instância: os dados em um dado momento.

Chaves e integridade

Conceito Definição
Chave primária (PK) identifica cada linha de forma única; não admite valor nulo nem repetido
Chave candidata coluna(s) que poderiam ser a chave primária
Chave estrangeira (FK) coluna que referencia a chave primária de outra tabela
Chave composta chave formada por mais de uma coluna
Integridade de entidade a PK não pode ser nula
Integridade referencial todo valor de FK deve existir na PK referenciada (ou ser nulo, se permitido)

Modelagem: entidades e relacionamentos

No modelo entidade-relacionamento (MER), entidade é o objeto do mundo real (Servidor, Setor), atributo é sua propriedade (nome, anos de serviço) e relacionamento liga entidades. A cardinalidade define quantas ocorrências se relacionam: 1:1, 1:N ou N:N. Na passagem para o modelo relacional:

  • Relacionamento 1:N: a chave primária do lado “1” vira chave estrangeira no lado “N”. Um setor tem vários servidores, então a tabela de servidor recebe a coluna setor_id.
  • Relacionamento N:N: exige uma tabela associativa com as duas chaves. Um servidor participa de vários projetos e um projeto tem vários servidores: cria-se a tabela participação (servidor_id, projeto_id).

Normalização

Normalizar reduz redundância e evita anomalias de inserção, atualização e exclusão.

  • 1FN: cada coluna guarda valor atômico (indivisível), sem grupos repetidos. Uma coluna “telefones” com três números violaria a 1FN.
  • 2FN: está na 1FN e todo atributo não chave depende da chave inteira (sem dependência parcial). Só aparece como problema em chaves compostas.
  • 3FN: está na 2FN e nenhum atributo não chave depende de outro atributo não chave (sem dependência transitiva).

Exemplo. Tabela pedido(id_pedido, id_cliente, nome_cliente, cidade_cliente). O nome e a cidade dependem de id_cliente, que não é a chave do pedido: dependência transitiva. Para a 3FN, crie cliente(id_cliente, nome, cidade) e deixe o pedido só com id_pedido e id_cliente.

SQL: grupos de comandos

Grupo Função Comandos
DDL (definição) cria e altera a estrutura CREATE, ALTER, DROP, TRUNCATE (em muitos SGBD)
DML (manipulação) altera os dados INSERT, UPDATE, DELETE
DQL (consulta) consulta os dados SELECT
DCL (controle) permissões GRANT, REVOKE
TCL (transação) controla transações COMMIT, ROLLBACK, SAVEPOINT

A classificação do SELECT varia: alguns autores o incluem na DML e outros o separam em DQL. A banca costuma explicitar o critério; sem ele, leia as alternativas.

Pegadinhas de remoção

  • DELETE: remove linhas (com WHERE escolhe quais); é DML e pode ser desfeito em transação.
  • TRUNCATE: esvazia toda a tabela e mantém a estrutura; em muitos SGBD é tratado como DDL.
  • DROP: apaga a própria tabela (estrutura e dados).
  • DELETE sem WHERE apaga todas as linhas.

SELECT na prática

Considere duas tabelas:

setor(id, nome): (1, Protocolo), (2, Compras), (3, Arquivo).

servidor(id, nome, setor_id, anos): (1, Ana, 1, 8), (2, Bruno, 1, 3), (3, Carla, 2, 5), (4, Diego, 2, 12), (5, Elisa, nulo, 2).

1. Filtrar e ordenar. SELECT nome FROM servidor WHERE anos >= 5 ORDER BY nome; Resultado: Ana, Carla, Diego.

2. Junção interna (INNER JOIN). Retorna só as linhas com correspondência nas duas tabelas. SELECT s.nome, t.nome FROM servidor s INNER JOIN setor t ON s.setor_id = t.id; Resultado: Ana-Protocolo, Bruno-Protocolo, Carla-Compras, Diego-Compras. Elisa não aparece, pois não tem setor.

3. Junção externa (LEFT JOIN). Mantém todas as linhas da tabela à esquerda. SELECT t.nome, s.nome FROM setor t LEFT JOIN servidor s ON s.setor_id = t.id; Resultado: Protocolo-Ana, Protocolo-Bruno, Compras-Carla, Compras-Diego, Arquivo-nulo. O setor Arquivo aparece com servidor nulo.

4. Agrupamento. SELECT t.nome, AVG(s.anos) FROM servidor s JOIN setor t ON s.setor_id = t.id GROUP BY t.nome; Resultado: Compras = 8,5 (média de 5 e 12) e Protocolo = 5,5 (média de 8 e 3).

5. HAVING filtra grupos. Acrescentando HAVING AVG(s.anos) > 6, só Compras permanece (8,5 > 6; 5,5 não).

6. Agregações e NULL. COUNT(*) conta as 5 linhas; COUNT(setor_id) conta 4, pois ignora nulos; AVG(anos) = (8+3+5+12+2)/5 = 6; MAX(anos) = 12.

7. Comparar com NULL. WHERE setor_id IS NULL retorna Elisa. WHERE setor_id = NULL não retorna nenhuma linha, porque nulo não é igual a nada, nem a ele mesmo.

Ordem de execução e regras

  • Escrita: SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY.
  • Lógica de execução: FROM (e junções), WHERE, GROUP BY, HAVING, SELECT, ORDER BY.
  • WHERE filtra linhas antes de agrupar e não aceita função de agregação; HAVING filtra grupos depois do agrupamento.
  • Funções de agregação: COUNT, SUM, AVG, MIN, MAX.

Transações e propriedades ACID

Uma transação é uma sequência de operações tratada como unidade lógica.

  • Atomicidade: ou tudo é executado, ou nada (ROLLBACK desfaz).
  • Consistência: a transação leva o banco de um estado válido a outro.
  • Isolamento: transações simultâneas não interferem entre si.
  • Durabilidade: após o COMMIT, o resultado persiste, mesmo com falha.

Índices, visões e NoSQL

  • Índice: estrutura auxiliar que acelera buscas, ao custo de espaço e de escrita mais lenta.
  • Visão (view): consulta armazenada que se comporta como tabela virtual.
  • NoSQL: bancos não relacionais, como documentos, chave-valor, colunas e grafos, usados quando o esquema flexível ou a escala horizontal pesam mais que as junções. Não substituem o relacional em todos os casos.
  • Ao contratar serviço em nuvem de dados, a segurança passa por controle de acesso e cópias de segurança; veja controle de acesso e medidas de segurança.

Erros comuns

  • Achar que a chave estrangeira precisa ser única na tabela em que está: ela pode se repetir (vários servidores no mesmo setor).
  • Confundir DELETE, TRUNCATE e DROP.
  • Usar função de agregação em WHERE.
  • Comparar com NULL usando “=” em vez de IS NULL.
  • Pensar que COUNT(coluna) conta nulos.
  • Dizer que a 2FN trata de dependência transitiva (isso é a 3FN).

Conferência e orientação

Os conceitos seguem a literatura clássica do modelo relacional e o padrão SQL, que cada SGBD implementa com variações; os dados do exemplo são fictícios, e as consultas foram executadas e conferidas em um banco de teste. Não há norma oficial brasileira específica para este conteúdo, então este guia é orientação prática. Confira o edital: a banca pode usar a sintaxe de um SGBD determinado.

Próximos passos

Leia também

Para continuar no site

Viu algo errado, desatualizado ou confuso? Relatar erro nesta página