Introducció

En aquest tema, explorarem dos conceptes fonamentals en el disseny de bases de dades relacionals: les claus primàries i les claus estrangeres. Aquests conceptes són essencials per garantir la integritat i la relació entre les dades emmagatzemades en diferents taules.

Claus Primàries

Què és una clau primària?

Una clau primària és un camp (o una combinació de camps) en una taula que identifica de manera única cada fila d'aquesta taula. Les claus primàries tenen les següents propietats:

  • Úniques: Cada valor de la clau primària ha de ser únic dins de la taula.
  • No nul·les: Els valors de la clau primària no poden ser nuls.

Creant una clau primària

Per crear una clau primària en una taula, utilitzem la instrucció PRIMARY KEY en la definició de la taula. Vegem un exemple pràctic:

CREATE TABLE usuaris (
    id SERIAL PRIMARY KEY,
    nom VARCHAR(100) NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL
);

En aquest exemple:

  • id és la clau primària de la taula usuaris.
  • SERIAL és un tipus de dades que genera automàticament un valor únic per a cada fila.

Claus primàries compostes

Una clau primària també pot estar composta per més d'un camp. Això és útil quan cap camp individualment pot garantir la unicitat. Vegem un exemple:

CREATE TABLE ordres (
    ordre_id INT,
    producte_id INT,
    quantitat INT,
    PRIMARY KEY (ordre_id, producte_id)
);

En aquest cas, la combinació de ordre_id i producte_id garanteix la unicitat de cada fila.

Claus Estrangeres

Què és una clau estrangera?

Una clau estrangera és un camp (o una combinació de camps) en una taula que enllaça amb la clau primària d'una altra taula. Les claus estrangeres s'utilitzen per mantenir la integritat referencial entre les taules.

Creant una clau estrangera

Per crear una clau estrangera, utilitzem la instrucció FOREIGN KEY en la definició de la taula. Vegem un exemple pràctic:

CREATE TABLE comandes (
    comanda_id SERIAL PRIMARY KEY,
    usuari_id INT,
    data_comanda DATE NOT NULL,
    FOREIGN KEY (usuari_id) REFERENCES usuaris(id)
);

En aquest exemple:

  • usuari_id és una clau estrangera que enllaça amb la clau primària id de la taula usuaris.

Integritat referencial

L'ús de claus estrangeres ajuda a mantenir la integritat referencial. Això significa que una fila en una taula no pot referenciar una fila inexistent en una altra taula. PostgreSQL proporciona mecanismes per garantir aquesta integritat, com ara les accions ON DELETE i ON UPDATE.

Exemple amb accions ON DELETE i ON UPDATE

CREATE TABLE comandes (
    comanda_id SERIAL PRIMARY KEY,
    usuari_id INT,
    data_comanda DATE NOT NULL,
    FOREIGN KEY (usuari_id) REFERENCES usuaris(id)
    ON DELETE CASCADE
    ON UPDATE CASCADE
);

En aquest exemple:

  • ON DELETE CASCADE: Si una fila de la taula usuaris és eliminada, totes les files corresponents en la taula comandes també seran eliminades.
  • ON UPDATE CASCADE: Si el valor de la clau primària id en la taula usuaris és actualitzat, el valor corresponent en la taula comandes també serà actualitzat.

Exercicis Pràctics

Exercici 1: Creant taules amb claus primàries i estrangeres

  1. Crea una taula categories amb els següents camps:

    • categoria_id (clau primària, tipus SERIAL)
    • nom (tipus VARCHAR(100), no nul)
  2. Crea una taula productes amb els següents camps:

    • producte_id (clau primària, tipus SERIAL)
    • nom (tipus VARCHAR(100), no nul)
    • preu (tipus DECIMAL, no nul)
    • categoria_id (clau estrangera que enllaça amb categoria_id de la taula categories)

Solució

CREATE TABLE categories (
    categoria_id SERIAL PRIMARY KEY,
    nom VARCHAR(100) NOT NULL
);

CREATE TABLE productes (
    producte_id SERIAL PRIMARY KEY,
    nom VARCHAR(100) NOT NULL,
    preu DECIMAL NOT NULL,
    categoria_id INT,
    FOREIGN KEY (categoria_id) REFERENCES categories(categoria_id)
);

Exercici 2: Integritat referencial amb accions ON DELETE i ON UPDATE

  1. Modifica la taula productes per afegir les accions ON DELETE CASCADE i ON UPDATE CASCADE a la clau estrangera categoria_id.

Solució

ALTER TABLE productes
ADD CONSTRAINT fk_categoria
FOREIGN KEY (categoria_id)
REFERENCES categories(categoria_id)
ON DELETE CASCADE
ON UPDATE CASCADE;

Conclusió

Les claus primàries i estrangeres són elements essencials en el disseny de bases de dades relacionals. Les claus primàries garanteixen la unicitat de les files dins d'una taula, mentre que les claus estrangeres mantenen la integritat referencial entre taules. A través d'exemples pràctics, hem vist com crear i utilitzar aquestes claus per assegurar la consistència i la integritat de les dades en PostgreSQL.

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