Introducció
L'integritat referencial és un concepte fonamental en les bases de dades relacionals que assegura la coherència i la correcció de les dades entre les taules relacionades. Aquest principi garanteix que les relacions entre les taules es mantinguin correctes i que no hi hagi dades orfes o inconsistents.
Conceptes Clau
-
Clau Primària (Primary Key):
- És un camp o conjunt de camps que identifica de manera única cada registre en una taula.
- Exemple: En una taula
clients, el campclient_idpodria ser la clau primària.
-
Clau Forana (Foreign Key):
- És un camp o conjunt de camps en una taula que enllaça amb la clau primària d'una altra taula.
- Exemple: En una taula
comandes, el campclient_idpodria ser una clau forana que enllaça ambclient_idde la taulaclients.
-
Restriccions d'Integritat Referencial:
- Són regles que asseguren que les relacions entre taules es mantinguin coherents.
- Exemple: No es pot inserir un valor en una clau forana que no existeixi en la clau primària corresponent.
Exemple Pràctic
Creació de Taules amb Clau Primària i Clau Forana
-- Creació de la taula clients
CREATE TABLE clients (
client_id INT PRIMARY KEY,
nom VARCHAR(100),
email VARCHAR(100)
);
-- Creació de la taula comandes
CREATE TABLE comandes (
comanda_id INT PRIMARY KEY,
data DATE,
client_id INT,
FOREIGN KEY (client_id) REFERENCES clients(client_id)
);Explicació del Codi
-
Taula
clients:client_id: Clau primària que identifica de manera única cada client.nom: Nom del client.email: Correu electrònic del client.
-
Taula
comandes:comanda_id: Clau primària que identifica de manera única cada comanda.data: Data de la comanda.client_id: Clau forana que enllaça ambclient_idde la taulaclients.
Operacions d'Integritat Referencial
Inserció de Dades
-- Inserció d'un client INSERT INTO clients (client_id, nom, email) VALUES (1, 'Joan', 'joan@example.com'); -- Inserció d'una comanda per al client amb client_id = 1 INSERT INTO comandes (comanda_id, data, client_id) VALUES (101, '2023-10-01', 1);
Eliminació de Dades
-- Intent d'eliminar un client que té comandes associades DELETE FROM clients WHERE client_id = 1; -- Això fallarà si hi ha una restricció d'integritat referencial que impedeix l'eliminació de clients amb comandes associades.
Actualització de Dades
-- Actualització del client_id en la taula clients UPDATE clients SET client_id = 2 WHERE client_id = 1; -- Això també fallarà si hi ha una restricció d'integritat referencial que impedeix l'actualització de la clau primària.
Errors Comuns i Consells
-
Error: Violació de Clau Forana:
- Descripció: Intentar inserir un valor en una clau forana que no existeix en la clau primària corresponent.
- Solució: Assegura't que el valor existeixi en la taula referenciada abans d'inserir-lo.
-
Error: Eliminació de Registres amb Referències:
- Descripció: Intentar eliminar un registre que està referenciat per una clau forana en una altra taula.
- Solució: Elimina primer els registres que depenen del registre que vols eliminar o utilitza l'opció
ON DELETE CASCADEsi vols que les eliminacions es propaguin automàticament.
Exercici Pràctic
Exercici
-
Crea les taules
productesicomandes_productesamb les següents especificacions:productes:producte_id(clau primària),nom,preu.comandes_productes:comanda_id,producte_id(claus foranes),quantitat.
-
Assegura't que les claus foranes en
comandes_productesenllacin correctament amb les claus primàries decomandesiproductes.
Solució
-- Creació de la taula productes
CREATE TABLE productes (
producte_id INT PRIMARY KEY,
nom VARCHAR(100),
preu DECIMAL(10, 2)
);
-- Creació de la taula comandes_productes
CREATE TABLE comandes_productes (
comanda_id INT,
producte_id INT,
quantitat INT,
FOREIGN KEY (comanda_id) REFERENCES comandes(comanda_id),
FOREIGN KEY (producte_id) REFERENCES productes(producte_id)
);Conclusió
L'integritat referencial és essencial per mantenir la coherència i la integritat de les dades en una base de dades relacional. Mitjançant l'ús de claus primàries i foranes, es poden establir relacions sòlides entre les taules, evitant així dades orfes i inconsistents. Amb la pràctica i la comprensió d'aquests conceptes, es poden dissenyar bases de dades robustes i fiables.
Fonaments de Bases de Dades
Mòdul 1: Introducció a les Bases de Dades
- Conceptes Bàsics de Bases de Dades
- Tipus de Bases de Dades
- Història i Evolució de les Bases de Dades
Mòdul 2: Bases de Dades Relacionals
Mòdul 3: Bases de Dades No Relacionals
- Introducció a NoSQL
- Tipus de Bases de Dades NoSQL
- Comparació entre Bases de Dades Relacionals i No Relacionals
Mòdul 4: Disseny d'Esquemes
- Principis de Disseny d'Esquemes
- Diagrames Entitat-Relació (ER)
- Transformació de Diagrames ER a Esquemes Relacionals
