Domanda

Supponiamo di avere due tabelle in un database, T 10 e T 11 , con 10 e 11 colonne, rispettivamente, dove 10 delle colonne sono esattamente gli stessi su entrambe le cose.

Cosa (se presente) regola di normalizzazione sto violando?

È stato utile?

Soluzione

Modifica: Sono stato informato che nessun forme normali vengono violati qui in teoria. Dal momento che questa è stata la risposta accettata, me ne vado qui per riferimento, e perché il pensiero su 3NF possono in pratica aiuto situazioni evitare come che nella questione.

Si stanno violando il terza forma normale (3NF) , perché se in gran parte gli stessi dati si tiene in entrambe le tabelle, allora ogni attributo di ogni tabella non è direttamente dipendente dalla chiave della rispettiva tabella.

Altri suggerimenti

Che ci crediate o no, duplicando le colonne attraverso tabelle viola alcuna forma normale teorica in sé e per sé. Fatta eccezione per dominio / chiave forma normale (DKNF), forme normali sono definiti in termini di singole tabelle, non è più,. DKNF è definito in termini di vincoli, di cui ci sono nessuno nel caso generale. Quindi, se c'è una violazione di una forma normale:

  • deve essere specifico per uno dei tavoli ed esiste indipendentemente avente entrambe le tabelle (cioè la tabella sarebbe ancora violare la forma normale, anche se ha rimosso l'altro tavolo), o
  • il rapporto ha un vincolo che viola DKNF, il che significa che non è un esempio del caso generale indicata nella questione ma un caso specifico più. Non sono le colonne duplicati che creano la violazione, ma invece il vincolo aggiuntivo sulla colonna in più.

Si consideri la forme normali , utilizzando le definizioni brevi dalla voce di Wikipedia:

  
1NF
  
    
La tabella rappresenta fedelmente una relazione e non ha gruppi ripetuti.
   

Questo è abbastanza semplice. Il termine "ripetendo gruppi" ha molteplici significati nella teoria, ma nessuno di loro ha nulla a che fare con le colonne duplicati o dati.

  
  
2NF
  
    
Nessun attributo non-prime nella tabella è funzionalmente dipendente da un sottoinsieme proprio di un tasto qualsiasi candidato.
    

In questo caso il termine importante da esaminare è "dipendenza funzionale". In sostanza, una dipendenza funzionale è dove si proietta un rapporto a due colonne, X e Y, e finire con una funzione di X → Y. Non si può avere una dipendenza funzionale tra due (o più) tabelle * . Inoltre, chiavi candidate non possono estendersi su più tabelle.

  
  
3NF
  
    
Ogni attributo non-prime non è transitivo dipende ogni chiave candidata nella tabella.
    dipendenza

transitiva è definito in termini di dipendenza funzionale: una dipendenza transitiva è una dipendenza dove X → Z solo perché X → Y e Y → Z. X, Y e Z deve essere nella stessa tabella perché questi sono dipendenze funzionali.

  
  
4NF
  
    
Ogni dipendenza multivalore non banale nella tabella è una dipendenza da una superchiave.
    

multivalore dipendenza è un po 'più complicato, ma può essere illustrato con un esempio: "ogniqualvolta le tuple (a, b, c) e (a, d, e) esistono in r, tuple (a, b, e) ed (a, d, c) dovrebbe esistere anche in r"(dove "r" è un tavolo). La cosa più importante per la materia a portata di mano, una dipendenza multivalore si applica solo a una singola tabella.

  
  
5NF
  
    
Ogni non banale uniscono la dipendenza nella tabella è implicita nel superchiavi della tabella.
    

Una tabella ha un unirsi dipendenza se può essere espresso come la naturale unione di altre tabelle . Questi altri tavoli, tuttavia, non hanno bisogno di esistere nel database. Se la tabella T 11 nell'esempio aveva un join dipendenza, sarebbe ancora avere uno anche se tabella rimosso T 10

  
  
6NF (C. Data)
  
    
Tabella caratteristiche join no non banale dipendenze affatto (con riferimento all'operatore generalizzata aderire).
    

Lo stesso ragionamento per 5NF.

  
  
Elementare chiave forma normale (EKNF)
  
    
Ogni dipendenza funzionale non banale nella tabella è o la dipendenza di un attributo chiave elementare o una dipendenza da una superchiave.
    

Lo stesso ragionamento per 2NF.

  
  
Boyce-Codd Normal Form (BCNF)
  
    
Ogni dipendenza funzionale non banale nella tabella è una dipendenza da una superchiave.
    

Lo stesso ragionamento per 2NF.

  
  
Domain / Key forma normale (DKNF)
  
    
Ogni vincolo sul tavolo è una conseguenza logica di vincoli di dominio della tabella e vincoli di chiave.
    

Se T 11 ha un vincolo che dipende T 10 , allora è sia un vincolo di chiave o un vincolo più complesso che si riferisce ancora a T 10 . Quest'ultimo caso non è il caso generale menzionato nell'interrogazione. In altre parole, mentre ci potrebbero essere schemi specifici con colonne duplicati che violano DKNF, non è vero in generale. Inoltre, è il vincolo (non la forma normale) che è definito in termini di varie tabelle e il vincolo (non la duplicazione colonna) che causa la violazione DKNF.

  

Lo scopo per la normalizzazione comprende prevenire anomalie. Tuttavia, la normalizzazione non è completa in quanto non garantisce un database relazionale sarà completamente privo di anomalie. Questo è un caso in cui diverge pratica dalla teoria.

Se questo ancora non si convince, si consideri lo schema di commento suggerimenti di Km. Alla, dove T 11 rappresenta una storia (o di versione) versione di T 10 . La chiave primaria della T 11 consiste delle colonne chiave primaria detenute in comune con T 10 , più la colonna supplementare (colonna data / versione). Che T 11 ha diverse chiavi candidate fa la differenza tra un design normalizzato anomalia e soggetta anomalia liberi.

* Qualcuno potrebbe pensare che si potrebbe usare si unisce per creare una dipendenza tra due tabelle. Mentre un join potrebbe creare una tabella che ha una dipendenza, la dipendenza esiste su questo tavolo, non tra i costituenti del join. Nel caso in esame, questa volta significa che una delle tabelle sarebbe una tabella unita e subirebbe dalla dipendenza stessa, indipendentemente dall'altra tabella nel database.

Forse la regola di evitare dati ridondanti? (Cioè stessi dati in due tabelle)

se 10 delle colonne 11 sono gli stessi, perché non può essere presente solo una tabella, in cui la colonna 11 è vuota sinistra (insieme con una possibile colonna 12 per indicare il tipo di dati è, ossia che esso tabella sarebbe stato in origine)?

Dipende cosa c'è nelle tabelle.

Se nessun record sono legati gli uni agli altri (per esempio, se una tabella viene semplicemente archiviata record originario della ma rimosso dalla prima tabella) non stai violando tutte le regole.

Ma se questi sono gli stessi record in ogni tabella, si ha un problema di dipendenza - che undicesima colonna dipende solo il valore della chiave dal record, non le colonne aggiuntive. Partendo dal presupposto che tutte le colonne dieci non sono coinvolti nella chiave primaria, hai violato terzo NF.

Avere due rapporti identici o quasi identici non è di per sé una violazione di una delle solite forme normali. Outis è molto completo spiegato perché. Potrebbe anche essere una violazione della Principio del disegno ortogonale però, che è un altro aspetto della teoria progettazione di database relazionali.

Se tutte le 10 colonne fanno parte della vostra chiave, quindi Seconda forma normale: Eliminare ridondante dei dati. In particolare, questo rientra "Nonsurrogate Versus Surrogate chiavi primarie" dilemma - a dire il vero, non ricordo nessuna di queste due scelte per essere "violare" 2NF, ma la chiave surrogata è sicuramente più vicino allo spirito di 2NF

Solo le chiavi primarie può essere ridondante tra i tavoli. Avere qualsiasi quantità di colonne chiave non primaria in più tabelle viola terza forma normale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top