2009-08-11 16 views
31

Qualcuno potrebbe aiutarmi a sapere che cosa è la normalizzazione in mysql e in questo caso e come abbiamo bisogno di usarlo ..normalizzazione in MySQL

Grazie in anticipo.

risposta

65

provo a tentare di spiegare la normalizzazione in termini profani qui. Prima di tutto, è qualcosa che si applica al database relazionale (Oracle, Access, MySQL) quindi non è solo per MySQL.

La normalizzazione consiste nell'assicurarsi che ogni tabella abbia gli unici campi minimi e di eliminare le dipendenze. Immagina di avere un record di dipendente e ogni dipendente appartiene a un dipartimento. Se memorizzi il dipartimento come un campo insieme agli altri dati del dipendente, hai un problema: cosa succede se un dipartimento viene rimosso? Devi aggiornare tutti i campi del dipartimento e c'è possibilità di errore. E se alcuni impiegati non hanno un reparto (appena assegnato, forse?). Ora ci saranno valori nulli.

Quindi la normalizzazione, in breve, è di evitare di avere campi che sarebbero nulli e assicurarsi che tutti i campi nella tabella appartengano solo a un dominio di dati che viene descritto. Ad esempio, nella tabella dei dipendenti, i campi possono essere ID, nome, numero di previdenza sociale, ma questi tre campi non hanno nulla a che fare con il dipartimento. Solo l'ID del dipendente descrive a quale dipartimento appartiene il dipendente. Quindi questo implica che il dipartimento in cui un dipendente si trova dovrebbe trovarsi in un'altra tabella.

Ecco un semplice processo di normalizzazione.

EMPLOYEE (<employee_id>, name, social_security, department_name) 

Questo non è normalizzato, come spiegato. Un modulo normalizzato potrebbe apparire come

EMPLOYEE (<employee_id>, name, social_security) 

Qui, la tabella Dipendente è responsabile solo di un set di dati. Quindi dove memorizziamo a quale dipartimento appartiene il dipendente? In un'altra tabella

EMPLOYEE_DEPARTMENT (<employee_id>, department_name) 

Questo non è ottimale. Cosa succede se il nome del reparto cambia? (succede sempre nel governo degli Stati Uniti). Quindi è meglio fare questo

EMPLOYEE_DEPARTMENT (<employee_id>, department_id) 
DEPARTMENT (<department_id>, department_name) 

Ci sono prima forma normale, seconda forma normale e terza forma normale. Ma a meno che tu non stia studiando un corso di DB, di solito cerco solo la forma più normalizzata che potrei capire.

Spero che questo aiuti.

+0

grazie per il tuo aiuto ... – Fero

+0

"Cosa succede se il nome del reparto cambia?" non ha nulla a che fare con la normalizzazione. Ad esempio, contrapponi il tuo "assicurandoti che ogni tabella abbia gli unici campi minimi e per eliminare le dipendenze". Né sostituisce generalmente le colonne per ID. Chiaramente ha qualcosa a che fare con la sostituzione di una tabella con più tabelle, ma quella nozione generale non è la normalizzazione, piuttosto la normalizzazione ne è un esempio. Tu sei (a volte e qualche volta no) che unisce i due. – philipxy

13

La normalizzazione non è solo per MYSql. È un concetto di database generale.

La normalizzazione è il processo di dati organizzare in modo efficiente in un database . Ci sono due obiettivi del processo di normalizzazione: eliminando dati ridondanti (per esempio, la memorizzazione gli stessi dati in più di una tabella) e assicurando dipendenze dei dati rendono senso (solo memorizzazione dati correlati in una tabella ). Entrambi gli obiettivi sono degni di nota in quanto riducono la quantità di spazio consumata dal database e assicurano che i dati siano archiviati in modo logico.

I moduli normali in SQL sono indicati di seguito.

prima forma normale (1NF): Una relazione è detta in 1NF se ha solo singoli attributi stimati, né ripetendo né sono consentiti array.

Seconda forma normale (2NF): Una relazione è detto essere in 2NF se è in 1NF ed ogni attributo non chiave è completamente dipendente funzionale sulla chiave primaria .

Terzo modulo normale (3NF): Diciamo che una relazione è in 3NF se è in 2NF e non ha dipendenze transitive.

Boyce-Codd forma normale (BCNF): Una relazione si dice che sia in BCNF se e solo se ogni determinante nella relazione è una chiave candidata.

Quarto forma normale (4NF): Una relazione si dice che sia in 4NF se è in BCNF e contiene alcuna dipendenza multivalore.

quinta forma normale (5NF): Una relazione è detto di essere in 5NF se e solo se ogni uniscono dipendenza in rapporto è implicato dalle chiavi candidate di relazione.

Forma normale chiave di dominio (DKNF): Diciamo che una relazione è in DKNF se è privo di tutte le anomalie di modifica. inserimento, cancellazione, e aggiornare anomalie rientrare modifica anomalie

Seel anche

Database Normalization Basics

+4

Penso che tu abbia sbagliato 4NF. Non dovrebbe essere "nessuna DIPENDENZA multivalore"? Gli attributi multivalore sono già vietati da 1NF! –

+2

Modificato. @ Thomas Padron-McCarthy, grazie per aver segnalato – rahul

3

È la tecnica per garantire che i dati rimane costante, eliminando la duplicazione.Quindi un database in cui le stesse informazioni sono memorizzate in più di una tabella non è normalizzato.

Vedere l'articolo di Wikipedia su Database normalization.

(E 'una tecnica generale per i database relazionali, non specifiche per MySQL.)

0

Nel campo dei database relazionale progettazione, la normalizzazione è un modo sistematico di garantire che una struttura di database è adatto per query generiche e gratuite di alcune caratteristiche indesiderabili caratteristiche-inserimento, aggiornamento e anomalie di cancellazione -che potrebbero portare a una perdita di integrità dei dati. [1] E.F. Codd, l'inventore del modello relazionale , ha introdotto il concetto di normalizzazione e quello che ora conosciamo come la prima forma normale nel 1970. [2] Codd ha continuato a definire la seconda e la terza forma normale nel 1971, [3] e Codd e Raymond F. Boyce ha definito la forma normale Boyce-Codd nel 1974. [4] forme superiori normali sono stati definiti da altri teorici negli anni successivi, la più recente è la sesta normale modulo introdotto da Chris Date, Hugh Darwen, e Nikos Lorentzos in 2002. [5]

Informalmente, un database relazionale tavolo (la rappresentazione computerizzata di relazione) è spesso descritto come "normalizzato" se è nella terza forma normale (3NF). [6] La maggior parte delle tabelle 3NF sono prive di inserimento, aggiornamento e anomalie di cancellazione , ovvero nella maggior parte dei casi le tabelle 3NF aderiscono a BCNF, 4NF e 5NF (ma in genere non 6NF).

Un elemento standard di progettazione del database guida è che il progettista deve creare un progetto completamente normalizzato; denormalizzazione selettiva può essere eseguita successivamente per i motivi di prestazione . [7] Tuttavia, alcuni discipline di modellazione, come ad esempio l'approccio modellazione tridimensionale ai dati progettazione magazzino, raccomanda esplicitamente disegni non normalizzati, cioè disegni che in gran parte non aderiscono a 3NF. [8]

Edit: Fonte: http://en.wikipedia.org/wiki/Database_normalization

+0

@Ali: Se intendi tagliare e incollare da Wikipedia, fornisci anche un link alla fonte. – RichieHindle

+0

@RichieHindle; concordato. Ho appena modificato il post. – Jonik

2

controllo this post ha utili suggerimenti

Tutorial di Barry su comprendere uno schema di database

http://www.youtube.com/watch?v=KqvIGYjcLQ4 
2

Durante la creazione di uno schema di database per l'applicazione, è necessario fare in modo di evitare qualsiasi informazione essendo memorizzato in più di una colonna tra tabelle diverse.

Come ogni tabella nel DB, identifica un'entità significativa nell'applicazione, un identificatore univoco è una colonna indispensabile per loro.

Ora, mentre si decide lo schema di archiviazione, vengono identificati vari tipi di relazioni tra queste entità (tabelle), viz-a-viz, one-to-one, one-to-many, many-to-many.

  1. Per una relazione uno-a-uno (ad es. A studente ha un rango unico nella classe ), stesso tavolo potrebbe essere utilizzata per memorizzare colonne (da entrambe le tabelle).
  2. Per una relazione uno-a-molti (ad esempio Un semestre può avere più corsi ), una chiave esterna è creata in una tabella padre.
  3. Per una relazione molti-a-molti (es. Un Prof. partecipa a molti studenti e viceversa), una terza tabella deve essere creato (con chiave primaria entrambe le tabelle come chiave composta) e i dati relativi a di entrambe le tabelle saranno memorizzati .

Una volta che si partecipa a tutti questi scenari, lo schema db verrà normalizzato a 4NF.

Problemi correlati