Base de datos - Tercera forma normal (3NF)

Una tabla está en una tercera forma normal cuando se cumplen las siguientes condiciones:

  • Está en segunda forma normal.
  • Todos los campos no primarios dependen de la clave primaria.

La dependencia de estos campos no primarios está entre los datos. Por ejemplo, en la siguiente tabla, el nombre de la calle, la ciudad y el estado están indisolublemente ligados a su 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)
);

La dependencia entre el código postal y la dirección se denomina dependencia transitiva. Para cumplir con el tercer formulario normal, todo lo que necesita hacer es mover los campos Calle, Ciudad y Estado a su propia tabla, que puede llamar la tabla Código postal. -

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

El siguiente paso es modificar la tabla de CLIENTES como se muestra a continuación:

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)
);

Las ventajas de eliminar las dependencias transitivas son principalmente dobles. Primero, la cantidad de datos duplicados se reduce y, por lo tanto, su base de datos se vuelve más pequeña.

La segunda ventaja es la integridad de los datos. Cuando los datos duplicados cambian, existe un gran riesgo de actualizar solo algunos de los datos, especialmente si están distribuidos en muchos lugares diferentes de la base de datos.

Por ejemplo, si la dirección y los datos del código postal se almacenan en tres o cuatro tablas diferentes, entonces cualquier cambio en los códigos postales tendría que extenderse a todos los registros de esas tres o cuatro tablas.

sql-rdbms-conceptos.htm