La normalització és un procés fonamental en el disseny de bases de dades que té com a objectiu organitzar les dades per minimitzar la redundància i evitar anomalies en les operacions de manipulació de dades. Aquest procés es divideix en diverses formes normals (NF), cadascuna amb les seves pròpies regles i objectius.
Objectius de la Normalització
- Eliminar la redundància de dades: Reduir la duplicació de dades per estalviar espai d'emmagatzematge i millorar la consistència.
- Evitar anomalies d'inserció, actualització i eliminació: Assegurar que les operacions de manipulació de dades no causin inconsistències.
- Millorar la integritat de les dades: Assegurar que les dades siguin correctes i coherents.
Formes Normals
Primera Forma Normal (1NF)
Una taula està en 1NF si:
- Tots els valors de les columnes són atòmics (indivisibles).
- No hi ha files duplicades.
- Cada columna conté un sol tipus de dades.
Exemple:
Segona Forma Normal (2NF)
Una taula està en 2NF si:
- Està en 1NF.
- Totes les columnes no clau depenen completament de la clau primària.
Exemple:
Suposem que tenim una taula Comandes
amb les següents columnes: ComandaID
, ClientID
, NomClient
, ProducteID
, Quantitat
.
Per normalitzar a 2NF, dividim la taula en dues:
CREATE TABLE Comandes ( ComandaID SERIAL PRIMARY KEY, ClientID INT, ProducteID INT, Quantitat INT ); CREATE TABLE Clients ( ClientID SERIAL PRIMARY KEY, NomClient VARCHAR(100) );
Tercera Forma Normal (3NF)
Una taula està en 3NF si:
- Està en 2NF.
- Totes les columnes no clau depenen directament de la clau primària i no de cap altra columna no clau.
Exemple:
Suposem que tenim una taula Productes
amb les següents columnes: ProducteID
, NomProducte
, Categoria
, Preu
.
Per normalitzar a 3NF, dividim la taula en dues:
CREATE TABLE Productes ( ProducteID SERIAL PRIMARY KEY, NomProducte VARCHAR(100), CategoriaID INT, Preu DECIMAL ); CREATE TABLE Categories ( CategoriaID SERIAL PRIMARY KEY, NomCategoria VARCHAR(100) );
Formes Normals Superiors
Forma Normal de Boyce-Codd (BCNF)
Una taula està en BCNF si:
- Està en 3NF.
- Per cada dependència funcional X -> Y, X és una superclau.
Quarta Forma Normal (4NF)
Una taula està en 4NF si:
- Està en BCNF.
- No conté dependències multivaluades no trivials.
Cinquena Forma Normal (5NF)
Una taula està en 5NF si:
- Està en 4NF.
- No conté dependències de join no trivials.
Resum
La normalització és un procés crític per assegurar la integritat i eficiència de les bases de dades. A través de les diferents formes normals, podem estructurar les dades de manera que es minimitzi la redundància i es maximitzi la consistència. A mesura que avancem en les formes normals, les regles es tornen més estrictes, però també proporcionen una major robustesa a la base de dades.
Exercici Pràctic
Exercici:
Suposem que tenim la següent taula Empleats
:
CREATE TABLE Empleats ( EmpleatID SERIAL PRIMARY KEY, Nom VARCHAR(100), Departament VARCHAR(100), Localització VARCHAR(100) );
Normalitza aquesta taula fins a la 3NF.
Solució:
- 1NF: La taula ja està en 1NF perquè tots els valors són atòmics.
- 2NF: Dividim la taula en dues per eliminar la dependència parcial:
CREATE TABLE Empleats ( EmpleatID SERIAL PRIMARY KEY, Nom VARCHAR(100), DepartamentID INT ); CREATE TABLE Departaments ( DepartamentID SERIAL PRIMARY KEY, Departament VARCHAR(100), Localització VARCHAR(100) );
- 3NF: La taula
Departaments
ja està en 3NF perquèLocalització
depèn directament deDepartamentID
.
Amb això, hem normalitzat la taula Empleats
fins a la 3NF.
Curs de PostgreSQL
Mòdul 1: Introducció a PostgreSQL
Mòdul 2: Operacions bàsiques de SQL
Mòdul 3: Consultes SQL avançades
Mòdul 4: Disseny de bases de dades i normalització
Mòdul 5: Funcionalitats avançades de PostgreSQL
Mòdul 6: Optimització i millora del rendiment
- Optimització de consultes
- Estratègies d'indexació
- Analitzant el rendiment de les consultes
- Vacuuming i manteniment
Mòdul 7: Seguretat i gestió d'usuaris
- Rols d'usuari i permisos
- Mètodes d'autenticació
- Encriptació de dades
- Còpia de seguretat i restauració
Mòdul 8: Treballant amb JSON i funcionalitats NoSQL
Mòdul 9: Extensions i eines avançades
- PostGIS per a dades geoespacials
- Cerca de text complet
- Wrappers de dades externes
- PL/pgSQL i altres llenguatges procedimentals