-- Base de données : exercice de normalisation - locations de voitures
-- Niveau : 4e TTInfo
-- Tables : client, voiture, location

DROP TABLE IF EXISTS location;
DROP TABLE IF EXISTS voiture;
DROP TABLE IF EXISTS client;

CREATE TABLE client (
    id_client INT AUTO_INCREMENT PRIMARY KEY,
    nom VARCHAR(50) NOT NULL,
    prenom VARCHAR(50) NOT NULL,
    telephone VARCHAR(20) NOT NULL,
    CONSTRAINT uq_client_telephone UNIQUE (telephone)
);

CREATE TABLE voiture (
    id_voiture INT AUTO_INCREMENT PRIMARY KEY,
    modele VARCHAR(50) NOT NULL,
    marque VARCHAR(50) NOT NULL,
    prix_jour DECIMAL(6,2) NOT NULL,
    CONSTRAINT uq_voiture_modele_marque UNIQUE (modele, marque)
);

CREATE TABLE location (
    id_location VARCHAR(5) PRIMARY KEY,
    id_client INT NOT NULL,
    id_voiture INT NOT NULL,
    date_location DATE NOT NULL,
    date_retour DATE NOT NULL,
    statut ENUM('terminée', 'en cours', 'réservée', 'annulée') NOT NULL,
    CONSTRAINT fk_location_client FOREIGN KEY (id_client) REFERENCES client(id_client),
    CONSTRAINT fk_location_voiture FOREIGN KEY (id_voiture) REFERENCES voiture(id_voiture),
    CONSTRAINT chk_dates_location CHECK (date_retour >= date_location)
);

-- Données de référence : clients
INSERT INTO client (nom, prenom, telephone) VALUES
('Dupont', 'Marie', '0471 12 34 56'),
('Martin', 'Lucas', '0485 22 11 00'),
('Lambert', 'Sophie', '0492 44 55 66'),
('Dubois', 'Nora', '0478 88 77 66'),
('Peeters', 'Hugo', '0499 10 20 30'),
('Leroy', 'Emma', '0472 15 26 37'),
('Moreau', 'Noah', '0486 33 44 55'),
('Simon', 'Lina', '0491 66 77 88'),
('Laurent', 'Adam', '0475 90 12 34'),
('Bernard', 'Chloe', '0487 21 43 65'),
('Rousseau', 'Jules', '0493 12 45 78'),
('Petit', 'Alice', '0476 98 76 54'),
('Leclercq', 'Tom', '0488 11 22 33'),
('Jacobs', 'Ines', '0495 44 33 22'),
('Willems', 'Louis', '0479 55 66 77'),
('Michel', 'Sarah', '0484 12 98 76'),
('Gerard', 'Nathan', '0496 10 20 40'),
('Fontaine', 'Lea', '0470 22 33 44'),
('Masson', 'Ethan', '0489 77 88 99'),
('Mercier', 'Zoé', '0497 01 23 45');

-- Données de référence : voitures
INSERT INTO voiture (modele, marque, prix_jour) VALUES
('Clio', 'Renault', 45.00),
('208', 'Peugeot', 50.00),
('Golf', 'VW', 60.00),
('Corsa', 'Opel', 42.00),
('Fiesta', 'Ford', 43.00),
('Polo', 'VW', 52.00),
('Yaris', 'Toyota', 48.00),
('A3', 'Audi', 75.00),
('Megane', 'Renault', 58.00),
('Civic', 'Honda', 62.00),
('500', 'Fiat', 40.00),
('Octavia', 'Skoda', 55.00);

-- Données transactionnelles : 200 locations
INSERT INTO location (id_location, id_client, id_voiture, date_location, date_retour, statut) VALUES
('L001', 1, 1, '2026-05-01', '2026-05-03', 'terminée'),
('L002', 2, 2, '2026-05-02', '2026-05-05', 'en cours'),
('L003', 1, 1, '2026-05-10', '2026-05-12', 'réservée'),
('L004', 3, 3, '2026-05-03', '2026-05-06', 'terminée'),
('L005', 2, 2, '2026-05-12', '2026-05-14', 'réservée'),
('L006', 4, 1, '2026-05-04', '2026-05-06', 'terminée'),
('L007', 5, 3, '2026-05-07', '2026-05-09', 'annulée'),
('L008', 1, 2, '2026-05-15', '2026-05-18', 'en cours'),
('L009', 3, 1, '2026-05-20', '2026-05-22', 'réservée'),
('L010', 4, 3, '2026-05-21', '2026-05-25', 'en cours'),
('L011', 4, 1, '2026-07-10', '2026-07-12', 'terminée'),
('L012', 4, 11, '2026-09-17', '2026-09-18', 'en cours'),
('L013', 2, 1, '2026-05-24', '2026-05-26', 'terminée'),
('L014', 20, 1, '2026-09-21', '2026-09-23', 'réservée'),
('L015', 18, 7, '2026-06-26', '2026-06-30', 'en cours'),
('L016', 1, 3, '2026-10-26', '2026-10-30', 'terminée'),
('L017', 5, 4, '2026-07-26', '2026-07-27', 'terminée'),
('L018', 4, 6, '2026-07-28', '2026-08-02', 'terminée'),
('L019', 2, 12, '2026-08-26', '2026-08-31', 'terminée'),
('L020', 13, 2, '2026-09-19', '2026-09-22', 'réservée'),
('L021', 20, 6, '2026-09-25', '2026-09-27', 'réservée'),
('L022', 2, 11, '2026-06-28', '2026-07-05', 'terminée'),
('L023', 3, 4, '2026-05-26', '2026-05-30', 'terminée'),
('L024', 12, 3, '2026-08-03', '2026-08-06', 'terminée'),
('L025', 9, 12, '2026-10-22', '2026-10-28', 'terminée'),
('L026', 6, 9, '2026-07-02', '2026-07-04', 'en cours'),
('L027', 9, 11, '2026-10-24', '2026-10-29', 'terminée'),
('L028', 11, 1, '2026-06-28', '2026-07-05', 'terminée'),
('L029', 11, 7, '2026-07-08', '2026-07-09', 'terminée'),
('L030', 19, 12, '2026-07-20', '2026-07-22', 'réservée'),
('L031', 13, 11, '2026-08-26', '2026-08-28', 'terminée'),
('L032', 8, 12, '2026-09-21', '2026-09-26', 'terminée'),
('L033', 19, 7, '2026-09-27', '2026-10-01', 'terminée'),
('L034', 5, 9, '2026-09-04', '2026-09-05', 'réservée'),
('L035', 4, 3, '2026-10-08', '2026-10-10', 'réservée'),
('L036', 14, 10, '2026-05-17', '2026-05-21', 'terminée'),
('L037', 15, 9, '2026-07-04', '2026-07-09', 'réservée'),
('L038', 1, 11, '2026-05-30', '2026-06-05', 'réservée'),
('L039', 9, 11, '2026-07-27', '2026-07-28', 'terminée'),
('L040', 6, 8, '2026-05-01', '2026-05-07', 'réservée'),
('L041', 9, 9, '2026-06-15', '2026-06-20', 'réservée'),
('L042', 10, 11, '2026-09-07', '2026-09-12', 'terminée'),
('L043', 12, 3, '2026-09-16', '2026-09-23', 'réservée'),
('L044', 1, 10, '2026-07-22', '2026-07-26', 'terminée'),
('L045', 12, 5, '2026-07-01', '2026-07-02', 'terminée'),
('L046', 19, 2, '2026-05-22', '2026-05-28', 'en cours'),
('L047', 3, 9, '2026-06-02', '2026-06-04', 'réservée'),
('L048', 18, 3, '2026-07-07', '2026-07-12', 'réservée'),
('L049', 14, 4, '2026-09-16', '2026-09-23', 'réservée'),
('L050', 7, 12, '2026-07-19', '2026-07-23', 'annulée'),
('L051', 12, 8, '2026-09-10', '2026-09-14', 'terminée'),
('L052', 8, 2, '2026-07-26', '2026-07-27', 'en cours'),
('L053', 8, 10, '2026-06-26', '2026-06-27', 'terminée'),
('L054', 2, 4, '2026-05-18', '2026-05-19', 'réservée'),
('L055', 3, 9, '2026-06-30', '2026-07-03', 'réservée'),
('L056', 7, 9, '2026-06-03', '2026-06-09', 'annulée'),
('L057', 19, 10, '2026-08-30', '2026-09-01', 'réservée'),
('L058', 14, 4, '2026-05-25', '2026-05-26', 'réservée'),
('L059', 12, 7, '2026-08-14', '2026-08-18', 'réservée'),
('L060', 2, 11, '2026-10-15', '2026-10-21', 'terminée'),
('L061', 13, 12, '2026-07-26', '2026-08-02', 'réservée'),
('L062', 8, 4, '2026-06-18', '2026-06-23', 'terminée'),
('L063', 14, 3, '2026-07-11', '2026-07-15', 'terminée'),
('L064', 3, 8, '2026-09-18', '2026-09-19', 'terminée'),
('L065', 18, 1, '2026-05-24', '2026-05-31', 'réservée'),
('L066', 6, 7, '2026-09-02', '2026-09-06', 'terminée'),
('L067', 13, 1, '2026-06-12', '2026-06-16', 'terminée'),
('L068', 13, 5, '2026-08-25', '2026-08-28', 'terminée'),
('L069', 18, 11, '2026-09-02', '2026-09-04', 'terminée'),
('L070', 7, 1, '2026-09-26', '2026-10-02', 'en cours'),
('L071', 11, 1, '2026-05-13', '2026-05-18', 'en cours'),
('L072', 17, 3, '2026-05-15', '2026-05-20', 'terminée'),
('L073', 6, 2, '2026-09-30', '2026-10-01', 'réservée'),
('L074', 8, 7, '2026-05-31', '2026-06-05', 'terminée'),
('L075', 20, 1, '2026-10-06', '2026-10-07', 'terminée'),
('L076', 19, 10, '2026-09-11', '2026-09-14', 'annulée'),
('L077', 7, 11, '2026-07-20', '2026-07-22', 'terminée'),
('L078', 5, 11, '2026-10-13', '2026-10-16', 'en cours'),
('L079', 3, 1, '2026-08-26', '2026-08-31', 'annulée'),
('L080', 4, 2, '2026-09-15', '2026-09-17', 'en cours'),
('L081', 5, 6, '2026-05-18', '2026-05-20', 'terminée'),
('L082', 6, 8, '2026-09-17', '2026-09-23', 'terminée'),
('L083', 17, 1, '2026-10-18', '2026-10-25', 'en cours'),
('L084', 4, 3, '2026-07-07', '2026-07-08', 'réservée'),
('L085', 18, 3, '2026-07-09', '2026-07-12', 'en cours'),
('L086', 11, 4, '2026-10-23', '2026-10-29', 'réservée'),
('L087', 17, 8, '2026-07-04', '2026-07-11', 'terminée'),
('L088', 14, 5, '2026-05-12', '2026-05-13', 'terminée'),
('L089', 5, 11, '2026-07-07', '2026-07-09', 'réservée'),
('L090', 18, 12, '2026-08-18', '2026-08-23', 'terminée'),
('L091', 3, 12, '2026-06-08', '2026-06-13', 'terminée'),
('L092', 12, 10, '2026-09-19', '2026-09-21', 'terminée'),
('L093', 2, 5, '2026-08-02', '2026-08-09', 'annulée'),
('L094', 2, 6, '2026-06-23', '2026-06-29', 'terminée'),
('L095', 4, 6, '2026-09-21', '2026-09-28', 'terminée'),
('L096', 20, 12, '2026-06-09', '2026-06-11', 'réservée'),
('L097', 6, 7, '2026-05-07', '2026-05-09', 'réservée'),
('L098', 11, 7, '2026-10-19', '2026-10-26', 'réservée'),
('L099', 8, 5, '2026-06-10', '2026-06-17', 'réservée'),
('L100', 13, 1, '2026-08-29', '2026-08-31', 'terminée'),
('L101', 15, 6, '2026-07-18', '2026-07-25', 'réservée'),
('L102', 8, 4, '2026-05-07', '2026-05-13', 'terminée'),
('L103', 11, 5, '2026-05-18', '2026-05-25', 'terminée'),
('L104', 17, 7, '2026-10-21', '2026-10-28', 'en cours'),
('L105', 1, 2, '2026-07-06', '2026-07-08', 'en cours'),
('L106', 9, 1, '2026-05-28', '2026-06-02', 'terminée'),
('L107', 11, 7, '2026-10-03', '2026-10-08', 'terminée'),
('L108', 19, 4, '2026-07-05', '2026-07-06', 'réservée'),
('L109', 1, 9, '2026-09-15', '2026-09-21', 'réservée'),
('L110', 7, 6, '2026-08-19', '2026-08-20', 'annulée'),
('L111', 11, 10, '2026-07-20', '2026-07-26', 'réservée'),
('L112', 10, 9, '2026-07-19', '2026-07-25', 'terminée'),
('L113', 13, 12, '2026-07-15', '2026-07-20', 'terminée'),
('L114', 14, 11, '2026-08-06', '2026-08-12', 'réservée'),
('L115', 6, 10, '2026-09-23', '2026-09-26', 'terminée'),
('L116', 1, 5, '2026-07-13', '2026-07-15', 'terminée'),
('L117', 19, 10, '2026-10-15', '2026-10-18', 'en cours'),
('L118', 15, 11, '2026-06-24', '2026-06-29', 'en cours'),
('L119', 6, 11, '2026-05-22', '2026-05-25', 'en cours'),
('L120', 20, 6, '2026-05-24', '2026-05-31', 'annulée'),
('L121', 8, 11, '2026-07-19', '2026-07-21', 'réservée'),
('L122', 5, 1, '2026-05-12', '2026-05-14', 'annulée'),
('L123', 20, 2, '2026-08-25', '2026-08-29', 'réservée'),
('L124', 19, 4, '2026-10-26', '2026-10-30', 'en cours'),
('L125', 8, 3, '2026-10-15', '2026-10-21', 'terminée'),
('L126', 4, 7, '2026-06-26', '2026-06-28', 'réservée'),
('L127', 17, 8, '2026-05-13', '2026-05-18', 'terminée'),
('L128', 4, 8, '2026-06-04', '2026-06-11', 'en cours'),
('L129', 17, 9, '2026-09-30', '2026-10-03', 'annulée'),
('L130', 15, 10, '2026-09-07', '2026-09-11', 'réservée'),
('L131', 18, 8, '2026-06-10', '2026-06-16', 'réservée'),
('L132', 15, 5, '2026-07-03', '2026-07-10', 'en cours'),
('L133', 17, 8, '2026-10-08', '2026-10-10', 'terminée'),
('L134', 3, 12, '2026-07-13', '2026-07-15', 'terminée'),
('L135', 11, 9, '2026-05-21', '2026-05-23', 'terminée'),
('L136', 13, 12, '2026-06-09', '2026-06-15', 'terminée'),
('L137', 14, 7, '2026-07-24', '2026-07-29', 'en cours'),
('L138', 2, 4, '2026-08-16', '2026-08-20', 'réservée'),
('L139', 19, 12, '2026-05-06', '2026-05-13', 'réservée'),
('L140', 19, 7, '2026-08-31', '2026-09-01', 'annulée'),
('L141', 10, 7, '2026-08-16', '2026-08-21', 'réservée'),
('L142', 18, 10, '2026-06-26', '2026-06-30', 'terminée'),
('L143', 14, 8, '2026-05-08', '2026-05-12', 'terminée'),
('L144', 13, 12, '2026-06-12', '2026-06-19', 'en cours'),
('L145', 5, 10, '2026-09-14', '2026-09-15', 'réservée'),
('L146', 19, 10, '2026-10-17', '2026-10-18', 'terminée'),
('L147', 14, 3, '2026-08-27', '2026-08-29', 'terminée'),
('L148', 13, 6, '2026-06-24', '2026-06-28', 'terminée'),
('L149', 13, 5, '2026-08-16', '2026-08-19', 'réservée'),
('L150', 16, 1, '2026-09-16', '2026-09-17', 'annulée'),
('L151', 12, 4, '2026-10-14', '2026-10-15', 'réservée'),
('L152', 2, 1, '2026-07-03', '2026-07-05', 'réservée'),
('L153', 20, 3, '2026-07-01', '2026-07-03', 'en cours'),
('L154', 4, 10, '2026-06-25', '2026-06-29', 'réservée'),
('L155', 12, 3, '2026-10-03', '2026-10-08', 'annulée'),
('L156', 4, 3, '2026-07-19', '2026-07-20', 'en cours'),
('L157', 10, 10, '2026-10-21', '2026-10-25', 'terminée'),
('L158', 7, 2, '2026-09-29', '2026-10-05', 'réservée'),
('L159', 8, 2, '2026-10-26', '2026-11-02', 'terminée'),
('L160', 20, 2, '2026-09-22', '2026-09-29', 'terminée'),
('L161', 18, 7, '2026-10-17', '2026-10-20', 'terminée'),
('L162', 11, 1, '2026-08-16', '2026-08-23', 'en cours'),
('L163', 14, 6, '2026-10-10', '2026-10-17', 'en cours'),
('L164', 5, 7, '2026-06-15', '2026-06-21', 'en cours'),
('L165', 9, 10, '2026-09-15', '2026-09-22', 'en cours'),
('L166', 14, 12, '2026-09-29', '2026-10-02', 'terminée'),
('L167', 8, 2, '2026-07-11', '2026-07-15', 'terminée'),
('L168', 15, 10, '2026-10-04', '2026-10-10', 'terminée'),
('L169', 1, 8, '2026-07-23', '2026-07-25', 'en cours'),
('L170', 12, 5, '2026-07-27', '2026-07-30', 'réservée'),
('L171', 9, 9, '2026-05-03', '2026-05-08', 'annulée'),
('L172', 3, 4, '2026-08-13', '2026-08-17', 'en cours'),
('L173', 8, 12, '2026-08-30', '2026-09-05', 'réservée'),
('L174', 15, 1, '2026-05-24', '2026-05-27', 'terminée'),
('L175', 8, 5, '2026-10-17', '2026-10-22', 'terminée'),
('L176', 18, 9, '2026-07-28', '2026-08-01', 'annulée'),
('L177', 18, 6, '2026-07-30', '2026-08-05', 'en cours'),
('L178', 10, 5, '2026-06-29', '2026-06-30', 'réservée'),
('L179', 11, 2, '2026-09-15', '2026-09-22', 'réservée'),
('L180', 7, 4, '2026-09-01', '2026-09-04', 'réservée'),
('L181', 17, 10, '2026-07-12', '2026-07-13', 'réservée'),
('L182', 10, 4, '2026-08-01', '2026-08-03', 'terminée'),
('L183', 18, 3, '2026-07-10', '2026-07-11', 'annulée'),
('L184', 18, 5, '2026-10-26', '2026-10-28', 'en cours'),
('L185', 16, 2, '2026-05-04', '2026-05-09', 'terminée'),
('L186', 16, 8, '2026-07-27', '2026-07-29', 'annulée'),
('L187', 9, 8, '2026-05-30', '2026-06-06', 'terminée'),
('L188', 16, 2, '2026-09-25', '2026-10-01', 'réservée'),
('L189', 5, 3, '2026-09-22', '2026-09-25', 'terminée'),
('L190', 8, 2, '2026-09-20', '2026-09-27', 'terminée'),
('L191', 20, 10, '2026-06-27', '2026-07-04', 'en cours'),
('L192', 15, 8, '2026-07-16', '2026-07-23', 'en cours'),
('L193', 14, 5, '2026-09-23', '2026-09-28', 'terminée'),
('L194', 4, 4, '2026-10-08', '2026-10-10', 'terminée'),
('L195', 3, 3, '2026-07-01', '2026-07-03', 'en cours'),
('L196', 6, 1, '2026-08-13', '2026-08-17', 'réservée'),
('L197', 16, 5, '2026-05-09', '2026-05-11', 'terminée'),
('L198', 10, 12, '2026-08-25', '2026-08-26', 'réservée'),
('L199', 9, 11, '2026-09-28', '2026-10-04', 'réservée'),
('L200', 7, 7, '2026-05-30', '2026-06-04', 'terminée');
