Skip to content

Normalização

Introdução

A normalização é um processo utilizado no design de bancos de dados para organizar os dados de forma eficiente, reduzindo redundâncias e melhorando a integridade dos dados. Por meio de uma série de regras e formas normais, a normalização divide as informações em tabelas menores relacionadas, promovendo consistência e facilitando o gerenciamento. Esse processo ajuda a evitar anomalias em operações como inserção, atualização e exclusão, além de otimizar o desempenho e a escalabilidade do sistema.

O processo de normalização se divide em 5 etapas, chamadas de Formas Normais (FN).

  • 1ª Forma Normal (1FN): Na 1FN, cada campo da tabela deve conter apenas um único valor indivisível, e todos os registros da tabela devem ter a mesma estrutura, sem repetições de grupos de atributos.

  • 2ª Forma Normal (2FN): Para estar em 2FN, é necessário que não haja dependências parciais, ou seja, todos os atributos não-chave devem depender da totalidade da chave primária.

  • 3ª Forma Normal (3FN): Na 3FN, deve-se garantir que todos os atributos não-chave sejam diretamente dependentes da chave primária, sem intermediários.

  • Forma Normal de Boyce-Codd (FNBC): A FNBC é uma versão mais rigorosa da 3ª Forma Normal. Por já atender a 2ª e 3ª forma Normal.

  • 4ª Forma Normal (4FN): A 4FN exige que não existam dependências multivaloradas, onde um único atributo poderia ser relacionado a múltiplos valores de outro atributo de forma independente.

Tabelas a serem Normalizadas

Todas as tabelas contidas na primeira versão do MR ( modelo relacional), entraram no processo de normalização, sendo detalhadas a seguir.


Tabela Sala

id-sala ➡ id_sala_conectada, id_regiao, nome e descr

Na tabela Sala, os atributos id-sala , id_sala_conectada, id_regiao, nome e descr atendem a esse critério, garantindo que ela esteja na 1ª Forma Normal. Como a tabela possui apenas uma chave primária simples (id-sala), automaticamente todos os atributos dependem da chave em sua totalidade. Na tabela item, todos os atributos (id_sala_conectada, id_regiao, nome e descr) depende diretamente do id-sala, atendendo ao critério da 3ª Forma Normal.

A tabela Sala, com atributos atômicos e monovalorados, não apresenta tais dependências, satisfazendo assim a 4ª Forma Normal.


Tabela Bau

id-bau ➡ itens

Na tabela Bau, o atributo itens fere essa propriedade isso porque terá vários itens sendo um atributo multivalorado. Para que atende a esse critério, será necessário que o atributo itens sejá parte da chave primária, tornando id-bau e itens chave primária composta.

Correção

Tornando itens como chave primária e mudando seu nome para melhor clareza para item agora ele atende a 1ª Forma Normal.

Como a tabela possui apenas dois atributos das quais compõe a chave a primária (composta) não é ferido a 2ª Forma Normal. Na tabela Bau todos os atributos são chaves.

A tabela Bau, com atributos atômicos e monovalorados, não apresenta tais dependências, satisfazendo assim a 4ª Forma Normal.


Tabela Baus

id-bau, id-sala ➡ (nenhum outro atributo)

Na tabela Baus, os atributos id-sala , id_bau atendem a esse critério, garantindo que ela esteja na 1ª Forma Normal. Como a tabela Baus possui apenas chave primária , automaticamente todos os atributos dependem da chave em sua totalidade. Na tabela Baus, por não existir atributos não chave, automaticamente já é atendido a 3ª Forma normal.

A tabela Baus, com atributos atômicos e monovalorados, não apresenta tais dependências, satisfazendo assim a 4ª Forma Normal.


Tabela Chefe

id-Chefe ➡ localização, hp, level, status, atk, item_especial

Na tabela Chefe , os atributos id-chefe , localização, hp, level, status, atk e item_especial atendem a esse critério, garantindo que ela esteja na 1ª Forma Normal. Como a tabela Chefe possui apenas uma chave primária , automaticamente todos os atributos dependem da chave em sua totalidade. Na tabela item, todos os atributos (localização, hp, level , status, atk, item_especial) depende diretamente do id-chefe, atendendo ao critério da 3ª Forma Normal.

A tabela Chefe, com atributos atômicos e monovalorados, não apresenta tais dependências, satisfazendo assim a 4ª Forma Normal.


Tabela Checkpoint

id-checkpoint ➡ id_sala, id_pc

Na tabela Checkpoint , os atributos id-checkpoint , id_salae id_pc, atendem a esse critério, garantindo que ela esteja na 1ª Forma Normal. Como a tabela Checkpoint possui apenas uma chave primária , automaticamente todos os atributos dependem da chave em sua totalidade. Na tabela item, todos os atributos (id_salae id_pc) depende diretamente do id-checkpoint, atendendo ao critério da 3ª Forma Normal.

A tabela Checkpoint, com atributos atômicos e monovalorados, não apresenta tais dependências, satisfazendo assim a 4ª Forma Normal.


Tabela Mundo

id-mundo ➡ nome, data

Na tabela Mundo , os atributos id-mundo , nomee data, atendem a esse critério, garantindo que ela esteja na 1ª Forma Normal. Como a tabela Mundo possui apenas uma chave primária , automaticamente todos os atributos dependem da chave em sua totalidade. Na tabela item, todos os atributos (nomee id-data) depende diretamente do id-mundo, atendendo ao critério da 3ª Forma Normal.

A tabela Mundo, com atributos atômicos e monovalorados, não apresenta tais dependências, satisfazendo assim a 4ª Forma Normal.


Tabela Instância Inimigo

idInstancia ➡ idInimigo, localizacao, hp, absorcao, atk, habilidade, combatStatus

Nessa tabela, observamos algumas violações às formas normais. Se tratando da primeira, não foram encontradas violações, mas quando tratamos da 2ª FN, identificamos que existem atributos que não dependem exclusivamente da chave primária, como o campo localização e os demais campos, hp, atk, habilidade, entre outros.

Correção

Foi criada uma tabela, statusNPC, que armazena todos os dados relacionados à atributos do NPC, como vida, dano, etc. Assim, para que um inimigo possua atributos, é necessário que tenha um idInstancia, atendendo à 2ª FN. Fazendo isso eliminamos também as dependências transitivas, atendendo assim à 3ª FN e a FNBC.


Tabela Inimigo

id-inimigo ➡ hp, xp, absorcao, atk, habilidade

A tabela se encontra na 1ª FN, por não haver atributos repetidos, ou seja, seus dados são atômicos. Porém enfrentamos o mesmo problema encontrado na tabela instanciaInimigo, com atributos não dependendo excluisivamente da chave idInimigo.

Correção

Foram retirados os campos de hp, atk, absorcao, etc, sendo referenciados em outra tabela através do campo idStatus. Além disso, tornamos o campo idInimigo uma chave primária, atendendo assim às 2ª e 3ª FN.


Tabela Região

idRegiao ➡ idRegiaoConectada, idMundo, nome, desc, dificuldade

Atende à 1ª FN, por somente possuir valores atômicos, com cada linha sendo única. Também atende à 2ª FN por não possuir dependências parciais e por fim, atende à 3ª FN por não possuir dependências transitivas, por sua vez, também atende à FNBC.


Tabela Habilidade

idHabilidade ➡ idHabilidadeDependente, idGrimorio, efeito, tipo, custo, descricao

A tabela cumpre a 1ª Forma Normal porque todos os valores armazenados nas colunas são atômicos, ou seja, indivisíveis, e cada linha apresenta um identificador único. Ela também satisfaz a 2ª Forma Normal, já que não existem dependências parciais, ou seja, todas as colunas não-chave dependem integralmente da chave primária. Por fim, a tabela está em conformidade com a 3ª Forma Normal, pois não apresenta dependências transitivas, ou seja, não há colunas não-chave dependendo de outras colunas não-chave. Assim, ela também segue a FNBC (Forma Normal de Boyce-Codd).


Tabela Grimório

idGrimorio ➡ idHabilidade

Esta tabela respeita a 1ª Forma Normal, pois cada célula contém apenas um valor indivisível, garantindo que os dados sejam atômicos, e as linhas são identificadas unicamente. Na 2ª Forma Normal, não há dependências parciais, já que todas as colunas não-chave dependem completamente da chave primária. Na 3ª Forma Normal, a ausência de dependências transitivas entre colunas não-chave mostra que a tabela é eficiente. Dessa forma, ela também atende aos critérios da FNBC.


Tabela Consumível

idItem ➡ efeito

Em relação à 1ª Forma Normal, a tabela está normalizada porque armazena apenas valores atômicos em cada célula, e cada linha possui um identificador exclusivo. Quanto à 2ª Forma Normal, não existem dependências parciais, ou seja, todas as colunas que não fazem parte da chave primária dependem inteiramente dela. Na 3ª Forma Normal, a tabela não apresenta dependências transitivas, uma vez que as colunas não-chave não dependem umas das outras. Por isso, ela também segue os princípios da FNBC.


Tabela Arma

idItem ➡ danoBase

A tabela atende à 1ª Forma Normal, já que os dados armazenados são atômicos e não há repetições ou conjuntos de valores em uma mesma célula. Além disso, a tabela segue a 2ª Forma Normal porque não possui dependências parciais, garantindo que todas as colunas não-chave dependam da chave primária por completo. No que diz respeito à 3ª Forma Normal, não há dependências transitivas entre colunas não-chave. Por essas razões, a tabela também está em conformidade com a FNBC.


Tabela Chave

idItem ➡ requerido

Cumprindo a 1ª Forma Normal, a tabela contém apenas valores atômicos, sendo todos os dados indivisíveis, e cada linha tem um identificador exclusivo. Ela também obedece à 2ª Forma Normal, pois não existem dependências parciais entre as colunas, já que todas dependem diretamente da chave primária. Além disso, ao atender à 3ª Forma Normal, a tabela não apresenta dependências transitivas, tornando-a eficiente e bem projetada. Assim, ela segue os princípios da FNBC.


Tabela PC

id-pc ➡ hp, mp, xp, absorção, atk, lvl, luck, combat_status, coins, localização

Na tabela PC, os atributos id-pc, hp, mp, xp, absorção, atk, lvl, luck, combat_status, coins e localização atendem a esse critério, garantindo que ela esteja na 1ª Forma Normal. Como a tabela PC possui apenas uma chave primária, automaticamente todos os atributos dependem da chave em sua totalidade. Na tabela PC, todos os atributos (hp, mp, xp, absorção, atk, lvl, luck, combat_status, coins, localização) dependem diretamente do id-pc, atendendo ao critério da 3ª Forma Normal.

A tabela PC, com atributos atômicos e monovalorados, não apresenta tais dependências, satisfazendo assim a 4ª Forma Normal.


Tabela Transação

id-transação ➡ id_mercador, id_pc, valor, tipo_transação

Na tabela Transação, os atributos id-transação, id_mercador, id_pc, valor e tipo_transação atendem a esse critério, garantindo que ela esteja na 1ª Forma Normal. Como a tabela Transação possui apenas uma chave primária, automaticamente todos os atributos dependem da chave em sua totalidade. Na tabela Transação, todos os atributos (id_mercador, id_pc, valor, tipo_transação) dependem diretamente do id-transação, atendendo ao critério da 3ª Forma Normal.

A tabela Transação, com atributos atômicos e monovalorados, não apresenta tais dependências, satisfazendo assim a 4ª Forma Normal.


Tabela Combate

id-combate ➡ id_pc, id_inimigo, resultado

Na tabela Combate, os atributos id-combate, id_pc, id_inimigo e resultado atendem a esse critério, garantindo que ela esteja na 1ª Forma Normal. Como a tabela Combate possui apenas uma chave primária, automaticamente todos os atributos dependem da chave em sua totalidade. Na tabela Combate, todos os atributos (id_pc, id_inimigo, resultado) dependem diretamente do id-combate, atendendo ao critério da 3ª Forma Normal.

A tabela Combate, com atributos atômicos e monovalorados, não apresenta tais dependências, satisfazendo assim a 4ª Forma Normal.


Tabela Inventário

id-inventario ➡ id_instancias_itens, capacidade, qtd-itens

Na tabela Inventário, os atributos id-inventario, id_instancias_itens, capacidade e qtd-itens atendem a esse critério, garantindo que ela esteja na 1ª Forma Normal. Como a tabela Inventário possui apenas uma chave primária, automaticamente todos os atributos dependem da chave em sua totalidade. Na tabela Inventário, todos os atributos (id_instancias_itens, capacidade, qtd-itens) dependem diretamente do id-inventario, atendendo ao critério da 3ª Forma Normal.

A tabela Inventário, com atributos atômicos e monovalorados, não apresenta tais dependências, satisfazendo assim a 4ª Forma Normal.


Tabela Instância Item

id-instancia-item ➡ id_item, id_sala

Na tabela Instância Item, os atributos id-instancia-item, id_item e id_sala atendem a esse critério, garantindo que ela esteja na 1ª Forma Normal. Como a tabela Instância Item possui apenas uma chave primária, automaticamente todos os atributos dependem da chave em sua totalidade. Na tabela Instância Item, todos os atributos (id_item, id_sala) dependem diretamente do id-instancia-item, atendendo ao critério da 3ª Forma Normal.

A tabela Instância Item, com atributos atômicos e monovalorados, não apresenta tais dependências, satisfazendo assim a 4ª Forma Normal.


Tabela Item

id-item ➡ nome, tipo, descricao, eh_unico, valor

Na tabela Item, os atributos id-item, nome, tipo, descricao, eh_unico e valor atendem a esse critério, garantindo que ela esteja na 1ª Forma Normal. Como a tabela Item possui apenas uma chave primária, automaticamente todos os atributos dependem da chave em sua totalidade. Na tabela Item, todos os atributos (nome, tipo, descricao, eh_unico, valor) dependem diretamente do id-item, atendendo ao critério da 3ª Forma Normal.

A tabela Item, com atributos atômicos e monovalorados, não apresenta tais dependências, satisfazendo assim a 4ª Forma Normal.


Tabela Efeito

id-efeito ➡ alcance, duracao

Na tabela Efeito, os atributos id-efeito, alcance e duracao atendem a esse critério, garantindo que ela esteja na 1ª Forma Normal. Como a tabela Efeito possui apenas uma chave primária, automaticamente todos os atributos dependem da chave em sua totalidade. Na tabela Efeito, todos os atributos (alcance, duracao) dependem diretamente do id-efeito, atendendo ao critério da 3ª Forma Normal.

A tabela Efeito, com atributos atômicos e monovalorados, não apresenta tais dependências, satisfazendo assim a 4ª Forma Normal.


Tabela Personagem

id-personagem ➡ nome, descrição, tipo

Na tabela Personagem, os atributos id-personagem, nome, descrição e tipo atendem a esse critério, garantindo que ela esteja na 1ª Forma Normal. Como a tabela Personagem possui apenas uma chave primária, automaticamente todos os atributos dependem da chave em sua totalidade. Na tabela Personagem, os atributos (nome, descrição, tipo) dependem diretamente do id-personagem, atendendo ao critério da 3ª Forma Normal.

A tabela Personagem, com atributos atômicos e monovalorados, não apresenta tais dependências, satisfazendo assim a 4ª Forma Normal.


Tabela NPC

id-npc ➡ tipo

Na tabela NPC, os atributos id-npc e tipo atendem a esse critério, garantindo que ela esteja na 1ª Forma Normal. Como a tabela NPC possui apenas uma chave primária, automaticamente todos os atributos dependem da chave em sua totalidade. Na tabela NPC, o atributo tipo depende diretamente do id-npc, atendendo ao critério da 3ª Forma Normal.

A tabela NPC, com atributos atômicos e monovalorados, não apresenta tais dependências, satisfazendo assim a 4ª Forma Normal.


Tabela Contratante

id-contratante ➡ localização

Na tabela Contratante, os atributos id-contratante e localização atendem a esse critério, garantindo que ela esteja na 1ª Forma Normal. Como a tabela Contratante possui apenas uma chave primária, automaticamente todos os atributos dependem da chave em sua totalidade. Na tabela Contratante, o atributo localização depende diretamente do id-contratante, atendendo ao critério da 3ª Forma Normal.

A tabela Contratante, com atributos atômicos e monovalorados, não apresenta tais dependências, satisfazendo assim a 4ª Forma Normal.


Tabela Mercador

id-mercador ➡ localização

Na tabela Mercador, os atributos id-mercador e localização atendem a esse critério, garantindo que ela esteja na 1ª Forma Normal. Como a tabela Mercador possui apenas uma chave primária, automaticamente todos os atributos dependem da chave em sua totalidade. Na tabela Mercador, o atributo localização depende diretamente do id-mercador, atendendo ao critério da 3ª Forma Normal.

A tabela Mercador, com atributos atômicos e monovalorados, não apresenta tais dependências, satisfazendo assim a 4ª Forma Normal.


Tabela Loja

id-loja ➡ id_mercador, id_instâncias_itens

Na tabela Loja, os atributos id-loja, id_mercador e id_instâncias_itens atendem a esse critério, garantindo que ela esteja na 1ª Forma Normal. Como a tabela Loja possui apenas uma chave primária, automaticamente todos os atributos dependem da chave em sua totalidade. Na tabela Loja, todos os atributos (id_mercador, id_instâncias_itens) dependem diretamente do id-loja, atendendo ao critério da 3ª Forma Normal.

A tabela Loja, com atributos atômicos e monovalorados, não apresenta tais dependências, satisfazendo assim a 4ª Forma Normal.


Tabela Missão

id-missao ➡ nome, qtd_xp, descr

Na tabela Missão, os atributos id-missao, nome, qtd_xp e descricao atendem a esse critério, garantindo que ela esteja na 1ª Forma Normal. Como a tabela Missão possui apenas uma chave primária, automaticamente todos os atributos dependem da chave em sua totalidade. Na tabela Missão, os atributos (nome, qtd_xp, descricao) dependem diretamente do id-missao, atendendo ao critério da 3ª Forma Normal.

A tabela Missão, com atributos atômicos e monovalorados, não apresenta tais dependências, satisfazendo assim a 4ª Forma Normal.


Tabela Contrato

id-contrato ➡ id-contratante, id-dependencia

Na tabela Contrato, os atributos id-contrato, id-contratante e id-dependencia atendem a esse critério, garantindo que ela esteja na 1ª Forma Normal. Como a tabela Contrato possui apenas uma chave primária, automaticamente todos os atributos dependem da chave em sua totalidade. Na tabela Contrato, os atributos (id-contratante, id-dependencia) dependem diretamente do id-contrato, atendendo ao critério da 3ª Forma Normal.

A tabela Contrato, com atributos atômicos e monovalorados, não apresenta tais dependências, satisfazendo assim a 4ª Forma Normal.


Tabela Missão Principal

id-principal ➡ id-dependencia

Na tabela Missão Principal, os atributos id-principal e id-dependencia atendem a esse critério, garantindo que ela esteja na 1ª Forma Normal. Como a tabela Missão Principal possui apenas uma chave primária, automaticamente todos os atributos dependem da chave em sua totalidade. Na tabela Missão Principal, o atributo id-dependencia depende diretamente do id-principal, atendendo ao critério da 3ª Forma Normal.

A tabela Missão Principal, com atributos atômicos e monovalorados, não apresenta tais dependências, satisfazendo assim a 4ª Forma Normal.


Tabela Missões Realizadas

id_missao, id_pc ➡ (nenhum outro atributo)

Na tabela Missões Realizadas, os atributos id_missao e id_pc formam a chave primária composta, garantindo que ela esteja na 1ª Forma Normal, pois todos os atributos são atômicos e monovalorados.
Como não há outros atributos além da chave composta, todos os atributos dependem automaticamente da totalidade da chave primária, atendendo ao critério da 2ª Forma Normal. Na tabela Missões Realizadas, não existem atributos que possam depender transitivamente da chave primária composta, atendendo também à 3ª Forma Normal.

A tabela Missões Realizadas, com atributos atômicos e sem dependências multivaloradas, satisfaz a 4ª Forma Normal.


id-dialogo ➡ id-personagem, texto

Na tabela Diálogo, os atributos id-dialogo, id-personagem e texto atendem a esse critério, garantindo que ela esteja na 1ª Forma Normal. Como a tabela Diálogo possui apenas uma chave primária, automaticamente todos os atributos dependem da chave em sua totalidade. Na tabela Diálogo, os atributos (id-personagem, texto) dependem diretamente do id-dialogo, atendendo ao critério da 3ª Forma Normal.

A tabela Diálogo, com atributos atômicos e monovalorados, não apresenta tais dependências, satisfazendo assim a 4ª Forma Normal.

Histórico de Versão

Versão Data Descrição Autor(es)
1.0 13/12/2024 Primeira versão da Normalização Márcio Henrique
1.1 13/12/2024 Normalização das tabelas (Mundo, Checkpoint, Sala, Bau, Baus, Chefe) Márcio Henrique
1.2 20/12/2024 Normalização das tabelas (PC, Transação, Combate, Inventário, Instância Item, Item) Diego Carlito
1.3 21/12/2024 Normalização das tabelas (instanciaInimigo, inimigo, regiao, habilidade, grimorio, consumivel, arma, chave) Filipe Carvalho
1.4 22/12/2024 Normalização das tabelas (Efeito, Personagem, NPC, Contratante, Mercador, Loja) Diego Carlito
1.5 22/12/2024 Normalização das tabelas (Missão, Contrato, Missão Principal, Missões Realizadas, Diálogo) Diego Carlito