database normalization tutorial
Aquest tutorial explicarà què és la normalització de bases de dades i diversos formularis normals com 1NF 2NF 3NF i BCNF amb exemples de codi SQL:
La normalització de bases de dades és una tècnica coneguda que s’utilitza per dissenyar l’esquema de bases de dades.
L’objectiu principal d’aplicar la tècnica de normalització és reduir la redundància i la dependència de les dades. La normalització ens ajuda a desglossar taules grans en diverses taules petites definint una relació lògica entre aquestes taules.
Què aprendreu:
- Què és la normalització de la base de dades?
- Conclusió
Què és la normalització de la base de dades?
La normalització de bases de dades o normalització SQL ens ajuda a agrupar les dades relacionades en una sola taula. Les dades atributives o les dades relacionades indirectament es col·loquen en diferents taules i aquestes taules estan connectades amb una relació lògica entre les taules pare i fill.
El 1970, Edgar F. Codd va arribar al concepte de normalització. Va compartir un document anomenat 'Un model relacional de dades per a grans bancs compartits' en el qual proposava 'First Normal Form (1NF)'.
Avantatges de la normalització del SGBD
La normalització de la base de dades proporciona els següents avantatges bàsics:
- La normalització augmenta la consistència de les dades, ja que evita la duplicitat de les dades emmagatzemant-les en un sol lloc.
- La normalització ajuda a agrupar dades similars o relacionades sota el mateix esquema, cosa que resulta en una millor agrupació de dades.
- La normalització millora la cerca més ràpida ja que els índexs es poden crear més ràpidament. Per tant, la base de dades o taula normalitzada s’utilitza per a OLTP (Processament de transaccions en línia).
Desavantatges de la normalització de la base de dades
La normalització del SGBD té els següents desavantatges:
- No podem trobar les dades associades a, per exemple, un producte o un empleat en un lloc i hem d’unir-nos a més d’una taula. Això provoca un retard en recuperar les dades.
- Per tant, la normalització no és una bona opció en les transaccions OLAP (Processament analític en línia).
Abans de continuar, entenem els termes següents:
- Entitat: Entity és un objecte de la vida real, on les dades associades a aquest objecte s’emmagatzemen a la taula. L’exemple d’aquests objectes són empleats, departaments, estudiants, etc.
- Atributs: Els atributs són les característiques de l'entitat, que proporcionen informació sobre l'entitat. Per exemple, si les taules són entitats, les columnes són els seus atributs.
Tipus de formes normals
# 1) 1NF (primera forma normal)
Per definició, una entitat que no té cap columna o grup de dades que es repeteixi es pot denominar Primer formulari normal. Al primer formulari normal, totes les columnes són úniques.
A continuació s'explica la forma en què hauria quedat la nostra taula d'empleats i departaments si en primera forma normal (1NF):
empNum | cognom | nom | nomdept | deptCity | deptCountry |
---|---|---|---|---|---|
1001 | Andrews | Jack | Comptes | Nova York | Estats Units |
1002 | Schwatz | Mike | Tecnologia | Nova York | Estats Units |
1009 | Copa | Harry | RRHH | Berlín | Alemanya |
1007 | Harvey | Parker | Administrador | Londres | Regne Unit |
1007 | Harvey | Parker | RRHH | Londres | Regne Unit |
Aquí, totes les columnes de les taules Empleats i Departament s’han combinat en una sola i no cal connectar columnes, com deptNum, ja que totes les dades estan disponibles en un sol lloc.
Però una taula com aquesta amb totes les columnes necessàries no només seria difícil de gestionar, sinó també difícil de realitzar operacions i, a més, seria ineficient des del punt de vista de l’emmagatzematge.
# 2) 2NF (segona forma normal)
Per definició, una entitat que és 1NF i un dels seus atributs es defineix com la clau primària i els atributs restants depenen de la clau primària.
A continuació es mostra un exemple de l'aspecte de la taula dels empleats i del departament:
Taula d'empleats:
empNum | cognom | nom |
---|---|---|
1001 | Andrews | Jack |
1002 | Schwatz | Mike |
1009 | Copa | Harry |
1007 | Harvey | Parker |
1007 | Harvey | Parker |
Taula de departaments:
deptNum | nomdept | deptCity | deptCountry |
---|---|---|---|
1 | Comptes | Nova York | Estats Units |
2 | Tecnologia | Nova York | Estats Units |
3 | RRHH | Berlín | Alemanya |
4 | Administrador | Londres | Regne Unit |
Taula EmpDept:
empDeptID | empNum | deptNum |
---|---|---|
1 | 1001 | 1 |
2 | 1002 | 2 |
3 | 1009 | 3 |
4 | 1007 | 4 |
5 | 1007 | 3 |
Aquí podem observar que hem dividit la taula en forma 1NF en tres taules diferents. la taula Empleats és una entitat sobre tots els empleats d'una empresa i els seus atributs descriuen les propietats de cada empleat. La clau principal d'aquesta taula és empNum.
De manera similar, la taula Departaments és una entitat sobre tots els departaments d’una empresa i els seus atributs descriuen les propietats de cada departament. La clau principal d'aquesta taula és el deptNum.
A la tercera taula, hem combinat les claus primàries de les dues taules. Les claus principals de les taules Empleats i departaments es denominen claus estrangeres en aquesta tercera taula.
Si l'usuari vol una sortida similar a la que teníem a 1NF, l'usuari haurà d'unir-se a les tres taules mitjançant les claus primàries.
Una consulta de mostra es veuria com es mostra a continuació:
SELECT empNum, lastName, firstName, deptNum, deptName, deptCity, deptCountry FROM Employees A, Departments B, EmpDept C WHERE A.empNum = C.empNum AND B.deptNum = C.deptNum WITH UR;
# 3) 3NF (Tercera forma normal)
Per definició, una taula es considera en tercer lloc normal si la taula / entitat ja té la segona forma normal i les columnes de la taula / entitat no depenen transitòriament de la clau principal.
Comprenem la dependència no transitiva, amb l’ajut de l’exemple següent.
Digueu una taula anomenada: El client té les columnes següents:
Identificació de client - Clau principal que identifica un client únic
CustomerZIP - Codi postal de la localitat on resideix el client
CustomerCity - Ciutat on resideix el client
En el cas anterior, la columna CustomerCity depèn de la columna CustomerZIP i la columna CustomerZIP depèn de CustomerID.
L’escenari anterior s’anomena dependència transitiva de la columna CustomerCity del CustomerID, és a dir, la clau principal. Després d’entendre la dependència transitiva, ara anem a parlar del problema amb aquesta dependència.
c ++ inicialitza la variable estàtica
Podria haver-hi un possible escenari en què es faci una actualització no desitjada a la taula per actualitzar el CustomerZIP a un codi postal d’una altra ciutat sense actualitzar CustomerCity, deixant així la base de dades en un estat inconsistent.
Per solucionar aquest problema, hem d’eliminar la dependència transitiva que es podria fer creant una altra taula, per exemple, la taula CustZIP que conté dues columnes, és a dir, CustomerZIP (com a clau principal) i CustomerCity.
La columna CustomerZIP de la taula Customer és una clau externa per a CustomerZIP de la taula CustZIP. Aquesta relació garanteix que no hi hagi cap anomalia en les actualitzacions en què s’actualitzi un CustomerZIP sense fer canvis a CustomerCity.
# 4) Boyce-Codd Forma normal (3,5 Forma normal)
Per definició, la taula es considera Boyce-Codd Normal Form, si ja es troba en la tercera forma normal i per a cada dependència funcional entre A i B, A hauria de ser una super clau.
Aquesta definició sona una mica complicada. Intentem trencar-lo per entendre-ho millor.
- Dependència funcional: Es diu que els atributs o columnes d’una taula són funcionalment dependents quan un atribut o columna d’una taula identifica de manera única un altre atribut o columna de la mateixa taula.
Per exemple, la columna empNum o Número d'empleat identifica de manera única les altres columnes com Nom d'empleat, Salari d'empleat, etc. a la taula Empleat. - Super clau: Una sola clau o un grup de claus múltiples que podrien identificar de manera única una sola fila en una taula es pot anomenar Super clau. En termes generals, coneixem claus com les claus compostes.
Considerem l’escenari següent per entendre quan hi ha un problema amb la tercera forma normal i com es pot rescatar Boyce-Codd Normal Form.
empNum | nom | empCity | nomdept | deptHead |
---|---|---|---|---|
1001 | Jack | Nova York | Comptes | Raymond |
1001 | Jack | Nova York | Tecnologia | Donald |
1002 | Harry | Berlín | Comptes | Samara |
1007 | Parker | Londres | RRHH | Elizabeth |
1007 | Parker | Londres | Infraestructures | Tom |
A l'exemple anterior, els empleats amb empNum 1001 i 1007 treballen en dos departaments diferents. Cada departament té un cap de departament. Hi pot haver diversos caps de departament per a cada departament. Igual que per al departament de Comptes, Raymond i Samara són els dos caps de departament.
En aquest cas, empNum i deptName són super claus, la qual cosa implica que deptName és un atribut principal. Basant-nos en aquestes dues columnes, podem identificar cada fila de manera única.
A més, el nom dept depèn de deptHead, la qual cosa implica que deptHead és un atribut no primer. Aquest criteri desqualifica la taula per formar part de BCNF.
Per solucionar-ho, dividirem la taula en tres taules diferents, tal com s'esmenta a continuació:
Taula d'empleats:
empNum | nom | empCity | deptNum |
---|---|---|---|
1001 | Jack | Nova York | D1 |
1001 | Jack | Nova York | D2 |
1002 | Harry | Berlín | D1 |
1007 | Parker | Londres | D3 |
1007 | Parker | Londres | D4 |
Taula de departaments:
deptNum | nomdept | deptHead |
---|---|---|
D1 | Comptes | Raymond |
D2 | Tecnologia | Donald |
D1 | Comptes | Samara |
D3 | RRHH | Elizabeth |
D4 | Infraestructures | Tom |
# 5) Quarta forma normal (4 formes normals)
Per definició, una taula es troba en la quarta forma normal, si no té dues o més dades independents que descriuen l'entitat pertinent.
# 6) Cinquena forma normal (5 formes normals)
Una taula es pot considerar en cinquena forma normal només si compleix les condicions de la quarta forma normal i es pot desglossar en diverses taules sense perdre cap dada.
Preguntes i respostes freqüents
P # 1) Què és la normalització en una base de dades?
Resposta: La normalització de bases de dades és una tècnica de disseny. Mitjançant això podem dissenyar o redissenyar esquemes a la base de dades per reduir les dades redundants i la dependència de les dades dividint-les en taules més petites i rellevants.
Q # 2) Quins són els diferents tipus de normalització?
Resposta: A continuació es detallen els diferents tipus de tècniques de normalització que es poden emprar per dissenyar esquemes de bases de dades:
- Primera forma normal (1NF)
- Segona forma normal (2NF)
- Tercera forma normal (3NF)
- Forma normal de Boyce-Codd (3,5 NF)
- Quarta forma normal (4NF)
- Cinquena forma normal (5NF)
P # 3) Quin és el propòsit de la normalització?
Resposta: L’objectiu principal de la normalització és reduir la redundància de les dades, és a dir, les dades només s’han d’emmagatzemar una vegada. Es tracta d’evitar qualsevol anomalia de dades que pugui sorgir quan intentem emmagatzemar les mateixes dades en dues taules diferents, però els canvis només s’apliquen a una i no a l’altra.
Q # 4) Què és la desnormalització?
Resposta: La desnormalització és una tècnica per augmentar el rendiment de la base de dades. Aquesta tècnica afegeix dades redundants a la base de dades, contràriament a la base de dades normalitzada que elimina la redundància de les dades.
Això es fa en enormes bases de dades on executar un JOIN per obtenir dades de diverses taules és un assumpte costós. Per tant, les dades redundants s’emmagatzemen en diverses taules per evitar operacions JOIN.
Conclusió
Fins ara, tots hem passat per tres formularis de normalització de bases de dades.
Teòricament, hi ha formes més altes de normalitzacions de bases de dades com Boyce-Codd Normal Form, 4NF, 5NF. Tot i això, 3NF és el formulari de normalització àmpliament utilitzat a les bases de dades de producció.
Bona lectura !!
Lectura recomanada
- Proves de bases de dades amb JMeter
- MongoDB Crea una còpia de seguretat de la base de dades
- Tutorial de creació de bases de dades de MongoDB
- Top 10 eines de disseny de bases de dades per crear models de dades complexos
- Rendiment de MongoDB: rendiment de bloqueig, errors de pàgina i perfils de bases de dades
- Revisió de bases de dades relacionals de codi obert Altibase
- Perfil de base de dades MongoDB per al seguiment de consultes i rendiment
- Com provar la base de dades Oracle