CodeGym /Cursos /SQL SELF /Análise de bancos de dados existentes quanto às formas no...

Análise de bancos de dados existentes quanto às formas normais

SQL SELF
Nível 26 , Lição 2
Disponível

Quando a gente fala de analisar um banco de dados pra ver se ele tá nas formas normais, estamos falando de estudar a estrutura das tabelas, como elas se relacionam e as dependências entre os atributos. O objetivo principal dessa análise é achar onde a normalização tá sendo quebrada e avaliar como isso afeta a performance, a integridade e a facilidade de trabalhar com os dados.

Falando de um jeito mais simples, é tipo uma auditoria de contabilidade: você confere se o dinheiro não tá jogado de qualquer jeito, mas sim separado certinho nas categorias certas de gasto.

Abordagem prática pra analisar um banco de dados

Em qualquer banco de dados, a gente começa fazendo três perguntas básicas, cada uma ligada a uma das três formas normais.

Imagina que a gente tem um banco de dados de estoque com uma tabela assim:

product_id product_name supplier_name supplier_phone stock_quantity
1 Pregos StroyKomplekt +12301112233 150
2 Parafusos KrepyoshPro +12306667788 200
3 Porcas StroyKomplekt +12301112233 100

Como a gente verifica se essa tabela tá nas formas normais?

Lembrando, uma tabela tá em 1NF se:

  • Cada célula tem só um valor.
  • Não tem colunas repetidas pro mesmo tipo de dado.

No nosso exemplo, não tem violação da 1NF: cada célula tem um valor atômico. Ou seja, a tabela tá em 1NF. Boa! Bora pra próxima.

Uma tabela tá em 2NF se:

  • Ela já tá em 1NF.
  • Todos os atributos que não fazem parte da chave dependem da chave primária inteira (e não de uma parte dela).

Nessa tabela, dá pra ver que supplier_name e supplier_phone dependem só do product_id — que é a chave primária. Mas tem duplicação de dados: pro mesmo fornecedor, a gente guarda o nome e o telefone em várias linhas.

Pra deixar a tabela em 2NF, dá pra separar em duas tabelas:

Tabela Products:

product_id product_name supplier_id stock_quantity
1 Pregos 1 150
2 Parafusos 2 200
3 Porcas 1 100

Tabela Suppliers:

supplier_id supplier_name supplier_phone
1 StroyKomplekt +78901112233
2 KrepyoshPro +78906667788

Agora cada fornecedor aparece só uma vez, e a ligação entre as tabelas é pelo foreign key supplier_id.

Uma tabela tá em 3NF se:

  • Ela já tá em 2NF.
  • Todos os atributos que não fazem parte da chave dependem da chave primária, e não de outros atributos que também não são chave.

No caso das tabelas normalizadas Products e Suppliers, não tem dependências transitivas. Ou seja, as tabelas tão em 3NF.

Exercício prático

Imagina que a gente tem a tabela original "Universidade"

student_id student_name course_name professor_name professor_email
101 Otto Lin Matemática Peter Pen pen@university.com
102 Anna Song Física Alex Sid sid@university.com
103 Otto Lin Física Alex Sid sid@university.com
  1. Verifica se a tabela tá nas formas normais.
  2. Coloca ela em 1NF, 2NF e 3NF, se precisar.

Solução

PASSO 1: Verificando 1NF

A tabela já tá em 1NF: cada célula tem só um valor.

PASSO 2: Verificando 2NF

A tabela quebra a 2NF: info dos professores (nome e email) se repete. Dá pra jogar isso pra uma tabela separada:

Tabela Students:

student_id student_name
101 Otto Lin
102 Anna Song

Tabela Courses:

course_id course_name professor_id
1 Matemática 1
2 Física 2

Tabela Professors:

professor_id professor_name professor_email
1 Peter Pen pen@university.com
2 Alex Sid sid@university.com

Tabela Enrollments:

enrollment_id student_id course_id
1 101 1
2 102 2
3 103 2

PASSO 3: Verificando 3NF

Na nova estrutura não tem dependências transitivas. As tabelas tão em 3NF.

Dicas práticas

  1. Não tenta buscar o ideal sem necessidade. Às vezes normalizar demais deixa as queries mais complicadas.
  2. Analisa como um detetive. Procura duplicidade, dependências desnecessárias e outras "anomalias".
  3. Não esquece da performance. Normalização é um equilíbrio entre dados limpos e velocidade de processamento.

Agora que você já sabe achar problemas no banco de dados e resolver, já consegue fazer uma "auditoria" honesta em qualquer banco, de qualquer tamanho. Lembra: um banco de dados bom não é só funcional, mas também bonito (ou seja, normalizado).

Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION