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ó

  1. Eliminar la redundància de dades: Reduir la duplicació de dades per estalviar espai d'emmagatzematge i millorar la consistència.
  2. Evitar anomalies d'inserció, actualització i eliminació: Assegurar que les operacions de manipulació de dades no causin inconsistències.
  3. 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:

CREATE TABLE Clients (
    ClientID SERIAL PRIMARY KEY,
    Nom VARCHAR(100),
    Telèfon VARCHAR(15)
);

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ó:

  1. 1NF: La taula ja està en 1NF perquè tots els valors són atòmics.
  2. 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)
    );
    
  3. 3NF: La taula Departaments ja està en 3NF perquè Localització depèn directament de DepartamentID.

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

Mòdul 7: Seguretat i gestió d'usuaris

Mòdul 8: Treballant amb JSON i funcionalitats NoSQL

Mòdul 9: Extensions i eines avançades

Mòdul 10: Estudis de cas i aplicacions del món real

© Copyright 2024. Tots els drets reservats