Preliminare
La definizione di forma normale (che dalla presentazione di "Ulteriore normalizzazione del modello relazionale di base di dati" nel 1971 è nota come prima forma normale ) e la definizione del paradigma relazionale stesso è stata pubblicata nel 1970 nell'articolo scientifico che ha fornito un forte fondamento per la pratica dell'amministrazione di database, vale a dire "Un modello relazionale di dati per grandi banche dati condivise" (RM per brevità) creato dal Dr. EF Codd , che è un destinatario Turing Award e l' autorità per quanto riguarda il quadro relazionale.
Sì, ci sono molte spiegazioni, interpretazioni, esposizioni, deviazioni e opinioni sul testo del Dr. Codd, ma personalmente preferisco attenermi alla fonte originale e suggerisco caldamente di analizzarlo da solo in modo da poter trarre le tue conclusioni.
Certamente non capisco la RM nella sua interezza, ma ciò che capisco mi permette di apprezzarne l'eccellenza, la visione, l'intenzione e la portata, e sebbene decenni dopo si possa notare che ha alcune lievi imprecisioni, non si riducono, in ogni modo, il suo genio ed eleganza. Nel suo campo, l'RM ha superato la prova del tempo in un modo unico e non ha eguali.
L'atto di enfatizzare le suddette imprecisioni sarebbe — usare un termine caritatevole — ingiusto perché, visto da una distanza considerevole, questo materiale fondamentale ha richiesto alcuni perfezionamenti ed estensioni, sì, ma il corpo principale dell'opera era solido come la roccia dal stessa concezione (e, in effetti, il Dott. Codd ha fatto la maggior parte, se non tutte, di tali perfezionamenti ed estensioni).
Continuo a rileggere costantemente il RM al fine di rafforzare la mia comprensione di questa eccezionale fonte di conoscenza (e la mia stima di essa continua a crescere su ogni rilettura); l'obiettivo è stare sulle spalle dei giganti.
Relazioni e tabelle
È importante notare che poiché le relazioni sono risorse astratte , il Dr. Codd ha immaginato l'utilità di rappresentarle in forma tabellare (inizialmente ha usato il termine "rappresentazione di array" ma successivamente ha usato "table" o "r-table"), in modo che gli utenti, i progettisti e gli amministratori di un database relazionale (RDB) possono affrontarli in un modo più familiare o concreto . Pertanto, nel contesto di un'implementazione di RDB, è valido utilizzare la tabella come scorciatoia per la relazione, purché detta tabella rappresenti una relazione effettiva. Questa caratteristica è - anche se ovvia - abbastanza significativa perché prima di valutare se una tabella rappresenti o meno una relazione conforme alla prima forma normale (1NF), deve rappresentare, precisamente, una relazione.
L'RM contiene naturalmente le qualità che una tabella deve avere per determinare se in realtà ritrae una relazione, ma offrirò qui un'interpretazione informale e senza pretese (un'altra, sì!):
- Deve avere un nome (ogni relazione particolare in una struttura di database deve essere distinta dal resto).
- Ciascuna delle sue righe deve rappresentare esattamente una tupla della relazione pertinente.
- L' ordine delle sue righe non è affatto importante.
- Ciascuna delle sue colonne deve avere un nome che rappresenti esattamente il significato di un solo dominio della relazione in questione e tale nome deve essere diverso dai nomi delle altre colonne della tabella (una colonna deve essere differenziata in modo univoco e deve contenere un significato distintivo e, sì, il ruolo svolto da un modellatore di database e dagli esperti di business per definire con precisione ogni dominio significativo è fondamentale)
- L' ordine delle sue colonne non ha significato.
- Tutte le sue righe devono avere lo stesso numero di colonne.
- Deve avere almeno una colonna o una combinazione di colonne che identifichi in modo univoco ognuna delle tuple rappresentate tramite le righe; in questo modo, tutte le righe devono essere diverse (sì, questo sottolinea l'importanza di avere almeno un KEY dichiarato, e quando ci sono due o più KEY uno dovrebbe essere definito come PRIMARIO in base a ragioni pragmatiche, mentre il resto può essere considerato ALTERNATIVO, ma sì, prima di prendere la decisione, ciascuna delle CHIAVI era un "candidato" per una definizione come PRIMARIA).
Avere una tabella che in realtà rappresenta una relazione è fondamentale poiché, quando subisce operazioni di manipolazione di tipo relazionale, il risultato è, di nuovo, una tabella che rappresenta una relazione. In questo modo, il comportamento di detta tabella è prevedibile .
Domini atomici (colonne)
Nelle prime sezioni della RM, il Dr. Codd presenta diversi esempi di relazioni al fine di introdurre alcuni concetti; quindi, al fine di comprendere il significato del dominio atomico , iniziamo con il seguente estratto dall'RM che dettaglia alcuni punti pertinenti:
Finora abbiamo discusso esempi di relazioni che sono definite su domini semplici, domini i cui elementi sono valori atomici (non componibili). I valori non anatomici possono essere discussi nel quadro relazionale. Pertanto, alcuni domini possono avere relazioni come elementi. Queste relazioni possono a loro volta essere definite su domini non semplici e così via.
In questo modo, si può dire che ciascuna delle relazioni espositive sopra menzionate si adatta in uno dei due tipi, ad esempio tipo A o tipo B :
Tipo A raggruppa solo relazioni (tabelle) che sono strutturate con domini (colonne) che contengono valori esclusivamente semplici in ciascuna delle loro tuple (righe), vale a dire che tali domini (colonne) non contengono relazioni (tabelle) come valori, che in questo contesto significa che i valori sono atomici perché non possono essere scomposti successivamente in nuove relazioni (tabelle). Quindi, le relazioni di questa classe sono quelle che sono normalizzate , cioè sono conformi a 1NF, la loro forma è desiderabile.
Il tipo B è integrato esclusivamente da relazioni (tabelle) che hanno uno o più domini (colonne) che mantengono le relazioni come valori in ciascuna rispettiva tupla (riga) e ciò significa che tali valori sono non anatomici poiché possono essere successivamente suddivisi in nuove relazioni (tabelle), cioè sono scomponibili . Pertanto, le relazioni di questo tipo sono non normalizzate, cioè violano 1NF, sono in una forma indesiderabile.
Normalizzazione
Il Dr. Codd introduce la sezione sulla normalizzazione in RM con il seguente paragrafo:
Una relazione i cui domini sono tutti semplici può essere rappresentata in memoria da una matrice bidimensionale omogenea di colonne del tipo sopra discusso. È necessaria una struttura di dati più complicata per una relazione con uno o più domini non semplici. Per questo motivo (e altri che verranno citati di seguito), vale la pena indagare sulla possibilità di eliminare domini non semplici! Esiste, infatti, una procedura di eliminazione molto semplice, che chiameremo normalizzazione.
Quindi continua a mostrare:
Un gruppo di relazioni in cui si è non normalizzati (ha domini che contengono relazioni come valori, cioè non sono anatomici; cioè non sono semplici)
Un gruppo di relazioni che sono normalizzate (cioè, che è stato decomposto; cioè, uno i cui domini valutati in relazione sono stati suddivisi in domini semplici che significa che sono atomici)
E poi descrive la procedura per ottenere relazioni normalizzate da quelle non normalizzate.
A questo proposito, le relazioni che ha impiegato per illustrare un esercizio di normalizzazione e la descrizione dell'esercizio stesso sono abbastanza chiare, e raccomando di nuovo di analizzarli da soli (e spero anche che ciò incoraggi alcuni lettori a impegnarsi con il testo).
In modo positivo, indica:
Sono possibili ulteriori operazioni di tipo normalizzante. Questi non sono discussi in questo documento.
E dette operazioni, vale a dire la seconda e la terza forma normale (2NF e 3NF) sono in realtà dettagliate in "Ulteriore normalizzazione del modello relazionale di base di dati", e come menzionato sopra, dopo la presentazione (e la successiva stampa e pubblicazione) di questo documento , la forma normale originale divenne nota come prima forma normale.
Come può osservare un professionista, avere relazioni (tabelle) non normalizzate introduce una convoluzione (quasi sempre non necessaria) nelle implementazioni di RDB.
Una relazione che soddisfa 1NF, facilita la definizione di vincoli e operazioni di manipolazione dei dati che possono essere implementate mediante una sublanguage di dati che è meno complessa di quella richiesta per relazioni (tabelle) non normalizzate, come sottolinea il Dr. Codd nelle seguenti righe:
L'adozione di un modello relazionale di dati, come descritto sopra, consente lo sviluppo di una sublanguage di dati universale basata su un calcolo del predicato applicato. Un calcolo del predicato del primo ordine è sufficiente se la raccolta di relazioni è in forma normale. Tale linguaggio fornirebbe un metro di potere linguistico per tutte le altre lingue di dati proposte e sarebbe esso stesso un candidato valido per essere incorporato (con opportune modifiche sintattiche) in una varietà di lingue host (programmazione, orientata ai comandi o ai problemi). [...]
[...]
L'universalità del linguaggio secondario dei dati risiede nella sua capacità descrittiva (non nella sua capacità di calcolo).
Lo stupore
Dal mio punto di vista, lo stupore è sorto, a causa (a) del suddetto eccesso di interpretazioni, spiegazioni, ecc., Su 1NF e lo stesso RM, e a causa di (b) ulteriori tentativi di ridefinire 1NF che affermano che avere relazioni con domini che contengono valori che sono, a loro volta, relazioni conformi a 1NF purché costituiscano un singolo valore per ciascuna tupla corrispondente.
La mia opinione sui tuoi altri punti
Non ci dovrebbe essere alcuna relazione tra le righe, a parte il fatto che sono conformi alle stesse intestazioni.
Non sono sicuro di comprendere correttamente l'intenzione di tale affermazione ma, a parte la conformità alle stesse intestazioni, deve esserci una connessione tra le (tuple) righe di una relazione (tabella) in quanto ciascuna di esse dovrebbe essere un'asserzione su un particolare occorrenza del tipo di entità specifica (definita in termini di contesto aziendale di interesse) che la relazione (tabella) dovrebbe rappresentare.
Non dovrebbe esserci alcuna relazione tra le colonne, ma credo che sia l'oggetto di forme normali superiori.
Non so nemmeno se sto interpretando correttamente il significato di quell'affermazione ma, in effetti, e in conformità con la mia risposta all'aspetto precedente, deve esserci anche una relazione tra i domini (colonne) di una relazione (tabella) , che è precisamente il motivo per cui è una relazione (la struttura essenziale del modello relazionale e di un'implementazione concreta di RDB).
Per esemplificare, per quanto riguarda la relazione ipotetica (tabella)
Salary (PersonNumber, EffectiveDate, Amount)
la tupla (fila)
trasmetterebbe il significato
The Salary payed to the Person identified by PersonNumber x, on EffectiveDate y corresponds to the Amount of z
Pertanto, ogni tupla (riga) della Salary
relazione (tabella) deve adattarsi alla struttura dell'asserzione mostrata sopra e la differenza sarebbe la sostituzione dei valori di dominio (colonna) pertinenti, ma deve esistere una relazione tra (a) tutti i Salary
domini (colonne) e anche tra (b) tutti i loro valori corrispondenti rispetto a ciascuna tupla (riga); tale relazione è indispensabile.
Le forme normali più alte (2NF e 3NF) sono utili per sbarazzarsi delle dipendenze funzionali tra domini (colonne) di una relazione (tabella), aiutano a evitare connessioni indesiderate tra domini (colonne), poiché tali connessioni indesiderate consentono l'introduzione di anomalie di aggiornamento . Sia 2NF che 3NF sono utili per testare la solidità della struttura delle relazioni (tabelle) in una certa implementazione di RDB.