BD Treball
Descripció
Tots els exemples d'aquests apunts fan servir la mateixa base de dades de treball: una botiga en línia amb clients, productes, comandes i línies de comanda. Aquesta pàgina conté l'script complet per crear-la i poblar-la amb dades d'exemple, de manera que pugueu reproduir qualsevol consulta o operació dels apunts.
La base de dades té 5 taules amb les relacions següents:
erDiagram
categories {
int id_categoria PK
varchar nom
text descripcio
}
productes {
int id_producte PK
int id_categoria FK
varchar codi_barres
varchar nom
numeric preu
int estoc
boolean actiu
}
clients {
int id_client PK
char dni
varchar nom
varchar cognoms
varchar email
date data_alta
}
comandes {
int id_comanda PK
int id_client FK
timestamp data_com
varchar estat
numeric total
}
linies_comanda {
int id_comanda FK
int num_linia
int id_producte FK
int quantitat
numeric preu_unitari
}
categories ||--o{ productes : "classifica"
clients ||--o{ comandes : "realitza"
comandes ||--|{ linies_comanda : "inclou"
productes ||--o{ linies_comanda : "forma part"
Dades de la BD
categories (6 files)
| id_categoria | nom | descripcio |
|---|---|---|
| 1 | Electrònica | Dispositius electrònics i accessoris |
| 2 | Roba | Roba i complements de moda |
| 3 | Alimentació | Productes alimentaris i begudes |
| 4 | Llar i jardí | Articles per a la llar i el jardí |
| 5 | Esport | Equipament i roba esportiva |
| 6 | Llibres | Llibres i material educatiu |
productes (12 files)
| id | cat | nom | preu | estoc | actiu |
|---|---|---|---|---|---|
| 1 | 1 | Portàtil Dell XPS 13 | 1299.99 | 15 | cert |
| 2 | 1 | Teclat mecànic Logitech | 89.99 | 42 | cert |
| 3 | 1 | Auriculars Sony WH-1000XM5 | 349.99 | 8 | cert |
| 4 | 2 | Samarreta de cotó orgànic | 24.99 | 150 | cert |
| 5 | 2 | Pantalons texans slim | 49.99 | 75 | cert |
| 6 | 3 | Oli d'oliva verge extra (1L) | 8.99 | 200 | cert |
| 7 | 3 | Cafè molido Illy 250g | 12.50 | 85 | cert |
| 8 | 4 | Cadira ergonòmica d'oficina | 299.99 | 20 | cert |
| 9 | 4 | Llum de taula LED | 39.99 | 0 | cert |
| 10 | 5 | Raqueta de pàdel Head | 159.99 | 12 | cert |
| 11 | 5 | Zapatilles running Nike | 119.99 | 30 | cert |
| 12 | 6 | Clean Code: Robert C. Martin | 42.00 | 0 | fals |
clients (8 files)
| id | dni | nom | cognoms | data_alta | |
|---|---|---|---|---|---|
| 1 | 12345678A | Joan | Garcia Puig | joan.garcia@example.com | 2024-01-15 |
| 2 | 87654321B | Maria | Lopez Serra | maria.lopez@example.com | 2024-02-20 |
| 3 | 11111111C | Pere | Bosch Vila | pere.bosch@example.com | 2024-03-10 |
| 4 | 22222222D | Anna | Mas Ribas | anna.mas@example.com | 2024-04-05 |
| 5 | 33333333E | Carles | Puig Torres | carles.puig@example.com | 2024-05-18 |
| 6 | 44444444F | Laura | Valls Ferrer | laura.valls@example.com | 2024-06-22 |
| 7 | 55555555G | Miquel | Soler Costa | miquel.soler@example.com | 2024-09-03 |
| 8 | 66666666H | Núria | Roca Palau | nuria.roca@example.com | 2024-11-14 |
comandes (10 files)
| id | client | data | estat | total |
|---|---|---|---|---|
| 1 | 1 | 2025-01-10 | entregada | 1389.98 |
| 2 | 2 | 2025-01-15 | entregada | 49.99 |
| 3 | 1 | 2025-02-05 | entregada | 349.99 |
| 4 | 3 | 2025-02-20 | enviada | 67.96 |
| 5 | 4 | 2025-03-01 | confirmada | 299.99 |
| 6 | 2 | 2025-03-10 | pendent | 21.49 |
| 7 | 5 | 2025-03-15 | cancel·lada | 119.99 |
| 8 | 6 | 2025-03-20 | pendent | 279.98 |
| 9 | 7 | 2025-03-22 | confirmada | 159.99 |
| 10 | 3 | 2025-03-25 | pendent | 89.99 |
linies_comanda (14 files)
| id_comanda | num_linia | producte | quantitat | preu_unitari |
|---|---|---|---|---|
| 1 | 1 | 1 (Portàtil) | 1 | 1299.99 |
| 1 | 2 | 2 (Teclat) | 1 | 89.99 |
| 2 | 1 | 5 (Pantalons) | 1 | 49.99 |
| 3 | 1 | 3 (Auriculars) | 1 | 349.99 |
| 4 | 1 | 4 (Samarreta) | 2 | 24.99 |
| 4 | 2 | 6 (Oli) | 2 | 8.99 |
| 5 | 1 | 8 (Cadira) | 1 | 299.99 |
| 6 | 1 | 7 (Cafè) | 1 | 12.50 |
| 6 | 2 | 6 (Oli) | 1 | 8.99 |
| 7 | 1 | 11 (Zapatilles) | 1 | 119.99 |
| 8 | 1 | 10 (Raqueta) | 1 | 159.99 |
| 8 | 2 | 11 (Zapatilles) | 1 | 119.99 |
| 9 | 1 | 10 (Raqueta) | 1 | 159.99 |
| 10 | 1 | 2 (Teclat) | 1 | 89.99 |
Script de creació
Seleccioneu el vostre motor i executeu l'script complet. Elimina les taules si ja existeixen, les crea de nou i insereix totes les dades d'exemple.
-- ============================================================
-- BD Treball GBD - PostgreSQL
-- Elimina les taules si existeixen i les recrea amb dades
-- ============================================================
DROP TABLE IF EXISTS linies_comanda CASCADE;
DROP TABLE IF EXISTS comandes CASCADE;
DROP TABLE IF EXISTS productes CASCADE;
DROP TABLE IF EXISTS clients CASCADE;
DROP TABLE IF EXISTS categories CASCADE;
-- ── CREACIÓ DE TAULES ─────────────────────────────────────
CREATE TABLE categories (
id_categoria SERIAL PRIMARY KEY,
nom VARCHAR(100) NOT NULL UNIQUE,
descripcio TEXT
);
CREATE TABLE productes (
id_producte SERIAL PRIMARY KEY,
id_categoria INTEGER NOT NULL,
codi_barres VARCHAR(20) UNIQUE,
nom VARCHAR(200) NOT NULL,
preu NUMERIC(10,2) NOT NULL CHECK (preu > 0),
estoc INTEGER NOT NULL DEFAULT 0 CHECK (estoc >= 0),
actiu BOOLEAN NOT NULL DEFAULT TRUE,
CONSTRAINT fk_prod_cat FOREIGN KEY (id_categoria)
REFERENCES categories(id_categoria) ON DELETE RESTRICT
);
CREATE TABLE clients (
id_client 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 comandes (
id_comanda SERIAL PRIMARY KEY,
id_client INTEGER NOT NULL,
data_com TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
estat VARCHAR(20) NOT NULL DEFAULT 'pendent'
CHECK (estat IN ('pendent','confirmada','enviada','entregada','cancel·lada')),
total NUMERIC(10,2),
CONSTRAINT fk_com_cli FOREIGN KEY (id_client)
REFERENCES clients(id_client) ON DELETE RESTRICT
);
CREATE TABLE linies_comanda (
id_comanda INTEGER NOT NULL,
num_linia SMALLINT NOT NULL,
id_producte INTEGER NOT NULL,
quantitat INTEGER NOT NULL CHECK (quantitat > 0),
preu_unitari NUMERIC(10,2) NOT NULL CHECK (preu_unitari > 0),
CONSTRAINT pk_linies PRIMARY KEY (id_comanda, num_linia),
CONSTRAINT fk_lin_com FOREIGN KEY (id_comanda)
REFERENCES comandes(id_comanda) ON DELETE CASCADE,
CONSTRAINT fk_lin_pro FOREIGN KEY (id_producte)
REFERENCES productes(id_producte) ON DELETE RESTRICT
);
-- ── CATEGORIES ────────────────────────────────────────────
INSERT INTO categories (id_categoria, nom, descripcio) VALUES
(1, 'Electrònica', 'Dispositius electrònics i accessoris'),
(2, 'Roba', 'Roba i complements de moda'),
(3, 'Alimentació', 'Productes alimentaris i begudes'),
(4, 'Llar i jardí', 'Articles per a la llar i el jardí'),
(5, 'Esport', 'Equipament i roba esportiva'),
(6, 'Llibres', 'Llibres i material educatiu');
SELECT setval('categories_id_categoria_seq', 6);
-- ── PRODUCTES ─────────────────────────────────────────────
INSERT INTO productes (id_producte, id_categoria, nom, preu, estoc, actiu) VALUES
(1, 1, 'Portàtil Dell XPS 13', 1299.99, 15, TRUE),
(2, 1, 'Teclat mecànic Logitech', 89.99, 42, TRUE),
(3, 1, 'Auriculars Sony WH-1000XM5', 349.99, 8, TRUE),
(4, 2, 'Samarreta de cotó orgànic', 24.99, 150, TRUE),
(5, 2, 'Pantalons texans slim', 49.99, 75, TRUE),
(6, 3, 'Oli d''oliva verge extra (1L)', 8.99, 200, TRUE),
(7, 3, 'Cafè molido Illy 250g', 12.50, 85, TRUE),
(8, 4, 'Cadira ergonòmica d''oficina', 299.99, 20, TRUE),
(9, 4, 'Llum de taula LED', 39.99, 0, TRUE),
(10, 5, 'Raqueta de pàdel Head', 159.99, 12, TRUE),
(11, 5, 'Zapatilles running Nike', 119.99, 30, TRUE),
(12, 6, 'Clean Code: Robert C. Martin', 42.00, 0, FALSE);
SELECT setval('productes_id_producte_seq', 12);
-- ── CLIENTS ───────────────────────────────────────────────
INSERT INTO clients (id_client, dni, nom, cognoms, email, data_alta) VALUES
(1, '12345678A', 'Joan', 'Garcia Puig', 'joan.garcia@example.com', '2024-01-15'),
(2, '87654321B', 'Maria', 'Lopez Serra', 'maria.lopez@example.com', '2024-02-20'),
(3, '11111111C', 'Pere', 'Bosch Vila', 'pere.bosch@example.com', '2024-03-10'),
(4, '22222222D', 'Anna', 'Mas Ribas', 'anna.mas@example.com', '2024-04-05'),
(5, '33333333E', 'Carles', 'Puig Torres', 'carles.puig@example.com', '2024-05-18'),
(6, '44444444F', 'Laura', 'Valls Ferrer', 'laura.valls@example.com', '2024-06-22'),
(7, '55555555G', 'Miquel', 'Soler Costa', 'miquel.soler@example.com', '2024-09-03'),
(8, '66666666H', 'Núria', 'Roca Palau', 'nuria.roca@example.com', '2024-11-14');
SELECT setval('clients_id_client_seq', 8);
-- ── COMANDES ──────────────────────────────────────────────
INSERT INTO comandes (id_comanda, id_client, data_com, estat, total) VALUES
(1, 1, '2025-01-10 10:30:00', 'entregada', 1389.98),
(2, 2, '2025-01-15 16:45:00', 'entregada', 49.99),
(3, 1, '2025-02-05 09:15:00', 'entregada', 349.99),
(4, 3, '2025-02-20 11:00:00', 'enviada', 67.96),
(5, 4, '2025-03-01 14:20:00', 'confirmada', 299.99),
(6, 2, '2025-03-10 17:05:00', 'pendent', 21.49),
(7, 5, '2025-03-15 10:00:00', 'cancel·lada', 119.99),
(8, 6, '2025-03-20 12:30:00', 'pendent', 279.98),
(9, 7, '2025-03-22 15:00:00', 'confirmada', 159.99),
(10, 3, '2025-03-25 09:45:00', 'pendent', 89.99);
SELECT setval('comandes_id_comanda_seq', 10);
-- ── LINIES DE COMANDA ─────────────────────────────────────
INSERT INTO linies_comanda (id_comanda, num_linia, id_producte, quantitat, preu_unitari) VALUES
(1, 1, 1, 1, 1299.99),
(1, 2, 2, 1, 89.99),
(2, 1, 5, 1, 49.99),
(3, 1, 3, 1, 349.99),
(4, 1, 4, 2, 24.99),
(4, 2, 6, 2, 8.99),
(5, 1, 8, 1, 299.99),
(6, 1, 7, 1, 12.50),
(6, 2, 6, 1, 8.99),
(7, 1, 11, 1, 119.99),
(8, 1, 10, 1, 159.99),
(8, 2, 11, 1, 119.99),
(9, 1, 10, 1, 159.99),
(10, 1, 2, 1, 89.99);
-- ============================================================
-- BD Treball GBD - MySQL / MariaDB
-- ============================================================
DROP DATABASE IF EXISTS gbd_treball;
CREATE DATABASE gbd_treball
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
USE gbd_treball;
-- ── CREACIÓ DE TAULES ─────────────────────────────────────
CREATE TABLE categories (
id_categoria INT AUTO_INCREMENT PRIMARY KEY,
nom VARCHAR(100) NOT NULL UNIQUE,
descripcio TEXT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE productes (
id_producte INT AUTO_INCREMENT PRIMARY KEY,
id_categoria INT NOT NULL,
codi_barres VARCHAR(20) UNIQUE,
nom VARCHAR(200) NOT NULL,
preu DECIMAL(10,2) NOT NULL CHECK (preu > 0),
estoc INT NOT NULL DEFAULT 0 CHECK (estoc >= 0),
actiu TINYINT(1) NOT NULL DEFAULT 1,
CONSTRAINT fk_prod_cat FOREIGN KEY (id_categoria)
REFERENCES categories(id_categoria) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE clients (
id_client 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 comandes (
id_comanda INT AUTO_INCREMENT PRIMARY KEY,
id_client INT NOT NULL,
data_com DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
estat VARCHAR(20) NOT NULL DEFAULT 'pendent',
CONSTRAINT chk_estat CHECK (estat IN ('pendent','confirmada','enviada','entregada','cancel·lada')),
total DECIMAL(10,2),
CONSTRAINT fk_com_cli FOREIGN KEY (id_client)
REFERENCES clients(id_client) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE linies_comanda (
id_comanda INT NOT NULL,
num_linia SMALLINT NOT NULL,
id_producte INT NOT NULL,
quantitat INT NOT NULL CHECK (quantitat > 0),
preu_unitari DECIMAL(10,2) NOT NULL CHECK (preu_unitari > 0),
CONSTRAINT pk_linies PRIMARY KEY (id_comanda, num_linia),
CONSTRAINT fk_lin_com FOREIGN KEY (id_comanda)
REFERENCES comandes(id_comanda) ON DELETE CASCADE,
CONSTRAINT fk_lin_pro FOREIGN KEY (id_producte)
REFERENCES productes(id_producte) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ── CATEGORIES ────────────────────────────────────────────
INSERT INTO categories (id_categoria, nom, descripcio) VALUES
(1, 'Electrònica', 'Dispositius electrònics i accessoris'),
(2, 'Roba', 'Roba i complements de moda'),
(3, 'Alimentació', 'Productes alimentaris i begudes'),
(4, 'Llar i jardí', 'Articles per a la llar i el jardí'),
(5, 'Esport', 'Equipament i roba esportiva'),
(6, 'Llibres', 'Llibres i material educatiu');
-- ── PRODUCTES ─────────────────────────────────────────────
INSERT INTO productes (id_producte, id_categoria, nom, preu, estoc, actiu) VALUES
(1, 1, 'Portàtil Dell XPS 13', 1299.99, 15, 1),
(2, 1, 'Teclat mecànic Logitech', 89.99, 42, 1),
(3, 1, 'Auriculars Sony WH-1000XM5', 349.99, 8, 1),
(4, 2, 'Samarreta de cotó orgànic', 24.99, 150, 1),
(5, 2, 'Pantalons texans slim', 49.99, 75, 1),
(6, 3, 'Oli d''oliva verge extra (1L)', 8.99, 200, 1),
(7, 3, 'Cafè molido Illy 250g', 12.50, 85, 1),
(8, 4, 'Cadira ergonòmica d''oficina', 299.99, 20, 1),
(9, 4, 'Llum de taula LED', 39.99, 0, 1),
(10, 5, 'Raqueta de pàdel Head', 159.99, 12, 1),
(11, 5, 'Zapatilles running Nike', 119.99, 30, 1),
(12, 6, 'Clean Code: Robert C. Martin', 42.00, 0, 0);
-- ── CLIENTS ───────────────────────────────────────────────
INSERT INTO clients (id_client, dni, nom, cognoms, email, data_alta) VALUES
(1, '12345678A', 'Joan', 'Garcia Puig', 'joan.garcia@example.com', '2024-01-15'),
(2, '87654321B', 'Maria', 'Lopez Serra', 'maria.lopez@example.com', '2024-02-20'),
(3, '11111111C', 'Pere', 'Bosch Vila', 'pere.bosch@example.com', '2024-03-10'),
(4, '22222222D', 'Anna', 'Mas Ribas', 'anna.mas@example.com', '2024-04-05'),
(5, '33333333E', 'Carles', 'Puig Torres', 'carles.puig@example.com', '2024-05-18'),
(6, '44444444F', 'Laura', 'Valls Ferrer', 'laura.valls@example.com', '2024-06-22'),
(7, '55555555G', 'Miquel', 'Soler Costa', 'miquel.soler@example.com', '2024-09-03'),
(8, '66666666H', 'Núria', 'Roca Palau', 'nuria.roca@example.com', '2024-11-14');
-- ── COMANDES ──────────────────────────────────────────────
INSERT INTO comandes (id_comanda, id_client, data_com, estat, total) VALUES
(1, 1, '2025-01-10 10:30:00', 'entregada', 1389.98),
(2, 2, '2025-01-15 16:45:00', 'entregada', 49.99),
(3, 1, '2025-02-05 09:15:00', 'entregada', 349.99),
(4, 3, '2025-02-20 11:00:00', 'enviada', 67.96),
(5, 4, '2025-03-01 14:20:00', 'confirmada', 299.99),
(6, 2, '2025-03-10 17:05:00', 'pendent', 21.49),
(7, 5, '2025-03-15 10:00:00', 'cancel·lada', 119.99),
(8, 6, '2025-03-20 12:30:00', 'pendent', 279.98),
(9, 7, '2025-03-22 15:00:00', 'confirmada', 159.99),
(10, 3, '2025-03-25 09:45:00', 'pendent', 89.99);
-- ── LINIES DE COMANDA ─────────────────────────────────────
INSERT INTO linies_comanda (id_comanda, num_linia, id_producte, quantitat, preu_unitari) VALUES
(1, 1, 1, 1, 1299.99),
(1, 2, 2, 1, 89.99),
(2, 1, 5, 1, 49.99),
(3, 1, 3, 1, 349.99),
(4, 1, 4, 2, 24.99),
(4, 2, 6, 2, 8.99),
(5, 1, 8, 1, 299.99),
(6, 1, 7, 1, 12.50),
(6, 2, 6, 1, 8.99),
(7, 1, 11, 1, 119.99),
(8, 1, 10, 1, 159.99),
(8, 2, 11, 1, 119.99),
(9, 1, 10, 1, 159.99),
(10, 1, 2, 1, 89.99);
-- ============================================================
-- BD Treball GBD - SQL Server
-- ============================================================
IF EXISTS (SELECT name FROM sys.databases WHERE name = 'gbd_treball')
DROP DATABASE gbd_treball;
GO
CREATE DATABASE gbd_treball;
GO
USE gbd_treball;
GO
-- ── CREACIÓ DE TAULES ─────────────────────────────────────
CREATE TABLE categories (
id_categoria INT IDENTITY(1,1) PRIMARY KEY,
nom NVARCHAR(100) NOT NULL UNIQUE,
descripcio NVARCHAR(MAX)
);
CREATE TABLE productes (
id_producte INT IDENTITY(1,1) PRIMARY KEY,
id_categoria INT NOT NULL,
codi_barres NVARCHAR(20) UNIQUE,
nom NVARCHAR(200) NOT NULL,
preu DECIMAL(10,2) NOT NULL CONSTRAINT chk_preu CHECK (preu > 0),
estoc INT NOT NULL DEFAULT 0 CONSTRAINT chk_estoc CHECK (estoc >= 0),
actiu BIT NOT NULL DEFAULT 1,
CONSTRAINT fk_prod_cat FOREIGN KEY (id_categoria)
REFERENCES categories(id_categoria) ON DELETE NO ACTION
);
CREATE TABLE clients (
id_client 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 comandes (
id_comanda INT IDENTITY(1,1) PRIMARY KEY,
id_client INT NOT NULL,
data_com DATETIME2 NOT NULL DEFAULT GETDATE(),
estat NVARCHAR(20) NOT NULL DEFAULT 'pendent'
CONSTRAINT chk_estat CHECK (estat IN ('pendent','confirmada','enviada','entregada','cancel·lada')),
total DECIMAL(10,2),
CONSTRAINT fk_com_cli FOREIGN KEY (id_client)
REFERENCES clients(id_client) ON DELETE NO ACTION
);
CREATE TABLE linies_comanda (
id_comanda INT NOT NULL,
num_linia SMALLINT NOT NULL,
id_producte INT NOT NULL,
quantitat INT NOT NULL CONSTRAINT chk_qtt CHECK (quantitat > 0),
preu_unitari DECIMAL(10,2) NOT NULL CONSTRAINT chk_preu_u CHECK (preu_unitari > 0),
CONSTRAINT pk_linies PRIMARY KEY (id_comanda, num_linia),
CONSTRAINT fk_lin_com FOREIGN KEY (id_comanda)
REFERENCES comandes(id_comanda) ON DELETE CASCADE,
CONSTRAINT fk_lin_pro FOREIGN KEY (id_producte)
REFERENCES productes(id_producte) ON DELETE NO ACTION
);
GO
-- ── CATEGORIES ────────────────────────────────────────────
SET IDENTITY_INSERT categories ON;
INSERT INTO categories (id_categoria, nom, descripcio) VALUES
(1, 'Electrònica', 'Dispositius electrònics i accessoris'),
(2, 'Roba', 'Roba i complements de moda'),
(3, 'Alimentació', 'Productes alimentaris i begudes'),
(4, 'Llar i jardí', 'Articles per a la llar i el jardí'),
(5, 'Esport', 'Equipament i roba esportiva'),
(6, 'Llibres', 'Llibres i material educatiu');
SET IDENTITY_INSERT categories OFF;
GO
-- ── PRODUCTES ─────────────────────────────────────────────
SET IDENTITY_INSERT productes ON;
INSERT INTO productes (id_producte, id_categoria, nom, preu, estoc, actiu) VALUES
(1, 1, 'Portàtil Dell XPS 13', 1299.99, 15, 1),
(2, 1, 'Teclat mecànic Logitech', 89.99, 42, 1),
(3, 1, 'Auriculars Sony WH-1000XM5', 349.99, 8, 1),
(4, 2, 'Samarreta de cotó orgànic', 24.99, 150, 1),
(5, 2, 'Pantalons texans slim', 49.99, 75, 1),
(6, 3, 'Oli d''oliva verge extra (1L)', 8.99, 200, 1),
(7, 3, 'Cafè molido Illy 250g', 12.50, 85, 1),
(8, 4, 'Cadira ergonòmica d''oficina', 299.99, 20, 1),
(9, 4, 'Llum de taula LED', 39.99, 0, 1),
(10, 5, 'Raqueta de pàdel Head', 159.99, 12, 1),
(11, 5, 'Zapatilles running Nike', 119.99, 30, 1),
(12, 6, 'Clean Code: Robert C. Martin', 42.00, 0, 0);
SET IDENTITY_INSERT productes OFF;
GO
-- ── CLIENTS ───────────────────────────────────────────────
SET IDENTITY_INSERT clients ON;
INSERT INTO clients (id_client, dni, nom, cognoms, email, data_alta) VALUES
(1, '12345678A', 'Joan', 'Garcia Puig', 'joan.garcia@example.com', '2024-01-15'),
(2, '87654321B', 'Maria', 'Lopez Serra', 'maria.lopez@example.com', '2024-02-20'),
(3, '11111111C', 'Pere', 'Bosch Vila', 'pere.bosch@example.com', '2024-03-10'),
(4, '22222222D', 'Anna', 'Mas Ribas', 'anna.mas@example.com', '2024-04-05'),
(5, '33333333E', 'Carles', 'Puig Torres', 'carles.puig@example.com', '2024-05-18'),
(6, '44444444F', 'Laura', 'Valls Ferrer', 'laura.valls@example.com', '2024-06-22'),
(7, '55555555G', 'Miquel', 'Soler Costa', 'miquel.soler@example.com', '2024-09-03'),
(8, '66666666H', 'Núria', 'Roca Palau', 'nuria.roca@example.com', '2024-11-14');
SET IDENTITY_INSERT clients OFF;
GO
-- ── COMANDES ──────────────────────────────────────────────
SET IDENTITY_INSERT comandes ON;
INSERT INTO comandes (id_comanda, id_client, data_com, estat, total) VALUES
(1, 1, '2025-01-10 10:30:00', 'entregada', 1389.98),
(2, 2, '2025-01-15 16:45:00', 'entregada', 49.99),
(3, 1, '2025-02-05 09:15:00', 'entregada', 349.99),
(4, 3, '2025-02-20 11:00:00', 'enviada', 67.96),
(5, 4, '2025-03-01 14:20:00', 'confirmada', 299.99),
(6, 2, '2025-03-10 17:05:00', 'pendent', 21.49),
(7, 5, '2025-03-15 10:00:00', 'cancel·lada', 119.99),
(8, 6, '2025-03-20 12:30:00', 'pendent', 279.98),
(9, 7, '2025-03-22 15:00:00', 'confirmada', 159.99),
(10, 3, '2025-03-25 09:45:00', 'pendent', 89.99);
SET IDENTITY_INSERT comandes OFF;
GO
-- ── LINIES DE COMANDA ─────────────────────────────────────
INSERT INTO linies_comanda (id_comanda, num_linia, id_producte, quantitat, preu_unitari) VALUES
(1, 1, 1, 1, 1299.99),
(1, 2, 2, 1, 89.99),
(2, 1, 5, 1, 49.99),
(3, 1, 3, 1, 349.99),
(4, 1, 4, 2, 24.99),
(4, 2, 6, 2, 8.99),
(5, 1, 8, 1, 299.99),
(6, 1, 7, 1, 12.50),
(6, 2, 6, 1, 8.99),
(7, 1, 11, 1, 119.99),
(8, 1, 10, 1, 159.99),
(8, 2, 11, 1, 119.99),
(9, 1, 10, 1, 159.99),
(10, 1, 2, 1, 89.99);
GO
-- ============================================================
-- BD Treball GBD - Oracle (connectat a XEPDB1 o la PDB de treball)
-- ============================================================
-- Elimina les taules si existeixen (ignora l'error si no existeixen)
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE linies_comanda CASCADE CONSTRAINTS PURGE'; EXCEPTION WHEN OTHERS THEN NULL;
END;
/
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE comandes CASCADE CONSTRAINTS PURGE'; EXCEPTION WHEN OTHERS THEN NULL;
END;
/
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE productes CASCADE CONSTRAINTS PURGE'; EXCEPTION WHEN OTHERS THEN NULL;
END;
/
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE clients CASCADE CONSTRAINTS PURGE'; EXCEPTION WHEN OTHERS THEN NULL;
END;
/
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE categories CASCADE CONSTRAINTS PURGE'; EXCEPTION WHEN OTHERS THEN NULL;
END;
/
-- ── CREACIÓ DE TAULES ─────────────────────────────────────
CREATE TABLE categories (
id_categoria NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
nom VARCHAR2(100) NOT NULL UNIQUE,
descripcio VARCHAR2(4000)
);
CREATE TABLE productes (
id_producte NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
id_categoria NUMBER NOT NULL,
codi_barres VARCHAR2(20) UNIQUE,
nom VARCHAR2(200) NOT NULL,
preu NUMBER(10,2) NOT NULL CHECK (preu > 0),
estoc NUMBER DEFAULT 0 NOT NULL CHECK (estoc >= 0),
actiu NUMBER(1) DEFAULT 1 NOT NULL CHECK (actiu IN (0,1)),
CONSTRAINT fk_prod_cat FOREIGN KEY (id_categoria)
REFERENCES categories(id_categoria) ON DELETE NO ACTION
);
CREATE TABLE clients (
id_client 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
);
CREATE TABLE comandes (
id_comanda NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
id_client NUMBER NOT NULL,
data_com TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
estat VARCHAR2(20) DEFAULT 'pendent' NOT NULL
CHECK (estat IN ('pendent','confirmada','enviada','entregada','cancel·lada')),
total NUMBER(10,2),
CONSTRAINT fk_com_cli FOREIGN KEY (id_client)
REFERENCES clients(id_client) ON DELETE NO ACTION
);
CREATE TABLE linies_comanda (
id_comanda NUMBER NOT NULL,
num_linia NUMBER(5) NOT NULL,
id_producte NUMBER NOT NULL,
quantitat NUMBER NOT NULL CHECK (quantitat > 0),
preu_unitari NUMBER(10,2) NOT NULL CHECK (preu_unitari > 0),
CONSTRAINT pk_linies PRIMARY KEY (id_comanda, num_linia),
CONSTRAINT fk_lin_com FOREIGN KEY (id_comanda)
REFERENCES comandes(id_comanda) ON DELETE CASCADE,
CONSTRAINT fk_lin_pro FOREIGN KEY (id_producte)
REFERENCES productes(id_producte) ON DELETE NO ACTION
);
-- ── CATEGORIES ────────────────────────────────────────────
-- OVERRIDING SYSTEM VALUE permet inserir IDs explícits amb GENERATED ALWAYS
INSERT INTO categories (id_categoria, nom, descripcio) OVERRIDING SYSTEM VALUE VALUES
(1, 'Electrònica', 'Dispositius electrònics i accessoris');
INSERT INTO categories (id_categoria, nom, descripcio) OVERRIDING SYSTEM VALUE VALUES
(2, 'Roba', 'Roba i complements de moda');
INSERT INTO categories (id_categoria, nom, descripcio) OVERRIDING SYSTEM VALUE VALUES
(3, 'Alimentació', 'Productes alimentaris i begudes');
INSERT INTO categories (id_categoria, nom, descripcio) OVERRIDING SYSTEM VALUE VALUES
(4, 'Llar i jardí', 'Articles per a la llar i el jardí');
INSERT INTO categories (id_categoria, nom, descripcio) OVERRIDING SYSTEM VALUE VALUES
(5, 'Esport', 'Equipament i roba esportiva');
INSERT INTO categories (id_categoria, nom, descripcio) OVERRIDING SYSTEM VALUE VALUES
(6, 'Llibres', 'Llibres i material educatiu');
-- ── PRODUCTES ─────────────────────────────────────────────
INSERT INTO productes (id_producte, id_categoria, nom, preu, estoc, actiu) OVERRIDING SYSTEM VALUE VALUES (1, 1, 'Portàtil Dell XPS 13', 1299.99, 15, 1);
INSERT INTO productes (id_producte, id_categoria, nom, preu, estoc, actiu) OVERRIDING SYSTEM VALUE VALUES (2, 1, 'Teclat mecànic Logitech', 89.99, 42, 1);
INSERT INTO productes (id_producte, id_categoria, nom, preu, estoc, actiu) OVERRIDING SYSTEM VALUE VALUES (3, 1, 'Auriculars Sony WH-1000XM5', 349.99, 8, 1);
INSERT INTO productes (id_producte, id_categoria, nom, preu, estoc, actiu) OVERRIDING SYSTEM VALUE VALUES (4, 2, 'Samarreta de cotó orgànic', 24.99, 150, 1);
INSERT INTO productes (id_producte, id_categoria, nom, preu, estoc, actiu) OVERRIDING SYSTEM VALUE VALUES (5, 2, 'Pantalons texans slim', 49.99, 75, 1);
INSERT INTO productes (id_producte, id_categoria, nom, preu, estoc, actiu) OVERRIDING SYSTEM VALUE VALUES (6, 3, 'Oli d''oliva verge extra (1L)', 8.99, 200, 1);
INSERT INTO productes (id_producte, id_categoria, nom, preu, estoc, actiu) OVERRIDING SYSTEM VALUE VALUES (7, 3, 'Cafè molido Illy 250g', 12.50, 85, 1);
INSERT INTO productes (id_producte, id_categoria, nom, preu, estoc, actiu) OVERRIDING SYSTEM VALUE VALUES (8, 4, 'Cadira ergonòmica d''oficina', 299.99, 20, 1);
INSERT INTO productes (id_producte, id_categoria, nom, preu, estoc, actiu) OVERRIDING SYSTEM VALUE VALUES (9, 4, 'Llum de taula LED', 39.99, 0, 1);
INSERT INTO productes (id_producte, id_categoria, nom, preu, estoc, actiu) OVERRIDING SYSTEM VALUE VALUES (10, 5, 'Raqueta de pàdel Head', 159.99, 12, 1);
INSERT INTO productes (id_producte, id_categoria, nom, preu, estoc, actiu) OVERRIDING SYSTEM VALUE VALUES (11, 5, 'Zapatilles running Nike', 119.99, 30, 1);
INSERT INTO productes (id_producte, id_categoria, nom, preu, estoc, actiu) OVERRIDING SYSTEM VALUE VALUES (12, 6, 'Clean Code: Robert C. Martin', 42.00, 0, 0);
-- ── CLIENTS ───────────────────────────────────────────────
INSERT INTO clients (id_client, dni, nom, cognoms, email, data_alta) OVERRIDING SYSTEM VALUE VALUES (1, '12345678A', 'Joan', 'Garcia Puig', 'joan.garcia@example.com', DATE '2024-01-15');
INSERT INTO clients (id_client, dni, nom, cognoms, email, data_alta) OVERRIDING SYSTEM VALUE VALUES (2, '87654321B', 'Maria', 'Lopez Serra', 'maria.lopez@example.com', DATE '2024-02-20');
INSERT INTO clients (id_client, dni, nom, cognoms, email, data_alta) OVERRIDING SYSTEM VALUE VALUES (3, '11111111C', 'Pere', 'Bosch Vila', 'pere.bosch@example.com', DATE '2024-03-10');
INSERT INTO clients (id_client, dni, nom, cognoms, email, data_alta) OVERRIDING SYSTEM VALUE VALUES (4, '22222222D', 'Anna', 'Mas Ribas', 'anna.mas@example.com', DATE '2024-04-05');
INSERT INTO clients (id_client, dni, nom, cognoms, email, data_alta) OVERRIDING SYSTEM VALUE VALUES (5, '33333333E', 'Carles', 'Puig Torres', 'carles.puig@example.com', DATE '2024-05-18');
INSERT INTO clients (id_client, dni, nom, cognoms, email, data_alta) OVERRIDING SYSTEM VALUE VALUES (6, '44444444F', 'Laura', 'Valls Ferrer', 'laura.valls@example.com', DATE '2024-06-22');
INSERT INTO clients (id_client, dni, nom, cognoms, email, data_alta) OVERRIDING SYSTEM VALUE VALUES (7, '55555555G', 'Miquel', 'Soler Costa', 'miquel.soler@example.com', DATE '2024-09-03');
INSERT INTO clients (id_client, dni, nom, cognoms, email, data_alta) OVERRIDING SYSTEM VALUE VALUES (8, '66666666H', 'Núria', 'Roca Palau', 'nuria.roca@example.com', DATE '2024-11-14');
-- ── COMANDES ──────────────────────────────────────────────
INSERT INTO comandes (id_comanda, id_client, data_com, estat, total) OVERRIDING SYSTEM VALUE VALUES (1, 1, TIMESTAMP '2025-01-10 10:30:00', 'entregada', 1389.98);
INSERT INTO comandes (id_comanda, id_client, data_com, estat, total) OVERRIDING SYSTEM VALUE VALUES (2, 2, TIMESTAMP '2025-01-15 16:45:00', 'entregada', 49.99);
INSERT INTO comandes (id_comanda, id_client, data_com, estat, total) OVERRIDING SYSTEM VALUE VALUES (3, 1, TIMESTAMP '2025-02-05 09:15:00', 'entregada', 349.99);
INSERT INTO comandes (id_comanda, id_client, data_com, estat, total) OVERRIDING SYSTEM VALUE VALUES (4, 3, TIMESTAMP '2025-02-20 11:00:00', 'enviada', 67.96);
INSERT INTO comandes (id_comanda, id_client, data_com, estat, total) OVERRIDING SYSTEM VALUE VALUES (5, 4, TIMESTAMP '2025-03-01 14:20:00', 'confirmada', 299.99);
INSERT INTO comandes (id_comanda, id_client, data_com, estat, total) OVERRIDING SYSTEM VALUE VALUES (6, 2, TIMESTAMP '2025-03-10 17:05:00', 'pendent', 21.49);
INSERT INTO comandes (id_comanda, id_client, data_com, estat, total) OVERRIDING SYSTEM VALUE VALUES (7, 5, TIMESTAMP '2025-03-15 10:00:00', 'cancel·lada', 119.99);
INSERT INTO comandes (id_comanda, id_client, data_com, estat, total) OVERRIDING SYSTEM VALUE VALUES (8, 6, TIMESTAMP '2025-03-20 12:30:00', 'pendent', 279.98);
INSERT INTO comandes (id_comanda, id_client, data_com, estat, total) OVERRIDING SYSTEM VALUE VALUES (9, 7, TIMESTAMP '2025-03-22 15:00:00', 'confirmada', 159.99);
INSERT INTO comandes (id_comanda, id_client, data_com, estat, total) OVERRIDING SYSTEM VALUE VALUES (10, 3, TIMESTAMP '2025-03-25 09:45:00', 'pendent', 89.99);
-- ── LINIES DE COMANDA ─────────────────────────────────────
INSERT INTO linies_comanda VALUES (1, 1, 1, 1, 1299.99);
INSERT INTO linies_comanda VALUES (1, 2, 2, 1, 89.99);
INSERT INTO linies_comanda VALUES (2, 1, 5, 1, 49.99);
INSERT INTO linies_comanda VALUES (3, 1, 3, 1, 349.99);
INSERT INTO linies_comanda VALUES (4, 1, 4, 2, 24.99);
INSERT INTO linies_comanda VALUES (4, 2, 6, 2, 8.99);
INSERT INTO linies_comanda VALUES (5, 1, 8, 1, 299.99);
INSERT INTO linies_comanda VALUES (6, 1, 7, 1, 12.50);
INSERT INTO linies_comanda VALUES (6, 2, 6, 1, 8.99);
INSERT INTO linies_comanda VALUES (7, 1, 11, 1, 119.99);
INSERT INTO linies_comanda VALUES (8, 1, 10, 1, 159.99);
INSERT INTO linies_comanda VALUES (8, 2, 11, 1, 119.99);
INSERT INTO linies_comanda VALUES (9, 1, 10, 1, 159.99);
INSERT INTO linies_comanda VALUES (10, 1, 2, 1, 89.99);
COMMIT;
Verificació ràpida
Un cop executat l'script, podeu verificar que tot ha anat bé amb:
Heu d'obtenir: 6 · 12 · 8 · 10 · 14 files respectivament.Reinici de la BD
Si heu modificat les dades fent proves i voleu tornar a l'estat original, torneu a executar l'script complet des del principi. L'script elimina i recrea totes les taules, de manera que es perden totes les dades existents.