• 1FN - 1ª Forma Normal: todos os atributos de uma tabela devem ser atômicos, ou seja, a tabela não deve conter grupos repetidos e nem atributos com mais de um valor. Os grupos repetidos devem ser postos em tabelas separadas, conectados por uma chave primária ou estrangeira.


Exemplo:


PESSOAS = {Id+ Nome + Endereço + Telefones}


Ela contém a chave primária “Id” e o atributo “Telefones” é um atributo multivalorado e, portanto, a tabela não está na 1FN. Para deixá-la na 1FN, cria-se uma nova tabela chamada TELEFONES que conterá “IdPessoa” como chave estrangeira de PESSOAS e “Telefone” como o valor multivalorado que será armazenado.


PESSOAS = { Id + Nome + Endereço } TELEFONES = { IdPessoa + Telefone }


  • 2FN - 2ª Forma Normal: todos os atributos não chaves da tabela devem depender unicamente da chave primária. Para tanto, é preciso identificar as colunas que não são funcionalmente dependentes da chave primária da tabela e, em seguida, remover essa coluna da tabela principal e criar uma nova tabela com esses dados.


Exemplo:


ALUNOS_CURSOS = { IdAluno + IdCurso + Nota + DescriçãoCurso }


Nessa tabela, o atributo “DescriçãoCurso” depende apenas da chave primária IdCurso. Dessa forma, a tabela não está na 2FN. Para tanto, cria-se uma nova tabela chamada CURSOS que tem como chave primária IdCurso e atributo “Descrição” retirando, assim, o atributo “DescriçãoCurso” da tabela ALUNOS_CURSOS.


ALUNOS_CURSOS = { IdAluno + IdCurso + Nota } CURSOS = {IdCurso + Descrição}


  • 3FN - 3ª Forma Normal: os atributos não chave de uma tabela devem ser mutuamente independentes e dependentes unicamente e exclusivamente da chave primária (um atributo B é funcionalmente dependente de A se, e somente se, para cada valor de A só existe um valor de B). Para atingir essa forma normal, é preciso identificar as colunas que são funcionalmente dependentes das outras colunas não chave e extraí-las para outra tabela.


Exemplo:


FUNCIONARIOS = { Id + Nome + IdCargo + DescriçãoCargo }


O atributo “DescriçãoCargo” depende exclusivamente de “IdCargo” (atributo não chave) e, portanto, deve-se criar uma nova tabela com esses atributos. Assim:


FUNCIONARIOS = { Id + Nome + IdCargo } CARGOS = { IdCargo + Descrição }


  • Exemplo:
    • Caso discutido em sala de aula: