Normalizzazione: cosa significa “gruppi ripetitivi”?

Ho letto diversi tutorial e ho visto diversi esempi di normalizzazione, specialmente la nozione di “gruppi ripetuti” nella prima forma normale. Da loro ho capito che i gruppi ripetuti sono attributi “a più valori” (ad es. Qui e qui ).

Ma facciamo già tabelle separate per ogni attributo multivalore includendo chiavi esterne dalla tabella padre durante il processo di mapping di un ERM (modello di relazione di quadro) a un RDM (modello di dati relazionali)? Riferimento: questo

In secondo luogo, sono quei “gruppi ripetuti” essenzialmente disposti orizzontalmente nella stessa riga, oppure può lo stesso valore verificarsi nella stessa colonna ancora e ancora, vale a dire lo stesso valore di un attributo ancora e ancora, anche un gruppo ripetuto e deve essere eliminato ?

inserisci la descrizione dell'immagine qui In questo esempio, il valore inglese si ripete ancora e ancora. È un gruppo ripetitivo? Se lo elimini per creare un’altra tabella SUBJECT con Subject Name e Module_ID (Foreign key), questo è ciò che ottengo. Certo, si sbarazza del valore ripetuto, ma non sono sicuro che questa sia la cosa giusta. È giusto? inserisci la descrizione dell'immagine qui

Il termine “gruppo ripetuto” in origine significava il concetto in linguaggi basati su CODASYL e COBOL in cui un singolo campo poteva contenere una matrice di valori ripetuti. Quando EFCodd descrisse la sua Prima Forma Normale era ciò che intendeva per gruppo ripetuto. Il concetto non esiste in nessun moderno DBMS relazionale o basato su SQL.

Anche il termine “gruppo ripetuto” è stato utilizzato in modo informale e impreciso dai progettisti di database per indicare un insieme ripetuto di colonne , ovvero una raccolta di colonne contenenti tipi simili di valori in una tabella. Questo è diverso dal suo significato originale in relazione a 1NF. Ad esempio, nel caso di una tabella denominata Famiglie con colonne denominate Parent1, Parent2, Child1, Child2, Child3, … ecc. La raccolta di colonne Child N viene a volte indicata come gruppo ripetuto e si presume che sia in violazione di 1NF anche sebbene non sia un gruppo ripetitivo nel senso che Codd intendeva.

Quest’ultimo senso di un cosiddetto gruppo ripetuto non è tecnicamente una violazione di 1NF se ogni attributo è solo a valore singolo. Gli attributi stessi non contengono valori ripetuti e pertanto non vi è alcuna violazione di 1NF per tale motivo. Tale design è spesso considerato un anti-pattern, tuttavia perché limita la tabella a un numero prefissato di valori fissi (massimo N bambini in una famiglia) e perché impone query e altre logiche di business da ripetere per ciascuna delle colonne. In altre parole viola il principio ” SECCO ” del design. Poiché generalmente è considerato di scarsa progettazione, è adatto ai progettisti di database e talvolta anche agli insegnanti per fare riferimento a ripetute colonne di questo tipo come “gruppo ripetitivo” e violazione dello spirito della prima forma normale.

Questo uso informale della terminologia è un po ‘sfortunato perché può essere un po’ arbitrario e confuso (quando una serie di colonne costituisce effettivamente una ripetizione?) E anche perché è una distrazione da una questione più fondamentale, vale a dire il problema Null. Tutte le forms normali riguardano le relazioni che non consentono la possibilità di null. Se una tabella consente un nullo in qualsiasi colonna, allora non soddisfa i requisiti di uno schema di relazione che soddisfa 1NF. Nel caso della nostra tabella Famiglie, se le colonne Figlio consentono valori nulli (per rappresentare famiglie con meno di N figli), la tabella Famiglie non soddisfa 1NF. La possibilità di valori nulli viene spesso dimenticata o ignorata negli esercizi di normalizzazione, ma l’evitamento di colonne nullable non necessarie è un ottimo motivo per evitare di ripetere serie di colonne, indipendentemente dal fatto che vengano definite “gruppi ripetuti”.

Vedi anche questo articolo .

il valore inglese si ripete ancora e ancora. È un gruppo ripetitivo?

No. Le molteplici apparizioni dell’inglese in SUBJECT_MODULE non sono un gruppo ripetuto o nemmeno una delle due cose che le persone erroneamente intendono per gruppo ripetuto. Non sono inoltre prove di ridondanza o mancanza di normalizzazione. Tali apparizioni multiple potrebbero essere collegate a ridondanza o normalizzazione, ma compaiono tutto il tempo in cui non vi è ridondanza e vari livelli di normalizzazione.

Se SUBJECT_MODULE è le righe in cui “[SUBJECT_NAME] ha [MODULE_NAME] identificato da [MODULE_ID]” e un sobject potrebbe avere più di un modulo, in qualche luogo devi avere più menzioni di quell’object (forse tramite il suo nome) con menzioni di moduli diversi ( forse per nome o id). Ciò non implicherebbe ridondanza.

Student Age Subject Adam 15 Biology Adam 15 Maths Alex 14 Maths Stuart 17 Maths 

La ridondanza in questo esempio dal secondo link ” questo ” della tua domanda non è che Adam appare in due righe o che Adamo appare con 15 in due righe. È che se la tabella è una riga dove “[Studente] ha [Età] anni e prende [Sobject]”, allora Studente (ad es. Adamo) può apparire in più righe ma appare sempre con la stessa Età (es. 15). Ma se il tavolo fosse costituito da righe in cui “[Studente] ha un amico [Età] anni in [Sobject]”, la tabella potrebbe essere già completamente normalizzata.

Certo, si sbarazza del valore ripetuto, ma non sono sicuro che questa sia la cosa giusta.

Lo fa per i dati di esempio, ma potrebbe non per altri dati di esempio. Non ci hai detto abbastanza. (Ad ogni modo, come ho detto sopra, le apparizioni multiple potrebbero non aver nemmeno bisogno di essere normalizzate).

Se ci sono ridondanze rilevanti per la normalizzazione in SUBJECT_MODULE o anche se ci sono delle scomposizioni valide, inclusa quella che hai dato, dipende dalle solite informazioni necessarie per normalizzare a 1NF sopra. Vale a dire se alcune delle sue colonne sono funzioni di altre (dipendenze funzionali) e se le sue righe sono anche quelle in cui “…” E “…” (dipendenze join).

Dando una ansible scomposizione hai detto che sono anche le righe in cui “… [Subject_Name] … [Module_ID] …” AND “… [Module_Name] … [Module_ID] …” E hai dato qualche esempio di dati di decomposizione. Ma sappiamo solo che potrebbe essere così decomposto perché hai aggiunto la decomposizione. E la decomposizione più i dati non è ancora sufficiente per sapere se dovrebbe essere così decomposto.

Ho letto diversi tutorial e ho visto diversi esempi di normalizzazione, specialmente la nozione di “gruppi ripetuti” nella prima forma normale.

I “gruppi ripetuti” sono qualcosa che proviene da database pre-relazionali e non possono apparire in una tabella relazionale (relazione). Sono come un insieme di valori denominato che è come un campo di un record ma non è abbastanza. Una tabella relazionale è sempre in 1NF. Ogni colonna di una riga ha un singolo valore del tipo della colonna. Un database non relazionale è “normalizzato” alle tabelle, ad esempio 1NF (primo senso di “normalizzato”) che elimina i gruppi ripetuti. Quindi quelle tabelle / relazioni sono “normalizzate” a forms normali più alte (secondo senso di “normalizzato”).

Una tabella relazionale con più colonne simili o con un tipo di colonna con più parti simili ricordano ciascuna di avere un gruppo ripetuto in un database non relazionale. E le molteplici colonne e parti dovrebbero diventare più righe in una tabella separata, proprio come i membri multipli di un gruppo ripetuto. Ma questi problemi hanno a che fare con la qualità relazionale del design , non la ripetizione di gruppi o la normalizzazione (in entrambi i sensi) o l’essere relazionale (cioè essere in 1NF).

Si noti che un database non relazionale potrebbe avere problemi simili con più campi simili e / o insiemi denominati o con più parti simili di valori di campi. La normalizzazione ai tavoli non si libera di questi quando si sbarazza di gruppi ripetuti.

Indipendentemente da come sono entrati in un progetto relazionale, rimuoverli dà un design “migliore”. È solo perché questi problemi di progettazione ricordano i gruppi ripetuti che le persone si confondono e immaginano che in qualche modo una tabella possa contenere un gruppo ripetitivo. Pertanto, più colonne e valori simili con più parti simili (o le parti) vengono erroneamente chiamati “gruppi ripetuti”.

Vedi questa risposta per “atomicità” .