Banco de dados - Terceira forma normal (3NF)

Uma tabela está em uma terceira forma normal quando as seguintes condições são atendidas -

  • Está na segunda forma normal.
  • Todos os campos não primários dependem da chave primária.

A dependência desses campos não primários é entre os dados. Por exemplo, na tabela a seguir - o nome da rua, a cidade e o estado são indissociáveis ​​ao seu código postal.

CREATE TABLE CUSTOMERS(
   CUST_ID       INT              NOT NULL,
   CUST_NAME     VARCHAR (20)      NOT NULL,
   DOB           DATE,
   STREET        VARCHAR(200),
   CITY          VARCHAR(100),
   STATE         VARCHAR(100),
   ZIP           VARCHAR(12),
   EMAIL_ID      VARCHAR(256),
   PRIMARY KEY (CUST_ID)
);

A dependência entre o código postal e o endereço é chamada de dependência transitiva. Para cumprir o terceiro formulário normal, tudo o que você precisa fazer é mover os campos Rua, Cidade e Estado para sua própria tabela, que você pode chamar de tabela de CEP. -

CREATE TABLE ADDRESS(
   ZIP           VARCHAR(12),
   STREET        VARCHAR(200),
   CITY          VARCHAR(100),
   STATE         VARCHAR(100),
   PRIMARY KEY (ZIP)
);

A próxima etapa é alterar a tabela de CLIENTES conforme mostrado abaixo -

CREATE TABLE CUSTOMERS(
   CUST_ID       INT              NOT NULL,
   CUST_NAME     VARCHAR (20)      NOT NULL,
   DOB           DATE,
   ZIP           VARCHAR(12),
   EMAIL_ID      VARCHAR(256),
   PRIMARY KEY (CUST_ID)
);

As vantagens de remover dependências transitivas são principalmente duplas. Primeiro, a quantidade de duplicação de dados é reduzida e, portanto, seu banco de dados fica menor.

A segunda vantagem é a integridade dos dados. Quando os dados duplicados são alterados, há um grande risco de atualizar apenas alguns dos dados, especialmente se estiverem espalhados em muitos lugares diferentes no banco de dados.

Por exemplo, se o endereço e os dados do CEP foram armazenados em três ou quatro tabelas diferentes, quaisquer alterações nos CEPs precisariam ser aplicadas em todos os registros dessas três ou quatro tabelas.

sql-rdbms-concepts.htm