Skip to main content

Mettere un database in prima forma normale

Corso Progettazione DB ITA 18: 2a e 3a forma normale. Fine della playlist (almeno per ora) (Potrebbe 2024)

Corso Progettazione DB ITA 18: 2a e 3a forma normale. Fine della playlist (almeno per ora) (Potrebbe 2024)
Anonim

First Normal Form (1NF) imposta le regole di base per un database organizzato:

  • Elimina le colonne duplicative dalla stessa tabella.
  • Crea tabelle separate per ogni gruppo di dati correlati e identifica ogni riga con una colonna univoca (la chiave primaria).

Cosa significano queste regole quando si studia la progettazione pratica di un database? In realtà è abbastanza semplice.

Elimina la duplicazione

La prima regola impone di non duplicare i dati all'interno della stessa riga di una tabella. All'interno della comunità del database, questo concetto è indicato come l'atomicità di una tabella. Le tabelle conformi a questa regola sono dette atomiche. Esploriamo questo principio con un esempio classico: una tabella all'interno di un database di risorse umane che memorizza la relazione subordinato al gestore. Ai fini del nostro esempio, imporremo la regola aziendale che ogni gestore può avere uno o più subordinati mentre ciascun subordinato può avere un solo manager.

Intuitivamente, quando creiamo un elenco o un foglio di lavoro per tenere traccia di queste informazioni, potremmo creare una tabella con i seguenti campi:

  • Manager
  • Subordinate1
  • Subordinate2
  • Subordinate3
  • Subordinate4

Tuttavia, ricorda la prima regola imposta da 1NF: Elimina le colonne duplicative dalla stessa tabella. Chiaramente, le colonne Subordinate1-Subordinate4 sono duplicative. Prenditi un momento e medita sui problemi sollevati da questo scenario. Se un manager ha solo un subordinato, le colonne Subordinate2-Subordinate4 sono semplicemente spazio di archiviazione sprecato (una preziosa risorsa di database). Inoltre, immagina il caso in cui un manager ha già 4 subordinati - cosa succede se assume un altro dipendente? L'intera struttura della tabella richiederebbe una modifica.

A questo punto, una seconda idea brillante di solito si verifica per i principianti del database: non vogliamo avere più di una colonna e vogliamo consentire una quantità flessibile di archiviazione dei dati. Proviamo qualcosa come questo:

  • Manager
  • subalterni

E il campo Subordinates conterrà più voci nel formato "Mary, Bill, Joe".

Questa soluzione è più vicina, ma manca anche il marchio. La colonna subordinata è ancora duplica e non atomica. Cosa succede quando dobbiamo aggiungere o rimuovere un subordinato? Abbiamo bisogno di leggere e scrivere l'intero contenuto del tavolo. Non è un grosso problema in questa situazione, ma cosa succederebbe se un manager avesse cento dipendenti? Inoltre, complica il processo di selezione dei dati dal database nelle query future.

Ecco una tabella che soddisfa la prima regola di 1NF:

  • Manager
  • Subordinare

In questo caso, ogni subordinato ha una singola voce, ma i manager possono avere più voci.

Identifica la chiave primaria

Ora, per quanto riguarda la seconda regola: identificare ogni riga con una colonna o un gruppo di colonne univoci (la chiave primaria). Puoi dare un'occhiata alla tabella sopra e suggerire l'uso della colonna subordinata come chiave primaria. In effetti, la colonna subordinata è un buon candidato per una chiave primaria a causa del fatto che le nostre regole aziendali hanno specificato che ogni subordinato può avere un solo manager. Tuttavia, i dati che abbiamo scelto di memorizzare nella nostra tabella rendono questa soluzione tutt'altro che ideale. Cosa succede se assumiamo un altro dipendente di nome Jim? Come archiviamo la sua relazione subordinato-manager nel database?

È preferibile utilizzare un identificatore univoco (come un ID dipendente) come chiave primaria. Il nostro tavolo finale sarebbe simile a questo:

  • ID responsabile
  • ID subordinato

Ora, il nostro tavolo è nella prima forma normale! Oltre a questo, ci sono opzioni per mettere il tuo database in Second Normal Form così come Third Normal Form se sei eccitato per ancora più organizzazione.