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 taulausuaris
.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àriaid
de la taulausuaris
.
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 taulausuaris
és eliminada, totes les files corresponents en la taulacomandes
també seran eliminades.ON UPDATE CASCADE
: Si el valor de la clau primàriaid
en la taulausuaris
és actualitzat, el valor corresponent en la taulacomandes
també serà actualitzat.
Exercicis Pràctics
Exercici 1: Creant taules amb claus primàries i estrangeres
-
Crea una taula
categories
amb els següents camps:categoria_id
(clau primària, tipusSERIAL
)nom
(tipusVARCHAR(100)
, no nul)
-
Crea una taula
productes
amb els següents camps:producte_id
(clau primària, tipusSERIAL
)nom
(tipusVARCHAR(100)
, no nul)preu
(tipusDECIMAL
, no nul)categoria_id
(clau estrangera que enllaça ambcategoria_id
de la taulacategories
)
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
- Modifica la taula
productes
per afegir les accionsON DELETE CASCADE
iON UPDATE CASCADE
a la clau estrangeracategoria_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
- 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