BD Reserves
Descripció
Aquesta base de dades representa un sistema de reserves d'instal·lacions esportives. S'utilitza com a BD de referència per a les miniactivitats dels temes de Consultes SQL (RA4) que fan referència a la "BD de pràctiques".
La base de dades té 3 taules amb les relacions següents:
erDiagram
instal_lacions {
int id_instal_lacio PK
varchar nom
varchar tipus
numeric preu_hora
boolean actiu
}
usuaris {
int id_usuari PK
char dni
varchar nom
varchar cognoms
varchar email
date data_alta
}
reserves {
int id_reserva PK
int id_usuari FK
int id_instal_lacio FK
date data_reserva
time hora_inici
time hora_fi
varchar estat
numeric preu_total
}
usuaris ||--o{ reserves : "realitza"
instal_lacions ||--o{ reserves : "acull"
Dades de la BD
instal_lacions (8 files)
| id | nom | tipus | preu_hora | actiu |
|---|---|---|---|---|
| 1 | Pista de pàdel A | Pàdel | 15.00 | cert |
| 2 | Pista de pàdel B | Pàdel | 15.00 | cert |
| 3 | Pista de tennis | Tennis | 20.00 | cert |
| 4 | Piscina coberta | Natació | 5.00 | cert |
| 5 | Sala de fitness | Fitness | 8.00 | cert |
| 6 | Sala polivalent | Polivalent | 30.00 | cert |
| 7 | Camp de futbol | Futbol | 50.00 | fals |
| 8 | Pista de bàsquet | Bàsquet | 25.00 | cert |
usuaris (7 files)
| id | dni | nom | cognoms | data_alta | |
|---|---|---|---|---|---|
| 1 | 12345678A | Joan | Garcia Puig | joan.garcia@example.com | 2024-01-10 |
| 2 | 87654321B | Maria | Lopez Serra | maria.lopez@example.com | 2024-02-05 |
| 3 | 11111111C | Pere | Bosch Vila | pere.bosch@example.com | 2024-03-20 |
| 4 | 22222222D | Anna | Mas Ribas | anna.mas@example.com | 2024-04-15 |
| 5 | 33333333E | Carles | Puig Torres | carles.puig@example.com | 2024-05-30 |
| 6 | 44444444F | Laura | Valls Ferrer | laura.valls@example.com | 2024-07-01 |
| 7 | 55555555G | Miquel | Soler Costa | miquel.soler@example.com | 2024-09-12 |
Usuari sense reserves
L'usuari 7 (Miquel Soler) no té cap reserva. Això permet practicar consultes amb NOT IN, NOT EXISTS i LEFT JOIN ... WHERE IS NULL.
reserves (22 files)
preu_total = preu_hora × durada en hores
| id | usuari | instal | data | hora_inici | hora_fi | estat | preu_total |
|---|---|---|---|---|---|---|---|
| 1 | 1 | 1 | 2025-01-05 | 10:00 | 11:30 | entregada | 22.50 |
| 2 | 1 | 3 | 2025-01-12 | 09:00 | 10:00 | entregada | 20.00 |
| 3 | 2 | 4 | 2025-01-15 | 11:00 | 12:00 | entregada | 5.00 |
| 4 | 1 | 5 | 2025-01-20 | 08:00 | 09:00 | entregada | 8.00 |
| 5 | 4 | 6 | 2025-01-08 | 09:00 | 12:00 | entregada | 90.00 |
| 6 | 2 | 6 | 2025-01-22 | 14:00 | 17:00 | entregada | 90.00 |
| 7 | 3 | 1 | 2025-02-03 | 16:00 | 17:30 | entregada | 22.50 |
| 8 | 2 | 1 | 2025-02-10 | 10:00 | 11:30 | entregada | 22.50 |
| 9 | 1 | 2 | 2025-02-15 | 12:00 | 13:30 | entregada | 22.50 |
| 10 | 1 | 6 | 2025-02-12 | 09:00 | 12:00 | entregada | 90.00 |
| 11 | 3 | 6 | 2025-02-26 | 14:00 | 17:00 | entregada | 90.00 |
| 12 | 3 | 3 | 2025-03-02 | 10:00 | 11:00 | confirmada | 20.00 |
| 13 | 5 | 5 | 2025-03-08 | 07:00 | 08:00 | confirmada | 8.00 |
| 14 | 5 | 6 | 2025-03-05 | 09:00 | 12:00 | confirmada | 90.00 |
| 15 | 2 | 8 | 2025-03-12 | 15:00 | 16:00 | confirmada | 25.00 |
| 16 | 1 | 1 | 2025-03-18 | 10:00 | 11:30 | pendent | 22.50 |
| 17 | 4 | 4 | 2025-03-20 | 09:00 | 10:00 | pendent | 5.00 |
| 18 | 5 | 1 | 2025-03-22 | 11:00 | 12:30 | cancel·lada | 22.50 |
| 19 | 6 | 3 | 2025-03-25 | 16:00 | 17:00 | pendent | 20.00 |
| 20 | 3 | 5 | 2025-03-26 | 08:00 | 09:00 | pendent | 8.00 |
| 21 | 1 | 8 | 2025-03-27 | 19:00 | 20:00 | pendent | 25.00 |
| 22 | 2 | 6 | 2025-03-28 | 17:00 | 20:00 | pendent | 90.00 |
Reserves per usuari: Joan→7, Maria→5, Pere→4, Carles→3, Anna→2, Laura→1, Miquel→0
Recaptació per tipus: Polivalent→540€, Pàdel→112.50€, Bàsquet→50€, Tennis→60€, Fitness→24€, Natació→10€
Script de creació
-- ============================================================
-- BD Reserves - PostgreSQL
-- ============================================================
DROP TABLE IF EXISTS reserves CASCADE;
DROP TABLE IF EXISTS instal_lacions CASCADE;
DROP TABLE IF EXISTS usuaris CASCADE;
-- ── CREACIÓ DE TAULES ─────────────────────────────────────
CREATE TABLE instal_lacions (
id_instal_lacio SERIAL PRIMARY KEY,
nom VARCHAR(100) NOT NULL,
tipus VARCHAR(50) NOT NULL,
preu_hora NUMERIC(8,2) NOT NULL CHECK (preu_hora > 0),
actiu BOOLEAN NOT NULL DEFAULT TRUE
);
CREATE TABLE usuaris (
id_usuari SERIAL PRIMARY KEY,
dni CHAR(9) NOT NULL UNIQUE,
nom VARCHAR(100) NOT NULL,
cognoms VARCHAR(200) NOT NULL,
email VARCHAR(150) NOT NULL UNIQUE,
data_alta DATE NOT NULL DEFAULT CURRENT_DATE
);
CREATE TABLE reserves (
id_reserva SERIAL PRIMARY KEY,
id_usuari INTEGER NOT NULL,
id_instal_lacio INTEGER NOT NULL,
data_reserva DATE NOT NULL,
hora_inici TIME NOT NULL,
hora_fi TIME NOT NULL,
estat VARCHAR(20) NOT NULL DEFAULT 'pendent'
CHECK (estat IN ('pendent','confirmada','entregada','cancel·lada')),
preu_total NUMERIC(8,2),
CONSTRAINT chk_hores CHECK (hora_fi > hora_inici),
CONSTRAINT fk_res_usu FOREIGN KEY (id_usuari)
REFERENCES usuaris(id_usuari) ON DELETE RESTRICT,
CONSTRAINT fk_res_ins FOREIGN KEY (id_instal_lacio)
REFERENCES instal_lacions(id_instal_lacio) ON DELETE RESTRICT
);
-- ── INSTAL·LACIONS ────────────────────────────────────────
INSERT INTO instal_lacions (id_instal_lacio, nom, tipus, preu_hora, actiu) VALUES
(1, 'Pista de pàdel A', 'Pàdel', 15.00, TRUE),
(2, 'Pista de pàdel B', 'Pàdel', 15.00, TRUE),
(3, 'Pista de tennis', 'Tennis', 20.00, TRUE),
(4, 'Piscina coberta', 'Natació', 5.00, TRUE),
(5, 'Sala de fitness', 'Fitness', 8.00, TRUE),
(6, 'Sala polivalent', 'Polivalent', 30.00, TRUE),
(7, 'Camp de futbol', 'Futbol', 50.00, FALSE),
(8, 'Pista de bàsquet', 'Bàsquet', 25.00, TRUE);
SELECT setval('instal_lacions_id_instal_lacio_seq', 8);
-- ── USUARIS ───────────────────────────────────────────────
INSERT INTO usuaris (id_usuari, dni, nom, cognoms, email, data_alta) VALUES
(1, '12345678A', 'Joan', 'Garcia Puig', 'joan.garcia@example.com', '2024-01-10'),
(2, '87654321B', 'Maria', 'Lopez Serra', 'maria.lopez@example.com', '2024-02-05'),
(3, '11111111C', 'Pere', 'Bosch Vila', 'pere.bosch@example.com', '2024-03-20'),
(4, '22222222D', 'Anna', 'Mas Ribas', 'anna.mas@example.com', '2024-04-15'),
(5, '33333333E', 'Carles', 'Puig Torres', 'carles.puig@example.com', '2024-05-30'),
(6, '44444444F', 'Laura', 'Valls Ferrer', 'laura.valls@example.com', '2024-07-01'),
(7, '55555555G', 'Miquel', 'Soler Costa', 'miquel.soler@example.com', '2024-09-12');
SELECT setval('usuaris_id_usuari_seq', 7);
-- ── RESERVES ──────────────────────────────────────────────
INSERT INTO reserves (id_reserva, id_usuari, id_instal_lacio, data_reserva, hora_inici, hora_fi, estat, preu_total) VALUES
(1, 1, 1, '2025-01-05', '10:00', '11:30', 'entregada', 22.50),
(2, 1, 3, '2025-01-12', '09:00', '10:00', 'entregada', 20.00),
(3, 2, 4, '2025-01-15', '11:00', '12:00', 'entregada', 5.00),
(4, 1, 5, '2025-01-20', '08:00', '09:00', 'entregada', 8.00),
(5, 4, 6, '2025-01-08', '09:00', '12:00', 'entregada', 90.00),
(6, 2, 6, '2025-01-22', '14:00', '17:00', 'entregada', 90.00),
(7, 3, 1, '2025-02-03', '16:00', '17:30', 'entregada', 22.50),
(8, 2, 1, '2025-02-10', '10:00', '11:30', 'entregada', 22.50),
(9, 1, 2, '2025-02-15', '12:00', '13:30', 'entregada', 22.50),
(10, 1, 6, '2025-02-12', '09:00', '12:00', 'entregada', 90.00),
(11, 3, 6, '2025-02-26', '14:00', '17:00', 'entregada', 90.00),
(12, 3, 3, '2025-03-02', '10:00', '11:00', 'confirmada', 20.00),
(13, 5, 5, '2025-03-08', '07:00', '08:00', 'confirmada', 8.00),
(14, 5, 6, '2025-03-05', '09:00', '12:00', 'confirmada', 90.00),
(15, 2, 8, '2025-03-12', '15:00', '16:00', 'confirmada', 25.00),
(16, 1, 1, '2025-03-18', '10:00', '11:30', 'pendent', 22.50),
(17, 4, 4, '2025-03-20', '09:00', '10:00', 'pendent', 5.00),
(18, 5, 1, '2025-03-22', '11:00', '12:30', 'cancel·lada', 22.50),
(19, 6, 3, '2025-03-25', '16:00', '17:00', 'pendent', 20.00),
(20, 3, 5, '2025-03-26', '08:00', '09:00', 'pendent', 8.00),
(21, 1, 8, '2025-03-27', '19:00', '20:00', 'pendent', 25.00),
(22, 2, 6, '2025-03-28', '17:00', '20:00', 'pendent', 90.00);
SELECT setval('reserves_id_reserva_seq', 22);
-- ============================================================
-- BD Reserves - MySQL / MariaDB
-- ============================================================
DROP DATABASE IF EXISTS bd_reserves;
CREATE DATABASE bd_reserves
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
USE bd_reserves;
-- ── CREACIÓ DE TAULES ─────────────────────────────────────
CREATE TABLE instal_lacions (
id_instal_lacio INT AUTO_INCREMENT PRIMARY KEY,
nom VARCHAR(100) NOT NULL,
tipus VARCHAR(50) NOT NULL,
preu_hora DECIMAL(8,2) NOT NULL CHECK (preu_hora > 0),
actiu TINYINT(1) NOT NULL DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE usuaris (
id_usuari INT AUTO_INCREMENT PRIMARY KEY,
dni CHAR(9) NOT NULL UNIQUE,
nom VARCHAR(100) NOT NULL,
cognoms VARCHAR(200) NOT NULL,
email VARCHAR(150) NOT NULL UNIQUE,
data_alta DATE NOT NULL DEFAULT (CURRENT_DATE)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE reserves (
id_reserva INT AUTO_INCREMENT PRIMARY KEY,
id_usuari INT NOT NULL,
id_instal_lacio INT NOT NULL,
data_reserva DATE NOT NULL,
hora_inici TIME NOT NULL,
hora_fi TIME NOT NULL,
estat VARCHAR(20) NOT NULL DEFAULT 'pendent',
CONSTRAINT chk_estat CHECK (estat IN ('pendent','confirmada','entregada','cancel·lada')),
preu_total DECIMAL(8,2),
CONSTRAINT chk_hores CHECK (hora_fi > hora_inici),
CONSTRAINT fk_res_usu FOREIGN KEY (id_usuari)
REFERENCES usuaris(id_usuari) ON DELETE RESTRICT,
CONSTRAINT fk_res_ins FOREIGN KEY (id_instal_lacio)
REFERENCES instal_lacions(id_instal_lacio) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ── INSTAL·LACIONS ────────────────────────────────────────
INSERT INTO instal_lacions (id_instal_lacio, nom, tipus, preu_hora, actiu) VALUES
(1, 'Pista de pàdel A', 'Pàdel', 15.00, 1),
(2, 'Pista de pàdel B', 'Pàdel', 15.00, 1),
(3, 'Pista de tennis', 'Tennis', 20.00, 1),
(4, 'Piscina coberta', 'Natació', 5.00, 1),
(5, 'Sala de fitness', 'Fitness', 8.00, 1),
(6, 'Sala polivalent', 'Polivalent', 30.00, 1),
(7, 'Camp de futbol', 'Futbol', 50.00, 0),
(8, 'Pista de bàsquet', 'Bàsquet', 25.00, 1);
-- ── USUARIS ───────────────────────────────────────────────
INSERT INTO usuaris (id_usuari, dni, nom, cognoms, email, data_alta) VALUES
(1, '12345678A', 'Joan', 'Garcia Puig', 'joan.garcia@example.com', '2024-01-10'),
(2, '87654321B', 'Maria', 'Lopez Serra', 'maria.lopez@example.com', '2024-02-05'),
(3, '11111111C', 'Pere', 'Bosch Vila', 'pere.bosch@example.com', '2024-03-20'),
(4, '22222222D', 'Anna', 'Mas Ribas', 'anna.mas@example.com', '2024-04-15'),
(5, '33333333E', 'Carles', 'Puig Torres', 'carles.puig@example.com', '2024-05-30'),
(6, '44444444F', 'Laura', 'Valls Ferrer', 'laura.valls@example.com', '2024-07-01'),
(7, '55555555G', 'Miquel', 'Soler Costa', 'miquel.soler@example.com', '2024-09-12');
-- ── RESERVES ──────────────────────────────────────────────
INSERT INTO reserves (id_reserva, id_usuari, id_instal_lacio, data_reserva, hora_inici, hora_fi, estat, preu_total) VALUES
(1, 1, 1, '2025-01-05', '10:00', '11:30', 'entregada', 22.50),
(2, 1, 3, '2025-01-12', '09:00', '10:00', 'entregada', 20.00),
(3, 2, 4, '2025-01-15', '11:00', '12:00', 'entregada', 5.00),
(4, 1, 5, '2025-01-20', '08:00', '09:00', 'entregada', 8.00),
(5, 4, 6, '2025-01-08', '09:00', '12:00', 'entregada', 90.00),
(6, 2, 6, '2025-01-22', '14:00', '17:00', 'entregada', 90.00),
(7, 3, 1, '2025-02-03', '16:00', '17:30', 'entregada', 22.50),
(8, 2, 1, '2025-02-10', '10:00', '11:30', 'entregada', 22.50),
(9, 1, 2, '2025-02-15', '12:00', '13:30', 'entregada', 22.50),
(10, 1, 6, '2025-02-12', '09:00', '12:00', 'entregada', 90.00),
(11, 3, 6, '2025-02-26', '14:00', '17:00', 'entregada', 90.00),
(12, 3, 3, '2025-03-02', '10:00', '11:00', 'confirmada', 20.00),
(13, 5, 5, '2025-03-08', '07:00', '08:00', 'confirmada', 8.00),
(14, 5, 6, '2025-03-05', '09:00', '12:00', 'confirmada', 90.00),
(15, 2, 8, '2025-03-12', '15:00', '16:00', 'confirmada', 25.00),
(16, 1, 1, '2025-03-18', '10:00', '11:30', 'pendent', 22.50),
(17, 4, 4, '2025-03-20', '09:00', '10:00', 'pendent', 5.00),
(18, 5, 1, '2025-03-22', '11:00', '12:30', 'cancel·lada', 22.50),
(19, 6, 3, '2025-03-25', '16:00', '17:00', 'pendent', 20.00),
(20, 3, 5, '2025-03-26', '08:00', '09:00', 'pendent', 8.00),
(21, 1, 8, '2025-03-27', '19:00', '20:00', 'pendent', 25.00),
(22, 2, 6, '2025-03-28', '17:00', '20:00', 'pendent', 90.00);
-- ============================================================
-- BD Reserves - SQL Server
-- ============================================================
IF EXISTS (SELECT name FROM sys.databases WHERE name = 'bd_reserves')
DROP DATABASE bd_reserves;
GO
CREATE DATABASE bd_reserves;
GO
USE bd_reserves;
GO
-- ── CREACIÓ DE TAULES ─────────────────────────────────────
CREATE TABLE instal_lacions (
id_instal_lacio INT IDENTITY(1,1) PRIMARY KEY,
nom NVARCHAR(100) NOT NULL,
tipus NVARCHAR(50) NOT NULL,
preu_hora DECIMAL(8,2) NOT NULL CONSTRAINT chk_preu CHECK (preu_hora > 0),
actiu BIT NOT NULL DEFAULT 1
);
CREATE TABLE usuaris (
id_usuari INT IDENTITY(1,1) PRIMARY KEY,
dni CHAR(9) NOT NULL UNIQUE,
nom NVARCHAR(100) NOT NULL,
cognoms NVARCHAR(200) NOT NULL,
email NVARCHAR(150) NOT NULL UNIQUE,
data_alta DATE NOT NULL DEFAULT GETDATE()
);
CREATE TABLE reserves (
id_reserva INT IDENTITY(1,1) PRIMARY KEY,
id_usuari INT NOT NULL,
id_instal_lacio INT NOT NULL,
data_reserva DATE NOT NULL,
hora_inici TIME NOT NULL,
hora_fi TIME NOT NULL,
estat NVARCHAR(20) NOT NULL DEFAULT 'pendent'
CONSTRAINT chk_estat CHECK (estat IN ('pendent','confirmada','entregada','cancel·lada')),
preu_total DECIMAL(8,2),
CONSTRAINT chk_hores CHECK (hora_fi > hora_inici),
CONSTRAINT fk_res_usu FOREIGN KEY (id_usuari)
REFERENCES usuaris(id_usuari) ON DELETE NO ACTION,
CONSTRAINT fk_res_ins FOREIGN KEY (id_instal_lacio)
REFERENCES instal_lacions(id_instal_lacio) ON DELETE NO ACTION
);
GO
-- ── INSTAL·LACIONS ────────────────────────────────────────
SET IDENTITY_INSERT instal_lacions ON;
INSERT INTO instal_lacions (id_instal_lacio, nom, tipus, preu_hora, actiu) VALUES
(1, 'Pista de pàdel A', 'Pàdel', 15.00, 1),
(2, 'Pista de pàdel B', 'Pàdel', 15.00, 1),
(3, 'Pista de tennis', 'Tennis', 20.00, 1),
(4, 'Piscina coberta', 'Natació', 5.00, 1),
(5, 'Sala de fitness', 'Fitness', 8.00, 1),
(6, 'Sala polivalent', 'Polivalent', 30.00, 1),
(7, 'Camp de futbol', 'Futbol', 50.00, 0),
(8, 'Pista de bàsquet', 'Bàsquet', 25.00, 1);
SET IDENTITY_INSERT instal_lacions OFF;
GO
-- ── USUARIS ───────────────────────────────────────────────
SET IDENTITY_INSERT usuaris ON;
INSERT INTO usuaris (id_usuari, dni, nom, cognoms, email, data_alta) VALUES
(1, '12345678A', 'Joan', 'Garcia Puig', 'joan.garcia@example.com', '2024-01-10'),
(2, '87654321B', 'Maria', 'Lopez Serra', 'maria.lopez@example.com', '2024-02-05'),
(3, '11111111C', 'Pere', 'Bosch Vila', 'pere.bosch@example.com', '2024-03-20'),
(4, '22222222D', 'Anna', 'Mas Ribas', 'anna.mas@example.com', '2024-04-15'),
(5, '33333333E', 'Carles', 'Puig Torres', 'carles.puig@example.com', '2024-05-30'),
(6, '44444444F', 'Laura', 'Valls Ferrer', 'laura.valls@example.com', '2024-07-01'),
(7, '55555555G', 'Miquel', 'Soler Costa', 'miquel.soler@example.com', '2024-09-12');
SET IDENTITY_INSERT usuaris OFF;
GO
-- ── RESERVES ──────────────────────────────────────────────
SET IDENTITY_INSERT reserves ON;
INSERT INTO reserves (id_reserva, id_usuari, id_instal_lacio, data_reserva, hora_inici, hora_fi, estat, preu_total) VALUES
(1, 1, 1, '2025-01-05', '10:00', '11:30', 'entregada', 22.50),
(2, 1, 3, '2025-01-12', '09:00', '10:00', 'entregada', 20.00),
(3, 2, 4, '2025-01-15', '11:00', '12:00', 'entregada', 5.00),
(4, 1, 5, '2025-01-20', '08:00', '09:00', 'entregada', 8.00),
(5, 4, 6, '2025-01-08', '09:00', '12:00', 'entregada', 90.00),
(6, 2, 6, '2025-01-22', '14:00', '17:00', 'entregada', 90.00),
(7, 3, 1, '2025-02-03', '16:00', '17:30', 'entregada', 22.50),
(8, 2, 1, '2025-02-10', '10:00', '11:30', 'entregada', 22.50),
(9, 1, 2, '2025-02-15', '12:00', '13:30', 'entregada', 22.50),
(10, 1, 6, '2025-02-12', '09:00', '12:00', 'entregada', 90.00),
(11, 3, 6, '2025-02-26', '14:00', '17:00', 'entregada', 90.00),
(12, 3, 3, '2025-03-02', '10:00', '11:00', 'confirmada', 20.00),
(13, 5, 5, '2025-03-08', '07:00', '08:00', 'confirmada', 8.00),
(14, 5, 6, '2025-03-05', '09:00', '12:00', 'confirmada', 90.00),
(15, 2, 8, '2025-03-12', '15:00', '16:00', 'confirmada', 25.00),
(16, 1, 1, '2025-03-18', '10:00', '11:30', 'pendent', 22.50),
(17, 4, 4, '2025-03-20', '09:00', '10:00', 'pendent', 5.00),
(18, 5, 1, '2025-03-22', '11:00', '12:30', 'cancel·lada', 22.50),
(19, 6, 3, '2025-03-25', '16:00', '17:00', 'pendent', 20.00),
(20, 3, 5, '2025-03-26', '08:00', '09:00', 'pendent', 8.00),
(21, 1, 8, '2025-03-27', '19:00', '20:00', 'pendent', 25.00),
(22, 2, 6, '2025-03-28', '17:00', '20:00', 'pendent', 90.00);
SET IDENTITY_INSERT reserves OFF;
GO
-- ============================================================
-- BD Reserves - Oracle (connectat a XEPDB1 o la PDB de treball)
-- ============================================================
BEGIN EXECUTE IMMEDIATE 'DROP TABLE reserves CASCADE CONSTRAINTS PURGE'; EXCEPTION WHEN OTHERS THEN NULL; END;
/
BEGIN EXECUTE IMMEDIATE 'DROP TABLE instal_lacions CASCADE CONSTRAINTS PURGE'; EXCEPTION WHEN OTHERS THEN NULL; END;
/
BEGIN EXECUTE IMMEDIATE 'DROP TABLE usuaris CASCADE CONSTRAINTS PURGE'; EXCEPTION WHEN OTHERS THEN NULL; END;
/
-- ── CREACIÓ DE TAULES ─────────────────────────────────────
CREATE TABLE instal_lacions (
id_instal_lacio NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
nom VARCHAR2(100) NOT NULL,
tipus VARCHAR2(50) NOT NULL,
preu_hora NUMBER(8,2) NOT NULL CHECK (preu_hora > 0),
actiu NUMBER(1) DEFAULT 1 NOT NULL CHECK (actiu IN (0,1))
);
CREATE TABLE usuaris (
id_usuari NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
dni CHAR(9) NOT NULL UNIQUE,
nom VARCHAR2(100) NOT NULL,
cognoms VARCHAR2(200) NOT NULL,
email VARCHAR2(150) NOT NULL UNIQUE,
data_alta DATE DEFAULT SYSDATE NOT NULL
);
-- A Oracle no existeix el tipus TIME. s'usen DATE per emmagatzemar hora_inici i hora_fi
-- com a timestamps amb data fixa (1970-01-01), o VARCHAR2 per simplificar.
-- Aquí usem VARCHAR2(5) per claredat pedagògica.
CREATE TABLE reserves (
id_reserva NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
id_usuari NUMBER NOT NULL,
id_instal_lacio NUMBER NOT NULL,
data_reserva DATE NOT NULL,
hora_inici VARCHAR2(5) NOT NULL,
hora_fi VARCHAR2(5) NOT NULL,
estat VARCHAR2(20) DEFAULT 'pendent' NOT NULL
CHECK (estat IN ('pendent','confirmada','entregada','cancel·lada')),
preu_total NUMBER(8,2),
CONSTRAINT fk_res_usu FOREIGN KEY (id_usuari)
REFERENCES usuaris(id_usuari) ON DELETE NO ACTION,
CONSTRAINT fk_res_ins FOREIGN KEY (id_instal_lacio)
REFERENCES instal_lacions(id_instal_lacio) ON DELETE NO ACTION
);
-- ── INSTAL·LACIONS ────────────────────────────────────────
INSERT INTO instal_lacions (id_instal_lacio, nom, tipus, preu_hora, actiu) OVERRIDING SYSTEM VALUE VALUES (1, 'Pista de padel A', 'Padel', 15.00, 1);
INSERT INTO instal_lacions (id_instal_lacio, nom, tipus, preu_hora, actiu) OVERRIDING SYSTEM VALUE VALUES (2, 'Pista de padel B', 'Padel', 15.00, 1);
INSERT INTO instal_lacions (id_instal_lacio, nom, tipus, preu_hora, actiu) OVERRIDING SYSTEM VALUE VALUES (3, 'Pista de tennis', 'Tennis', 20.00, 1);
INSERT INTO instal_lacions (id_instal_lacio, nom, tipus, preu_hora, actiu) OVERRIDING SYSTEM VALUE VALUES (4, 'Piscina coberta', 'Natacio', 5.00, 1);
INSERT INTO instal_lacions (id_instal_lacio, nom, tipus, preu_hora, actiu) OVERRIDING SYSTEM VALUE VALUES (5, 'Sala de fitness', 'Fitness', 8.00, 1);
INSERT INTO instal_lacions (id_instal_lacio, nom, tipus, preu_hora, actiu) OVERRIDING SYSTEM VALUE VALUES (6, 'Sala polivalent', 'Polivalent', 30.00, 1);
INSERT INTO instal_lacions (id_instal_lacio, nom, tipus, preu_hora, actiu) OVERRIDING SYSTEM VALUE VALUES (7, 'Camp de futbol', 'Futbol', 50.00, 0);
INSERT INTO instal_lacions (id_instal_lacio, nom, tipus, preu_hora, actiu) OVERRIDING SYSTEM VALUE VALUES (8, 'Pista de basquet', 'Basquet', 25.00, 1);
-- ── USUARIS ───────────────────────────────────────────────
INSERT INTO usuaris (id_usuari, dni, nom, cognoms, email, data_alta) OVERRIDING SYSTEM VALUE VALUES (1, '12345678A', 'Joan', 'Garcia Puig', 'joan.garcia@example.com', DATE '2024-01-10');
INSERT INTO usuaris (id_usuari, dni, nom, cognoms, email, data_alta) OVERRIDING SYSTEM VALUE VALUES (2, '87654321B', 'Maria', 'Lopez Serra', 'maria.lopez@example.com', DATE '2024-02-05');
INSERT INTO usuaris (id_usuari, dni, nom, cognoms, email, data_alta) OVERRIDING SYSTEM VALUE VALUES (3, '11111111C', 'Pere', 'Bosch Vila', 'pere.bosch@example.com', DATE '2024-03-20');
INSERT INTO usuaris (id_usuari, dni, nom, cognoms, email, data_alta) OVERRIDING SYSTEM VALUE VALUES (4, '22222222D', 'Anna', 'Mas Ribas', 'anna.mas@example.com', DATE '2024-04-15');
INSERT INTO usuaris (id_usuari, dni, nom, cognoms, email, data_alta) OVERRIDING SYSTEM VALUE VALUES (5, '33333333E', 'Carles', 'Puig Torres', 'carles.puig@example.com', DATE '2024-05-30');
INSERT INTO usuaris (id_usuari, dni, nom, cognoms, email, data_alta) OVERRIDING SYSTEM VALUE VALUES (6, '44444444F', 'Laura', 'Valls Ferrer', 'laura.valls@example.com', DATE '2024-07-01');
INSERT INTO usuaris (id_usuari, dni, nom, cognoms, email, data_alta) OVERRIDING SYSTEM VALUE VALUES (7, '55555555G', 'Miquel', 'Soler Costa', 'miquel.soler@example.com', DATE '2024-09-12');
-- ── RESERVES ──────────────────────────────────────────────
INSERT INTO reserves (id_reserva, id_usuari, id_instal_lacio, data_reserva, hora_inici, hora_fi, estat, preu_total) OVERRIDING SYSTEM VALUE VALUES (1, 1, 1, DATE '2025-01-05', '10:00', '11:30', 'entregada', 22.50);
INSERT INTO reserves (id_reserva, id_usuari, id_instal_lacio, data_reserva, hora_inici, hora_fi, estat, preu_total) OVERRIDING SYSTEM VALUE VALUES (2, 1, 3, DATE '2025-01-12', '09:00', '10:00', 'entregada', 20.00);
INSERT INTO reserves (id_reserva, id_usuari, id_instal_lacio, data_reserva, hora_inici, hora_fi, estat, preu_total) OVERRIDING SYSTEM VALUE VALUES (3, 2, 4, DATE '2025-01-15', '11:00', '12:00', 'entregada', 5.00);
INSERT INTO reserves (id_reserva, id_usuari, id_instal_lacio, data_reserva, hora_inici, hora_fi, estat, preu_total) OVERRIDING SYSTEM VALUE VALUES (4, 1, 5, DATE '2025-01-20', '08:00', '09:00', 'entregada', 8.00);
INSERT INTO reserves (id_reserva, id_usuari, id_instal_lacio, data_reserva, hora_inici, hora_fi, estat, preu_total) OVERRIDING SYSTEM VALUE VALUES (5, 4, 6, DATE '2025-01-08', '09:00', '12:00', 'entregada', 90.00);
INSERT INTO reserves (id_reserva, id_usuari, id_instal_lacio, data_reserva, hora_inici, hora_fi, estat, preu_total) OVERRIDING SYSTEM VALUE VALUES (6, 2, 6, DATE '2025-01-22', '14:00', '17:00', 'entregada', 90.00);
INSERT INTO reserves (id_reserva, id_usuari, id_instal_lacio, data_reserva, hora_inici, hora_fi, estat, preu_total) OVERRIDING SYSTEM VALUE VALUES (7, 3, 1, DATE '2025-02-03', '16:00', '17:30', 'entregada', 22.50);
INSERT INTO reserves (id_reserva, id_usuari, id_instal_lacio, data_reserva, hora_inici, hora_fi, estat, preu_total) OVERRIDING SYSTEM VALUE VALUES (8, 2, 1, DATE '2025-02-10', '10:00', '11:30', 'entregada', 22.50);
INSERT INTO reserves (id_reserva, id_usuari, id_instal_lacio, data_reserva, hora_inici, hora_fi, estat, preu_total) OVERRIDING SYSTEM VALUE VALUES (9, 1, 2, DATE '2025-02-15', '12:00', '13:30', 'entregada', 22.50);
INSERT INTO reserves (id_reserva, id_usuari, id_instal_lacio, data_reserva, hora_inici, hora_fi, estat, preu_total) OVERRIDING SYSTEM VALUE VALUES (10, 1, 6, DATE '2025-02-12', '09:00', '12:00', 'entregada', 90.00);
INSERT INTO reserves (id_reserva, id_usuari, id_instal_lacio, data_reserva, hora_inici, hora_fi, estat, preu_total) OVERRIDING SYSTEM VALUE VALUES (11, 3, 6, DATE '2025-02-26', '14:00', '17:00', 'entregada', 90.00);
INSERT INTO reserves (id_reserva, id_usuari, id_instal_lacio, data_reserva, hora_inici, hora_fi, estat, preu_total) OVERRIDING SYSTEM VALUE VALUES (12, 3, 3, DATE '2025-03-02', '10:00', '11:00', 'confirmada', 20.00);
INSERT INTO reserves (id_reserva, id_usuari, id_instal_lacio, data_reserva, hora_inici, hora_fi, estat, preu_total) OVERRIDING SYSTEM VALUE VALUES (13, 5, 5, DATE '2025-03-08', '07:00', '08:00', 'confirmada', 8.00);
INSERT INTO reserves (id_reserva, id_usuari, id_instal_lacio, data_reserva, hora_inici, hora_fi, estat, preu_total) OVERRIDING SYSTEM VALUE VALUES (14, 5, 6, DATE '2025-03-05', '09:00', '12:00', 'confirmada', 90.00);
INSERT INTO reserves (id_reserva, id_usuari, id_instal_lacio, data_reserva, hora_inici, hora_fi, estat, preu_total) OVERRIDING SYSTEM VALUE VALUES (15, 2, 8, DATE '2025-03-12', '15:00', '16:00', 'confirmada', 25.00);
INSERT INTO reserves (id_reserva, id_usuari, id_instal_lacio, data_reserva, hora_inici, hora_fi, estat, preu_total) OVERRIDING SYSTEM VALUE VALUES (16, 1, 1, DATE '2025-03-18', '10:00', '11:30', 'pendent', 22.50);
INSERT INTO reserves (id_reserva, id_usuari, id_instal_lacio, data_reserva, hora_inici, hora_fi, estat, preu_total) OVERRIDING SYSTEM VALUE VALUES (17, 4, 4, DATE '2025-03-20', '09:00', '10:00', 'pendent', 5.00);
INSERT INTO reserves (id_reserva, id_usuari, id_instal_lacio, data_reserva, hora_inici, hora_fi, estat, preu_total) OVERRIDING SYSTEM VALUE VALUES (18, 5, 1, DATE '2025-03-22', '11:00', '12:30', 'cancel·lada', 22.50);
INSERT INTO reserves (id_reserva, id_usuari, id_instal_lacio, data_reserva, hora_inici, hora_fi, estat, preu_total) OVERRIDING SYSTEM VALUE VALUES (19, 6, 3, DATE '2025-03-25', '16:00', '17:00', 'pendent', 20.00);
INSERT INTO reserves (id_reserva, id_usuari, id_instal_lacio, data_reserva, hora_inici, hora_fi, estat, preu_total) OVERRIDING SYSTEM VALUE VALUES (20, 3, 5, DATE '2025-03-26', '08:00', '09:00', 'pendent', 8.00);
INSERT INTO reserves (id_reserva, id_usuari, id_instal_lacio, data_reserva, hora_inici, hora_fi, estat, preu_total) OVERRIDING SYSTEM VALUE VALUES (21, 1, 8, DATE '2025-03-27', '19:00', '20:00', 'pendent', 25.00);
INSERT INTO reserves (id_reserva, id_usuari, id_instal_lacio, data_reserva, hora_inici, hora_fi, estat, preu_total) OVERRIDING SYSTEM VALUE VALUES (22, 2, 6, DATE '2025-03-28', '17:00', '20:00', 'pendent', 90.00);
COMMIT;
Verificació ràpida
Heu d'obtenir: 8 · 7 · 22 files respectivament.Oracle: tipus TIME
Oracle no té un tipus TIME natiu. En aquesta BD s'ha simplificat usant VARCHAR2(5) per a hora_inici i hora_fi. En un entorn de producció caldria usar DATE o TIMESTAMP i emmagatzemar data i hora conjuntament.