Database - Terza forma normale (3NF)

Una tabella è in una terza forma normale quando sono soddisfatte le seguenti condizioni:

  • È nella seconda forma normale.
  • Tutti i campi non primari dipendono dalla chiave primaria.

La dipendenza di questi campi non primari è tra i dati. Ad esempio, nella tabella seguente, il nome della via, la città e lo stato sono indissolubilmente legati al loro codice postale.

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 dipendenza tra il codice postale e l'indirizzo viene chiamata come dipendenza transitiva. Per ottemperare alla terza forma normale, tutto ciò che devi fare è spostare i campi Via, Città e Stato nella loro tabella, che puoi chiamare tabella CAP. -

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

Il passaggio successivo consiste nel modificare la tabella CLIENTI come mostrato di seguito:

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

I vantaggi della rimozione delle dipendenze transitive sono principalmente duplici. Innanzitutto, la quantità di duplicazione dei dati viene ridotta e quindi il database diventa più piccolo.

Il secondo vantaggio è l'integrità dei dati. Quando i dati duplicati cambiano, c'è un grosso rischio di aggiornare solo alcuni dei dati, soprattutto se sono distribuiti in molti punti diversi del database.

Ad esempio, se l'indirizzo e i dati del codice postale fossero archiviati in tre o quattro tabelle diverse, qualsiasi modifica nei codici postali dovrebbe essere estesa a tutti i record in quelle tre o quattro tabelle.

sql-rdbms-concepts.htm