En aquest cas d'estudi, explorarem el disseny, implementació i ús d'una base de dades relacional per a una biblioteca. Aquest exemple pràctic ens permetrà aplicar els conceptes apresos en els mòduls anteriors, com el model relacional, el llenguatge SQL, el disseny d'esquemes i la normalització.
- Requisits del Sistema
1.1. Descripció del Sistema
La biblioteca necessita un sistema per gestionar els llibres, els membres, els préstecs i les devolucions. Els requisits principals són:
- Emmagatzemar informació sobre els llibres, incloent-hi títol, autor, any de publicació i gènere.
- Gestionar la informació dels membres, incloent-hi nom, adreça, telèfon i data d'inscripció.
- Registrar els préstecs de llibres, incloent-hi la data de préstec, la data de devolució prevista i la data de devolució real.
- Permetre la cerca de llibres per títol, autor o gènere.
- Generar informes sobre els llibres prestats i els membres actius.
1.2. Requisits Funcionals
- Alta, baixa i modificació de llibres.
- Alta, baixa i modificació de membres.
- Registre de préstecs i devolucions.
- Cerca de llibres per diferents criteris.
- Generació d'informes.
- Disseny de l'Esquema
2.1. Diagrama Entitat-Relació (ER)
Primer, dissenyarem un diagrama ER per representar les entitats i les seves relacions.
-
Entitats:
- Llibre
- Membre
- Préstec
-
Relacions:
- Un llibre pot ser prestat a zero o més membres.
- Un membre pot tenir zero o més préstecs.
2.2. Transformació del Diagrama ER a Esquema Relacional
Transformarem el diagrama ER en taules relacionals.
Taula Llibre
Columna | Tipus de Dada | Descripció |
---|---|---|
id_llibre | INT | Clau Primària |
titol | VARCHAR(255) | Títol del llibre |
autor | VARCHAR(255) | Autor del llibre |
any_publicacio | INT | Any de publicació |
genere | VARCHAR(100) | Gènere del llibre |
Taula Membre
Columna | Tipus de Dada | Descripció |
---|---|---|
id_membre | INT | Clau Primària |
nom | VARCHAR(255) | Nom del membre |
adreça | VARCHAR(255) | Adreça del membre |
telefon | VARCHAR(20) | Telèfon del membre |
data_inscripcio | DATE | Data d'inscripció |
Taula Prestec
Columna | Tipus de Dada | Descripció |
---|---|---|
id_prestec | INT | Clau Primària |
id_llibre | INT | Clau Forana (Llibre) |
id_membre | INT | Clau Forana (Membre) |
data_prestec | DATE | Data del préstec |
data_devolucio_prevista | DATE | Data de devolució prevista |
data_devolucio_real | DATE | Data de devolució real |
- Implementació en SQL
3.1. Creació de Taules
CREATE TABLE Llibre ( id_llibre INT PRIMARY KEY, titol VARCHAR(255) NOT NULL, autor VARCHAR(255) NOT NULL, any_publicacio INT, genere VARCHAR(100) ); CREATE TABLE Membre ( id_membre INT PRIMARY KEY, nom VARCHAR(255) NOT NULL, adreça VARCHAR(255), telefon VARCHAR(20), data_inscripcio DATE ); CREATE TABLE Prestec ( id_prestec INT PRIMARY KEY, id_llibre INT, id_membre INT, data_prestec DATE, data_devolucio_prevista DATE, data_devolucio_real DATE, FOREIGN KEY (id_llibre) REFERENCES Llibre(id_llibre), FOREIGN KEY (id_membre) REFERENCES Membre(id_membre) );
3.2. Inserció de Dades
-- Inserir llibres INSERT INTO Llibre (id_llibre, titol, autor, any_publicacio, genere) VALUES (1, '1984', 'George Orwell', 1949, 'Distopia'); INSERT INTO Llibre (id_llibre, titol, autor, any_publicacio, genere) VALUES (2, 'To Kill a Mockingbird', 'Harper Lee', 1960, 'Ficció'); -- Inserir membres INSERT INTO Membre (id_membre, nom, adreça, telefon, data_inscripcio) VALUES (1, 'Joan Garcia', 'Carrer Major, 1', '123456789', '2023-01-15'); INSERT INTO Membre (id_membre, nom, adreça, telefon, data_inscripcio) VALUES (2, 'Maria López', 'Carrer Nou, 2', '987654321', '2023-02-20'); -- Inserir préstecs INSERT INTO Prestec (id_prestec, id_llibre, id_membre, data_prestec, data_devolucio_prevista, data_devolucio_real) VALUES (1, 1, 1, '2023-03-01', '2023-03-15', NULL); INSERT INTO Prestec (id_prestec, id_llibre, id_membre, data_prestec, data_devolucio_prevista, data_devolucio_real) VALUES (2, 2, 2, '2023-03-05', '2023-03-19', NULL);
3.3. Consultes SQL
Cerca de Llibres per Autor
Llistat de Préstecs Actius
Informes de Membres Actius
SELECT Membre.nom, COUNT(Prestec.id_prestec) AS nombre_prestecs FROM Membre LEFT JOIN Prestec ON Membre.id_membre = Prestec.id_membre GROUP BY Membre.nom;
- Exercicis Pràctics
Exercici 1: Inserir Nous Llibres i Membres
- Inserir dos nous llibres a la taula
Llibre
. - Inserir dos nous membres a la taula
Membre
.
Exercici 2: Registre de Nous Préstecs
- Registra dos nous préstecs a la taula
Prestec
.
Exercici 3: Consultes SQL
- Escriu una consulta per trobar tots els llibres publicats després de l'any 2000.
- Escriu una consulta per trobar tots els membres que han prestat més d'un llibre.
- Solucions als Exercicis
Solució a l'Exercici 1
-- Nous llibres INSERT INTO Llibre (id_llibre, titol, autor, any_publicacio, genere) VALUES (3, 'Brave New World', 'Aldous Huxley', 1932, 'Distopia'); INSERT INTO Llibre (id_llibre, titol, autor, any_publicacio, genere) VALUES (4, 'The Great Gatsby', 'F. Scott Fitzgerald', 1925, 'Ficció'); -- Nous membres INSERT INTO Membre (id_membre, nom, adreça, telefon, data_inscripcio) VALUES (3, 'Pere Puig', 'Carrer Vell, 3', '111222333', '2023-03-10'); INSERT INTO Membre (id_membre, nom, adreça, telefon, data_inscripcio) VALUES (4, 'Anna Riera', 'Carrer Nou, 4', '444555666', '2023-03-15');
Solució a l'Exercici 2
-- Nous préstecs INSERT INTO Prestec (id_prestec, id_llibre, id_membre, data_prestec, data_devolucio_prevista, data_devolucio_real) VALUES (3, 3, 3, '2023-03-20', '2023-04-03', NULL); INSERT INTO Prestec (id_prestec, id_llibre, id_membre, data_prestec, data_devolucio_prevista, data_devolucio_real) VALUES (4, 4, 4, '2023-03-22', '2023-04-05', NULL);
Solució a l'Exercici 3
-- Llibres publicats després de l'any 2000 SELECT * FROM Llibre WHERE any_publicacio > 2000; -- Membres que han prestat més d'un llibre SELECT Membre.nom, COUNT(Prestec.id_prestec) AS nombre_prestecs FROM Membre LEFT JOIN Prestec ON Membre.id_membre = Prestec.id_membre GROUP BY Membre.nom HAVING COUNT(Prestec.id_prestec) > 1;
- Conclusió
Aquest cas d'estudi ha proporcionat una visió pràctica de com dissenyar i implementar una base de dades relacional per a una biblioteca. Hem cobert des de la identificació dels requisits fins a la creació de taules i l'execució de consultes SQL. Els exercicis pràctics han reforçat els conceptes apresos i han proporcionat una oportunitat per aplicar-los en situacions reals.
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