2FN - Segunda Forma Normal
Definição simples
Para a aplicação da 2FN, devemos cumprir um requisito importante: a relação já deve estar na 1FN. Depois, verificamos a seguinte condição específica:
Uma relação está na segunda forma normal (2FN) se, e somente se, os atributos não-principais de tiverem dependência funcional total de todos os atributos que formam a chave primária de .
Um atributo não-principal é aquele que não faz parte de nenhuma chave candidata. Em outras palavras, ele é um atributo que não é essencial para identificar, de forma única, uma tupla na relação.
Em português claro, o que essa definição quer dizer é: quando uma relação tem sua chave primária composta, ou seja, formada por mais de um atributo, todos os atributos que não são chave devem ser funcionalmente dependentes de toda a chave primária, e não de apenas parte dela. Se uma relação possui apenas uma chaves primária simples (não composta), então ela não pode apresentar dependências parciais e, portanto, satisfaz automaticamente a 2FN (de acordo com essa definição inicial).
Vejamos o exemplo a seguir, que consiste numa relação que representa a nota alcançada por um estudante em uma disciplina. A chave primária desta relação é composta pelos atributos RGA e CodOfertaDisciplina.
| 🔑 RGA | 🔑 CodOfertaDisciplina | Nome_Aluno | Nome_Disciplina | Nota |
|---|---|---|---|---|
| 20231001 | DSI101 | Ana Silva | Banco de Dados | 7,5 |
| 20231001 | MAT201 | Ana Silva | Cálculo | 9,0 |
| 20231002 | DSI101 | Francisco Costa | Banco de Dados | 5,0 |
Veja que, nesta relação, o atributo Nota depende da chave primária completa (a identificação do aluno e a identificação da disciplina).
Já o atributo Nome_Aluno depende apenas de RGA, que é parte da chave primária composta (RGA, CodOfertaDisciplina). Isso caracteriza uma dependência funcional parcial, que viola a 2FN. De forma semelhante, o atributo Nome_Disciplina depende apenas de CodOfertaDisciplina, sem qualquer dependência de RGA, também causando dependência parcial.
Para que a relação esteja na 2FN, esses atributos deveriam ser removidos para relações separadas em que a chave primária seja o atributo do qual eles dependem totalmente. Por exemplo, Nome_Aluno poderia estar numa relação com chave RGA, enquanto Nome_Disciplina estaria numa relação com chave CodOfertaDisciplina.
Veja como ficaria o resultado:
OFERTA_DISCIPLINA
| 🔑CodOfertaDisciplina (PK) | Nome_Disciplina |
|---|---|
| DSI101 | Banco de Dados |
| MAT201 | Cálculo |
ALUNO
| 🔑 RGA (PK) | Nome_Aluno |
|---|---|
| 20231001 | Ana Silva |
| 20231002 | Francisco Costa |
ALUNO_DISCIPLINA
| 🔑 RGA (PK, FK) | 🔑 CodOfertaDisciplina (PK, FK) | Nota |
|---|---|---|
| 20231001 | DSI101 | 7,5 |
| 20231001 | MAT201 | 9,0 |
| 20231002 | DSI101 | 5,0 |
A relação ALUNO_DISCIPLINA funciona como uma tabela associativa que liga os alunos às disciplinas das quais estão matriculados, contendo as chaves primárias de ALUNO e OFERTA_DISCIPLINA.
Definição restritiva
Elmasri e Navathe também apresentam outra versão mais restritiva da 2FN: nela, em vez de se analisar apenas a chave primária, considera-se qualquer atributo chave.
Uma relação está na 2FN se cada atributo não principal for total e funcionalmente dependente de cada chave de .
Ou seja: agora, olhamos não apenas para a dependência total da chave primária, mas de todos os atributos que são únicos para as tuplas daquela relação.
Para podermos visualizar essa situação, vamos considerar a relação anterior, com uma pequena diferença: criaremos uma chave substituta (surrogate key) para que a relação tenha uma chave primária simples.
| 🔑 idMatricula | RGA | CodOfertaDisciplina | Nome_Aluno | Nome_Disciplina | Nota |
|---|---|---|---|---|---|
| 1 | 20231001 | DSI101 | Ana Silva | Banco de Dados | 7,5 |
| 2 | 20231001 | MAT201 | Ana Silva | Cálculo | 9,0 |
| 3 | 20231002 | DSI101 | Francisco Costa | Banco de Dados | 5,0 |
Veja que agora a chave primária é simples (formada por um único atributo). Se fôssemos considerar apenas a primeira definição formal da 2FN, nem precisaráimos nos preocupar com essa relação. No entanto, com a nova definição, chegamos a um ponto importante: a combinação de é chave candidata para a relação. Logo, temos que garantir que todos os atributos dependam não apenas de , mas também da combinação de .