-- EXO 1 avec Sqlite
DROP TABLE IF EXISTS locaux;
CREATE TABLE locaux(
id CHAR(4) PRIMARY KEY
);
DROP TABLE IF EXISTS niveaux;
CREATE TABLE niveaux(
id CHAR(4) PRIMARY KEY
);
DROP TABLE IF EXISTS examens;
CREATE TABLE examens(
id CHAR(4) PRIMARY KEY,
idn CHAR(4) REFERENCES niveaux(id),
date DATE NOT NULL DEFAULT '2024-06-01',
hd decimal(2,2) NOT NULL DEFAULT '8.5'
-- a little hacky, we could have used the TIME data type.
-- hd TIME NOT NULL DEFAULT '8:30'
);
DROP TABLE IF EXISTS deroule;
CREATE TABLE deroule(
idx CHAR(4) REFERENCES examens(id) ON DELETE CASCADE,
idl CHAR(4) REFERENCES locaux(id) ON DELETE CASCADE,
gr CHAR(4) NOT NULL DEFAULT 'A1'
);
-- 1)
INSERT INTO niveaux VALUES ('L3MI'), ('L3RNSI');
INSERT INTO locaux VALUES ('A13'), ('A14'), ('A16');
INSERT INTO examens (id, idn, date, hd)
VALUES ('DSS', 'L3MI', '2024-06-01', '12.5');
INSERT INTO deroule (idx, idl, gr) VALUES ('DSS', 'A16', 'A1'),
('DSS', 'A16', 'A2'),
('DSS', 'A16', 'A3');
-- PAs compté, juste pour tester les questions ci-après
INSERT INTO examens (id, idn, date, hd)
VALUES ('ABD', 'L3RNSI', '2024-06-01', '12.5');
INSERT INTO deroule (idx, idl, gr) VALUES ('ABD', 'A13', 'A1'),
('ABD', 'A13', 'A2'),
('ABD', 'A14', 'A3'),
('ABD', 'A14', 'A4');
-- 2) Où se trouvent les L3RNSI le 01/06/2024 à 13h
-- La commande .print est pour sqlite
.print "LES L3RNSI se trouvent dans:"
SELECT DISTINCT([Link])
FROM deroule AS D
LEFT JOIN examens AS E ON ([Link] = [Link])
WHERE ([Link] = 'L3RNSI') AND ([Link] = '2024-06-01')
AND ([Link] <= 13) AND (13 <= [Link] + 1.5);
-- 3) Soit utiliser les clé étrangères avec ON DELETE CASCADE soit un trigger:
-- Remarque: Cette syntaxe est bonne pour sqlite. Pour mariadb, utilisez la
-- syntaxe vue en cours.
DROP TRIGGER IF EXISTS del_exam;
CREATE TRIGGER del_exam
AFTER DELETE ON examens
BEGIN
DELETE FROM deroule WHERE (idx = [Link]);
END;;
-- 4) Sauvegarder: (Avec mariadb cette fois-ci)
-- mysqldump -uUser -pPassword examens | gzip > [Link]
-- 5) Automatiser la sauvegarde:
-- Écrire un script shell qui genère un nom de fichier de sauvegarde avec la
-- date actuelle.Définir un cronjob qui exécutera ce script à minuit chaque jour
-- comme suit (sans gestion des erreurs de sortie):
-- 0 0 * * * /home/me/[Link]