O que é a normalização em um banco de dados ?
Tags: database, mysql, sql, programming
Published: 2024-01-31 00:30:00



A normalização em bancos de dados é um processo essencial para organizar e estruturar os dados de forma eficiente, reduzindo redundâncias e melhorando a integridade e consistência das informações. Ela é dividida em diferentes formas normais, cada uma com critérios específicos. Vamos aprimorar o artigo e adicionar exemplos em SQL.

## 1 FN - Primeira Forma Normal

A Primeira Forma Normal (1FN) diz respeito à eliminação de atributos multivalorados em uma tabela. A tabela fornecida na questão não está na 1FN devido ao atributo multivalorado "telefone". Vamos reestruturá-la:
 
	`CREATE TABLE cliente (`
	    `cliente_id INT PRIMARY KEY,`
	    `nome VARCHAR(50),`
	    `sobrenome VARCHAR(50),`
	    `endereco VARCHAR(50)`
	`);`
	
	`CREATE TABLE telefone (`
	    `telefone_id INT PRIMARY KEY,`
	    `cliente_id INT,`
	    `numero INT,`
	    `FOREIGN KEY (cliente_id) REFERENCES cliente(cliente_id)`
	`);`

## 2 FN - Segunda Forma normal

A Segunda Forma Normal (2FN) trata da eliminação de dependências parciais. Considere uma tabela de produtos com categorias:
	 
	 CREATE TABLE produto (
            produto_id INT PRIMARY KEY,
            nome_produto VARCHAR(50),
            categoria_id INT,
            categoria_nome VARCHAR(50),
            FOREIGN KEY (categoria_id) REFERENCES 
            categoria(categoria_id)
	);

	CREATE TABLE categoria (
	    categoria_id INT PRIMARY KEY,
        nome_categoria VARCHAR(50)
	);
	
Neste exemplo, a tabela `produto` está na 1FN, mas não na 2FN devido à dependência parcial entre `categoria_id` e `categoria_nome`. Vamos corrigir isso:

	CREATE TABLE produto (
	    produto_id INT PRIMARY KEY,
	    nome_produto VARCHAR(50),
	    categoria_id INT,
	    FOREIGN KEY (categoria_id) REFERENCES categoria(categoria_id)
	);
	
	CREATE TABLE categoria (
	    categoria_id INT PRIMARY KEY,
	    nome_categoria VARCHAR(50)
	);

## 3 FN - Terceira Forma normal

A Terceira Forma Normal (3FN) visa eliminar dependências transitivas. Suponha uma tabela que armazena informações sobre livros e autores:
	 
	CREATE TABLE livro (
	    livro_id INT PRIMARY KEY,
	    titulo VARCHAR(50),
	    autor_id INT,
	    autor_nome VARCHAR(50),
	    editora VARCHAR(50),
	    FOREIGN KEY (autor_id) REFERENCES autor(autor_id)
	);
	
	CREATE TABLE autor (
	    autor_id INT PRIMARY KEY,
	    nome_autor VARCHAR(50),
	    nacionalidade VARCHAR(50)
	);
	
A tabela `livro` não está na 3FN devido à dependência transitiva entre `autor_id`, `autor_nome` e `nacionalidade`. Vamos ajustar:

	CREATE TABLE livro (
           livro_id INT PRIMARY KEY,
           titulo VARCHAR(50),
           autor_id INT,
           editora VARCHAR(50),
           FOREIGN KEY (autor_id) REFERENCES autor(autor_id)
        );

        CREATE TABLE autor (
          autor_id INT PRIMARY KEY,
          nome_autor VARCHAR(50),
          nacionalidade VARCHAR(50)
        );

Essas alterações garantem que a tabela `livro` esteja na 3FN, eliminando a dependência transitiva. A normalização é uma prática crucial para projetar bancos de dados eficientes e reduzir inconsistências nos dados.