Skip to main content

Come convertire un database in Third Normal Form (3NF)

Corso Progettazione DB ITA 17: normalizzazione di uno schema relazionale, prima forma normale (Potrebbe 2024)

Corso Progettazione DB ITA 17: normalizzazione di uno schema relazionale, prima forma normale (Potrebbe 2024)
Anonim

Third normal form (3NF) è un principio di database che supporta l'integrità dei dati basandosi sui principi di normalizzazione del database forniti da First Normal Form (1NF) e Second Normal Form (2NF).

Terza Normale Requisiti Formali

Esistono due requisiti di base per un database in terza forma normale:

  • Il database deve già soddisfare i requisiti di 1NF e 2NF.
  • Tutte le colonne del database devono dipendere dalla chiave primaria, il che significa che il valore di qualsiasi colonna può essere derivato solo dalla chiave primaria.

Informazioni sulla dipendenza dalla chiave primaria

Esploriamo ulteriormente cosa intendiamo per il fatto che tutte le colonne devono dipendere dalla chiave primaria.

Se il valore di una colonna può essere derivato sia dalla chiave primaria che da un'altra colonna nella tabella, viola 3NF. Considera una tabella Impiegati con queste colonne:

  • Numero Identità dell'impiegato
  • Nome di battesimo
  • Cognome

Sia LastName che FirstName dipendono solo dal valore di EmployeeID? Bene, LastName potrebbe dipendere da FirstName? No, perché nulla di inerente a LastName suggerisce il valore di FirstName. Potrebbe FirstName dipendere da LastName? No, ancora una volta, perché lo stesso è vero: qualunque cosa un LastName potrebbe essere, non potrebbe fornire un suggerimento sul valore di FirstName. Pertanto, questa tabella è conforme a 3NF.

Ma considera questa tabella dei veicoli:

  • VehicleID
  • fabbricante
  • Modello

Il Produttore e il Modello potrebbero derivare dal VehicleID - ma il Modello potrebbe anche derivare dal Costruttore perché un modello di veicolo è realizzato solo da un particolare produttore. Questo modello di tabella non è conforme a 3NF e potrebbe pertanto causare anomalie nei dati. Ad esempio, è possibile aggiornare il produttore senza aggiornare il modello, introducendo inesattezze.

Per renderlo conforme, avremmo bisogno di spostare la colonna dipendente supplementare su un'altra tabella e farne riferimento usando una chiave esterna. Ciò comporterebbe due tabelle:

Tabella dei veicoli

Nella tabella seguente, ModelID è una chiave esterna per Modelli tavolo:

  • VehicleID
  • fabbricante
  • ModelID

Tabella dei modelli

Questa nuova tabella mappa i modelli per i produttori. Se desideri aggiornare le informazioni sul veicolo specifiche di un modello, lo farai in questa tabella, piuttosto che nella tabella Veicoli.

  • ModelID
  • fabbricante
  • Modello

Campi derivati ​​nel modello 3NF

Una tabella potrebbe contenere un campo derivato, uno calcolato in base ad altre colonne nella tabella. Ad esempio, considera questa tabella di ordini di widget:

  • Numero d'ordine
  • Numero cliente
  • Prezzo unitario
  • Quantità
  • Totale

Il totale interrompe la conformità 3NF perché può essere derivato moltiplicando il prezzo unitario per la quantità, anziché essere completamente dipendente dalla chiave primaria. Dobbiamo rimuoverlo dal tavolo per rispettare la terza forma normale.

Infatti, poiché è derivato, è meglio non memorizzarlo nel database.

Possiamo semplicemente calcolarlo "al volo" quando eseguiamo query di database. Ad esempio, potremmo aver precedentemente utilizzato questa query per recuperare numeri e totali dell'ordine:

SELECT OrderNumber, Total FROM WidgetOrders

Ora possiamo usare la seguente query:

SELECT OrderNumber, UnitPrice * Quantity AS Total FROM WidgetOrders

per ottenere gli stessi risultati senza violare le regole di normalizzazione.