Base de données
MANIPULER SQL AVEC PHPMYADMIN
En ligne
BD
- https://www.phpmyadmin.net/try/
on peut exporter la BD pour l’importer plus tard et continuer l’exercice
SQL
Sur windows
Pour installer phpMyAdmin sur Windows, vous pouvez suivre les étapes suivantes. phpMyAdmin nécessite un serveur Web (comme Apache) et une base de données MySQL ou MariaDB. Le plus simple est d'utiliser un package comme XAMPP qui inclut Apache, MySQL et PHP, facilitant l'installation.
Étapes pour installer phpMyAdmin via XAMPP
- Télécharger XAMPP :
- Allez sur le site officiel de XAMPP.
- Téléchargez le fichier d'installation pour Windows et installez-le en suivant les instructions.
- Pendant l'installation, assurez-vous de sélectionner Apache, MySQL et phpMyAdmin.
- Lancer XAMPP :
- Ouvrez le Panneau de contrôle XAMPP et démarrez les services Apache et MySQL en cliquant sur "Start" à côté de chaque module.
- Accéder à phpMyAdmin :
- Une fois Apache et MySQL en cours d'exécution, ouvrez un navigateur et entrez l'URL suivante :
http://localhost/phpmyadmin
- phpMyAdmin devrait s'ouvrir et afficher une interface pour gérer vos bases de données MySQL.
- Une fois Apache et MySQL en cours d'exécution, ouvrez un navigateur et entrez l'URL suivante :
Configuration de phpMyAdmin (optionnel)
- Si vous souhaitez définir un mot de passe pour l'utilisateur root (ou pour d'autres utilisateurs) :
- Dans phpMyAdmin, allez dans l'onglet Utilisateurs et modifiez le mot de passe de l'utilisateur
root
.
- Une fois cela fait, mettez à jour le fichier de configuration de phpMyAdmin pour que la connexion fonctionne correctement :
- Ouvrez le fichier
config.inc.php
de phpMyAdmin (généralement situé dans le dossierC:\xampp\phpMyAdmin
).
- Recherchez la ligne avec
$cfg['Servers'][$i]['password']
et ajoutez le mot de passe que vous avez défini.
- Ouvrez le fichier
- Dans phpMyAdmin, allez dans l'onglet Utilisateurs et modifiez le mot de passe de l'utilisateur
Vérifier l’installation
- Une fois l'installation terminée, allez à nouveau sur
http://localhost/phpmyadmin
.
- Connectez-vous avec les identifiants que vous avez configurés (par défaut,
root
sans mot de passe, sauf si vous l'avez changé).
phpMyAdmin est maintenant configuré et prêt à l'emploi sur votre système Windows. Vous pouvez utiliser l'interface pour créer, gérer, et administrer vos bases de données MySQL.
Règlementation
C’est quoi les données ⇒ informations
- Donner des exemples
- Les données personnelles
RGPD & CNIL
- Protection contre la vente de données
- où sont stockées les informations ⇒ obligation de tracabilité
PCIDSS
- locaux protégé par l’identification par empreinte
- pas de quoi écrire à disposition
INTRODUCTION
A quoi cela sert
- A stocker des informations
- A les retrouver facilement
SQL vs NO-SQL
SQL / relationnelle
Elles sont organisées en tables avec des colonnes et des lignes, similaires à un tableau Excel. Les données sont stockées sous une forme structurée avec des schémas prédéfinis. Par exemple,
- MySQL,
- PostgreSQL
- Oracle
NoSQL
Elles n’utilisent pas de tables structurées et sont plus flexibles. Il existe plusieurs types de bases de données NoSQL :
- Clé-valeur (ex. Redis)
- Colonnes (ex. Cassandra)
- Documents (ex. MongoDB)
- Graphes (ex. Neo4j)
SQL | NOSQL |
---|---|
Performant pour les transactions complexes et les applications nécessitant un haut degré de cohérence | permet de gérer des volumes massifs de données en répartissant la charge sur plusieurs serveurs |
ACID (Atomicité, Cohérence, Isolation, Durabilité), garantissant des transactions fiables et consistantes | BASE (Basic Availability, Soft-state, Eventually Consistent). La cohérence est éventuelle, c’est-à-dire que toutes les copies des données finissent par être synchronisées, ce qui est utile pour les systèmes distribués. |
Utilisées pour des systèmes financiers, ERP, applications nécessitant des relations fortes et un haut niveau de cohérence | Adaptées pour les applications web et mobiles, l’analyse de données en temps réel, les réseaux sociaux, et toute application nécessitant une gestion flexible de grandes quantités de données. |
syntaxe de requête SQL | syntaxe de requête spécifique |
Softskills nécessaires pour la phase de conception d’une BD
• une connaissance méthodologique,
• une certaine capacité d'abstraction,
• de l'imagination,
• la faculté de comprendre la réalité d'autrui.
CRÉER LA BASE DE DONNÉES DE SPOTIFY
Règles de gestion
- Un utilisateur peut créer plusieurs playlists, et une playlist est créé par 1 et 1 seul utilisateur : Relation un-à-plusieurs entre
Users
etPlaylists
.
- Une playlist peut contenir plusieurs chansons et une chanson peut appartenir à plusieurs playlists : Relation plusieurs-à-plusieurs entre
Playlists
etSongs
, gérée par la table intermédiairePlaylist_Songs
.
- Un artiste peut avoir plusieurs albums : Relation un-à-plusieurs entre
Artists
etAlbums
.
- Un album peut contenir plusieurs chansons, et une chanson appartient à un seul album : Relation un-à-plusieurs entre
Albums
etSongs
.
- Un utilisateur peut écouter plusieurs chansons : Relation un-à-plusieurs entre
Users
etListening_History
.
- Faire un classement des musiques les plus écoutés
- Les playlist peuvent se partager
- Proposer un minuteur pour stopper le player (en cas d’endormissement par ex)
- Proposer un contrôle parental pour les moins de 16 ans
- Tarifs
- abonnement mensuel 6,99€
- abonnement annuel 69,99€
Dictionnaire des données
- SON : titre, durée, brevet (c’est la chanson qui se nomme “son” en langage de la génération Alpha)
- ALBUM : titre, type
- ARTISTE : nom
- CRÉATEUR DE PODCAST : nom
- PODCAT : titre
- CONSO : nom, CB, e-mail, tel (c’est l’utilisateur qui se nomme “conso” en langage de la génération Alpha)
- Playlist : nom
Le modèle MCD
Le MCD (modèle conceptuel des données) contient des entités et leurs propriétés ainsi que des relations caractérisée entre les entités.
MCD POUR MOCODO
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% BOSSFY %
% %
% Nous allons concevoir l’application Boosfy, basé sur le modèle de Spotify %
% entité, association, attribut, identifiant, cardinalité, patte, rôle. %
% %
% Julie Chaumard pour Parisweb.art %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ÉCOUTER, 1N CONSO, 0N SON: qté écouté [INTEGER]
CONSO: num. conso [VARCHAR(8)], nom conso [VARCHAR(255)], CB conso [], e-mail conso [], telephone conso [VARCHAR(20)],
PODCASTÉ, 1N CONSO, 0N PODCAST: qté écouté [INTEGER]
PODCAST: num. podcast [VARCHAR(8)], titre podcast [], durée podcast []
DIFFUSE, 1N PODCAST, 11 PODCASTEUR: quantité [INTEGER]
SON: num. son [VARCHAR(8)], titre son [], durée son [], brevet son []
RANGE, 1N CONSO, 0N PLAYLIST, 1N SON: qté écouté [INTEGER]
:
:
PODCASTEUR: num. podcasteur [VARCHAR(8)], nom podcasteur [VARCHAR(255)]
CONTIENT, 11 SON, 1N ALBUM
PLAYLIST: num. playlist [VARCHAR(8)], titre playlist [], durée playlist []
:
:
:
ALBUM: num. album [VARCHAR(8)], titre album [], type album []
PRODUIT, 1N ALBUM, 1N ARTISTE: quantité [INTEGER]
ARTISTE: num. artiste [VARCHAR(8)], nom artiste [VARCHAR(255)], label artiste []
:
:
EXERCICE
- Ajouter la gestion de l’abonnement
- Donner la possibilité de mettre plusieurs tag au son, à l’album et au podcast (le tag au son et à l’album sont les mêmes)
Le modèle MLD
SQL
Le modèle MPD
Le modèle physique des données reprend MLD en y ajoutant l’indication du format de chaque propriété
SQL Création des tables
-- phpMyAdmin SQL Dump
-- version 6.0.0-dev
-- https://www.phpmyadmin.net/
--
-- Hôte : 192.168.30.23
-- Généré le : dim. 03 Nov. 2024 à 21:34
-- Version du serveur : 8.0.18
-- Version de PHP : 8.2.20
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- Base de données : `julie`
--
-- --------------------------------------------------------
--
-- Structure de la table `album`
--
CREATE TABLE `album` (
`num_album` int(11) NOT NULL,
`titre_album` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL,
`type_album` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
--
-- Déchargement des données de la table `album`
--
-- Données pour la table album avec des exemples d'albums réels
INSERT INTO `album` (`num_album`, `titre_album`, `type_album`) VALUES
(1, 'Thriller', 'Pop'),
(2, 'The Dark Side of the Moon', 'Rock'),
(3, 'Back to Black', 'Soul'),
(4, 'Rumours', 'Rock'),
(5, 'Kind of Blue', 'Jazz'),
(6, 'Abbey Road', 'Rock'),
(7, 'The Eminem Show', 'Hip-hop'),
(8, 'Nevermind', 'Grunge'),
(9, '21', 'Pop'),
(10, 'Hotel California', 'Rock'),
(11, 'Lemonade', 'Pop'),
(12, 'A Night at the Opera', 'Rock'),
(13, 'Random Access Memories', 'Electro'),
(14, 'To Pimp a Butterfly', 'Hip-hop'),
(15, 'The Wall', 'Rock'),
(16, '1989', 'Pop'),
(17, 'In the Wee Small Hours', 'Jazz'),
(18, 'Led Zeppelin IV', 'Rock'),
(19, 'Songs in the Key of Life', 'Soul'),
(20, 'DAMN.', 'Hip-hop');
-- --------------------------------------------------------
--
-- Structure de la table `artiste`
--
CREATE TABLE `artiste` (
`num_artiste` int(11) NOT NULL,
`nom_artiste` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL,
`label_artiste` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
--
-- Déchargement des données de la table `artiste`
--
-- Données pour la table artiste avec des exemples d'artistes réels
INSERT INTO `artiste` (`num_artiste`, `nom_artiste`, `label_artiste`) VALUES
(1, 'Michael Jackson', 'Epic'),
(2, 'Pink Floyd', 'Harvest'),
(3, 'Amy Winehouse', 'Island'),
(4, 'Fleetwood Mac', 'Warner Bros.'),
(5, 'Miles Davis', 'Columbia'),
(6, 'The Beatles', 'Apple'),
(7, 'Eminem', 'Aftermath'),
(8, 'Nirvana', 'DGC'),
(9, 'Adele', 'XL Recordings'),
(10, 'Eagles', 'Asylum'),
(11, 'Beyoncé', 'Parkwood'),
(12, 'Queen', 'EMI'),
(13, 'Daft Punk', 'Columbia'),
(14, 'Kendrick Lamar', 'Top Dawg'),
(15, 'Led Zeppelin', 'Atlantic'),
(16, 'Taylor Swift', 'Big Machine'),
(17, 'Frank Sinatra', 'Capitol'),
(18, 'Stevie Wonder', 'Motown'),
(19, 'Jay-Z', 'Roc-A-Fella'),
(20, 'The Rolling Stones', 'Rolling Stones');
-- --------------------------------------------------------
--
-- Structure de la table `conso`
--
CREATE TABLE `conso` (
`num_conso` int(11) NOT NULL,
`nom_conso` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL,
`cb_conso` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL,
`email_conso` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL,
`tel_conso` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
--
-- Déchargement des données de la table `conso`
--
INSERT INTO `conso` (`num_conso`, `nom_conso`, `cb_conso`, `email_conso`, `tel_conso`) VALUES
(1, 'Alice Martin', 'CB12345', 'alice@example.com', '0123456789'),
(2, 'Bob Robert', 'CB67890', 'bob@example.com', '0987654321'),
(3, 'Clara Dubois', 'CB34567', 'clara@example.com', '0145236879'),
(4, 'David Lefevre', 'CB45678', 'david@example.com', '0654321876'),
(5, 'Eva Martin', 'CB56789', 'eva@example.com', '0623481795'),
(6, 'Frank Simon', 'CB67891', 'frank@example.com', '0734125689'),
(7, 'George Emile', 'CB78912', 'george@example.com', '0781234590'),
(8, 'Hannah Scott', 'CB89123', 'hannah@example.com', '0678912345'),
(9, 'Iris White', 'CB91234', 'iris@example.com', '0657812349'),
(10, 'Jack Green', 'CB23456', 'jack@example.com', '0723416589'),
(11, 'Karen Black', 'CB34568', 'karen@example.com', '0634781529'),
(12, 'Leo King', 'CB45679', 'leo@example.com', '0765432189'),
(13, 'Mona Brown', 'CB56781', 'mona@example.com', '0689123547'),
(14, 'Nina Wilson', 'CB67892', 'nina@example.com', '0743216589'),
(15, 'Oscar Reed', 'CB78913', 'oscar@example.com', '0675341289'),
(16, 'Paul Grey', 'CB89124', 'paul@example.com', '0721346578'),
(17, 'Quinn Hill', 'CB91235', 'quinn@example.com', '0624587139'),
(18, 'Ray Fox', 'CB12356', 'ray@example.com', '0745618239'),
(19, 'Sophia Lane', 'CB23457', 'sophia@example.com', '0654789132'),
(20, 'Tom Bright', 'CB34569', 'tom@example.com', '0732146895');
-- --------------------------------------------------------
--
-- Structure de la table `ecouter_podcast`
--
CREATE TABLE `ecouter_podcast` (
`num_conso` int(11) NOT NULL,
`num_podcast` int(11) NOT NULL,
`date_ecoute` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
--
-- Déchargement des données de la table `ecouter_podcast`
--
INSERT INTO `ecouter_podcast` (`num_conso`, `num_podcast`, `date_ecoute`) VALUES
(1, 1, '2024-11-01 10:30:00'),
(2, 2, '2024-11-02 15:45:00'),
(3, 3, '2024-11-03 18:00:00'),
(4, 4, '2024-11-04 20:15:00'),
(5, 5, '2024-11-05 21:30:00'),
(6, 6, '2024-11-06 22:45:00'),
(7, 7, '2024-11-07 23:00:00'),
(8, 8, '2024-11-08 09:15:00'),
(9, 9, '2024-11-09 11:30:00'),
(10, 10, '2024-11-10 13:45:00'),
(11, 11, '2024-11-11 15:00:00'),
(12, 12, '2024-11-12 16:15:00'),
(13, 13, '2024-11-13 17:30:00'),
(14, 14, '2024-11-14 18:45:00'),
(15, 15, '2024-11-15 19:00:00'),
(16, 16, '2024-11-16 20:15:00'),
(17, 17, '2024-11-17 21:30:00'),
(18, 18, '2024-11-18 22:45:00'),
(19, 19, '2024-11-19 23:00:00'),
(20, 20, '2024-11-20 09:15:00');
-- --------------------------------------------------------
--
-- Structure de la table `ecouter_son`
--
CREATE TABLE `ecouter_son` (
`num_conso` int(11) NOT NULL,
`num_son` int(11) NOT NULL,
`date_ecoute` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
-- Données pour la table ecouter_son avec des exemples d'écoutes de chansons
INSERT INTO `ecouter_son` (`num_conso`, `num_son`, `date_ecoute`) VALUES
(1, 1, '2024-10-01 10:00:00'),
(2, 2, '2024-10-01 10:30:00'),
(3, 3, '2024-09-01 11:00:00'),
(4, 4, '2024-08-01 11:30:00'),
(5, 5, '2024-08-01 12:00:00'),
(6, 6, '2024-08-01 12:30:00'),
(7, 7, '2024-11-01 13:00:00'),
(8, 8, '2024-11-02 13:30:00'),
(9, 9, '2024-11-01 14:00:00'),
(10, 10, '2024-10-02 14:30:00'),
(11, 11, '2024-10-02 15:00:00'),
(12, 12, '2024-10-02 15:30:00'),
(13, 13, '2024-11-01 16:00:00'),
(14, 14, '2024-11-01 16:30:00'),
(15, 15, '2024-10-12 17:00:00'),
(16, 16, '2024-10-12 17:30:00'),
(17, 17, '2024-10-12 18:00:00'),
(18, 18, '2024-08-11 18:30:00'),
(19, 19, '2024-09-21 19:00:00'),
(20, 20, '2024-09-21 19:30:00');
-- --------------------------------------------------------
--
-- Structure de la table `playlist`
--
CREATE TABLE `playlist` (
`num_playlist` int(11) NOT NULL,
`titre_playlist` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL,
`durée_playlist` int(11) NOT NULL COMMENT 'secondes'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
--
-- Déchargement des données de la table `playlist`
--
INSERT INTO `playlist` (`num_playlist`, `titre_playlist`, `durée_playlist`) VALUES
(1, 'Playlist Relax', 3000),
(2, 'Playlist Workout', 3200),
(3, 'Playlist Party', 3600),
(4, 'Playlist Study', 1800),
(5, 'Playlist Chill', 2500),
(6, 'Playlist Jazz', 2700),
(7, 'Playlist Rock', 2400),
(8, 'Playlist Indie', 2200),
(9, 'Playlist Electro', 3100),
(10, 'Playlist Pop', 2800),
(11, 'Playlist Focus', 2000),
(12, 'Playlist Blues', 2600),
(13, 'Playlist Classical', 3400),
(14, 'Playlist Summer', 2900),
(15, 'Playlist Travel', 3000),
(16, 'Playlist Hits', 3700),
(17, 'Playlist Love', 3300),
(18, 'Playlist Dance', 3100),
(19, 'Playlist Winter', 2600),
(20, 'Playlist RnB', 2800);
-- --------------------------------------------------------
--
-- Structure de la table `podcast`
--
CREATE TABLE `podcast` (
`num_podcast` int(11) NOT NULL,
`titre_podcast` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL,
`durée_podcast` int(11) NOT NULL COMMENT 'secondes',
`num_podcasteur` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
--
-- Déchargement des données de la table `podcast`
--
INSERT INTO `podcast` (`num_podcast`, `titre_podcast`, `durée_podcast`, `num_podcasteur`) VALUES
(1, 'Découverte Scientifique', 1200, 1),
(2, 'Tech Actu', 1800, 2),
(3, 'Exploration de l\'Univers', 2400, 3),
(4, 'Histoire de la Physique', 3600, 4),
(5, 'Mathématiques Modernes', 1500, 5),
(6, 'Biologie Cellulaire', 3000, 6),
(7, 'Algorithmes et IA', 2700, 7),
(8, 'Philosophie des Sciences', 2100, 8),
(9, 'Sécurité Informatique', 1950, 9),
(10, 'Chimie Organique', 2850, 10),
(11, 'Ingénierie Aérospatiale', 2600, 11),
(12, 'Géophysique', 2200, 12),
(13, 'Neurosciences', 2550, 13),
(14, 'Astronomie', 2300, 14),
(15, 'Ingénierie Robotique', 2500, 15),
(16, 'Physique Quantique', 2800, 16),
(17, 'Climatologie', 3200, 17),
(18, 'Chimie des Matériaux', 2150, 18),
(19, 'Physiologie Humaine', 2650, 19),
(20, 'Médecine Génétique', 2900, 20);
-- --------------------------------------------------------
--
-- Structure de la table `podcasteur`
--
CREATE TABLE `podcasteur` (
`num_podcasteur` int(11) NOT NULL,
`nom_podcasteur` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
--
-- Déchargement des données de la table `podcasteur`
--
INSERT INTO `podcasteur` (`num_podcasteur`, `nom_podcasteur`) VALUES
(1, 'Jean Dupont'),
(2, 'Marie Curie'),
(3, 'Thomas Edison'),
(4, 'Sophie Germain'),
(5, 'Albert Einstein'),
(6, 'Nikola Tesla'),
(7, 'Isaac Newton'),
(8, 'Ada Lovelace'),
(9, 'Grace Hopper'),
(10, 'Alan Turing'),
(11, 'Rosalind Franklin'),
(12, 'Enrico Fermi'),
(13, 'Max Planck'),
(14, 'Galileo Galilei'),
(15, 'Leonardo da Vinci'),
(16, 'Stephen Hawking'),
(17, 'Richard Feynman'),
(18, 'Carl Sagan'),
(19, 'Katherine Johnson'),
(20, 'James Clerk Maxwell');
-- --------------------------------------------------------
--
-- Structure de la table `produit_son`
--
CREATE TABLE `produit_son` (
`num_artiste` int(11) NOT NULL,
`num_album` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
--
-- Déchargement des données de la table `produit_son`
--
INSERT INTO `produit_son` (`num_artiste`, `num_album`) VALUES
(1, 1),
(2, 2),
(3, 3),
(4, 4),
(5, 5),
(6, 6),
(7, 7),
(8, 8),
(9, 9),
(10, 10),
(11, 11),
(12, 12),
(13, 13),
(14, 14),
(15, 15),
(16, 16),
(17, 17),
(18, 18),
(19, 19),
(20, 20);
-- --------------------------------------------------------
--
-- Structure de la table `ranger_son`
--
CREATE TABLE `ranger_son` (
`num_conso` int(11) NOT NULL,
`num_son` int(11) NOT NULL,
`num_playlist` int(11) NOT NULL,
`date_ecoute` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
-- Exemples pour la table ranger_son avec 20 entrées
INSERT INTO `ranger_son` (`num_conso`, `num_son`, `num_playlist`, `date_ecoute`) VALUES
(1, 1, 1, '2024-11-01 10:00:00'), -- Alice Martin a ajouté "Chanson 1" à "Playlist Relax"
(2, 3, 2, '2024-11-01 11:15:00'), -- Bob Robert a ajouté "Chanson 3" à "Playlist Workout"
(3, 5, 3, '2024-11-01 12:30:00'), -- Clara Dubois a ajouté "Chanson 5" à "Playlist Party"
(4, 7, 4, '2024-11-01 13:45:00'), -- David Lefevre a ajouté "Chanson 7" à "Playlist Study"
(5, 9, 5, '2024-11-01 15:00:00'), -- Eva Martin a ajouté "Chanson 9" à "Playlist Chill"
(6, 11, 6, '2024-11-01 16:15:00'), -- Frank Simon a ajouté "Chanson 11" à "Playlist Jazz"
(7, 13, 7, '2024-11-01 17:30:00'), -- George Emile a ajouté "Chanson 13" à "Playlist Rock"
(8, 15, 8, '2024-11-01 18:45:00'), -- Hannah Scott a ajouté "Chanson 15" à "Playlist Indie"
(9, 17, 9, '2024-11-01 20:00:00'), -- Iris White a ajouté "Chanson 17" à "Playlist Electro"
(10, 19, 10, '2024-11-01 21:15:00'), -- Jack Green a ajouté "Chanson 19" à "Playlist Pop"
(11, 2, 1, '2024-11-02 10:00:00'), -- Karen Black a ajouté "Chanson 2" à "Playlist Relax"
(12, 4, 2, '2024-11-02 11:15:00'), -- Leo King a ajouté "Chanson 4" à "Playlist Workout"
(13, 6, 3, '2024-11-02 12:30:00'), -- Mona Brown a ajouté "Chanson 6" à "Playlist Party"
(14, 8, 4, '2024-11-02 13:45:00'), -- Nina Wilson a ajouté "Chanson 8" à "Playlist Study"
(15, 10, 5, '2024-11-02 15:00:00'), -- Oscar Reed a ajouté "Chanson 10" à "Playlist Chill"
(16, 12, 6, '2024-11-02 16:15:00'), -- Paul Grey a ajouté "Chanson 12" à "Playlist Jazz"
(17, 14, 7, '2024-11-02 17:30:00'), -- Quinn Hill a ajouté "Chanson 14" à "Playlist Rock"
(18, 16, 8, '2024-11-02 18:45:00'), -- Ray Fox a ajouté "Chanson 16" à "Playlist Indie"
(19, 18, 9, '2024-11-02 20:00:00'), -- Sophia Lane a ajouté "Chanson 18" à "Playlist Electro"
(20, 20, 10, '2024-11-02 21:15:00'); -- Tom Bright a ajouté "Chanson 20" à "Playlist Pop"
-- --------------------------------------------------------
--
-- Structure de la table `son`
--
CREATE TABLE `son` (
`num_son` int(11) NOT NULL,
`titre_son` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL,
`durée_son` int(11) NOT NULL COMMENT 'secondes',
`brevet_son` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL,
`num_album` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
--
-- Déchargement des données de la table `son`
--
-- Données pour la table son avec des exemples de chansons réelles
INSERT INTO `son` (`num_son`, `titre_son`, `durée_son`, `brevet_son`, `num_album`) VALUES
(1, 'Billie Jean', 293, 'BREV001', 1),
(2, 'Time', 413, 'BREV002', 2),
(3, 'Rehab', 211, 'BREV003', 3),
(4, 'Go Your Own Way', 231, 'BREV004', 4),
(5, 'So What', 561, 'BREV005', 5),
(6, 'Come Together', 259, 'BREV006', 6),
(7, 'Without Me', 290, 'BREV007', 7),
(8, 'Smells Like Teen Spirit', 301, 'BREV008', 8),
(9, 'Rolling in the Deep', 228, 'BREV009', 9),
(10, 'Hotel California', 391, 'BREV010', 10),
(11, 'Formation', 233, 'BREV011', 11),
(12, 'Bohemian Rhapsody', 355, 'BREV012', 12),
(13, 'Get Lucky', 369, 'BREV013', 13),
(14, 'Alright', 233, 'BREV014', 14),
(15, 'Stairway to Heaven', 482, 'BREV015', 15),
(16, 'Shake It Off', 242, 'BREV016', 16),
(17, 'In the Wee Small Hours of the Morning', 177, 'BREV017', 17),
(18, 'Black Dog', 296, 'BREV018', 18),
(19, 'Sir Duke', 230, 'BREV019', 19),
(20, 'DNA.', 185, 'BREV020', 20);
--
-- Index pour les tables déchargées
--
--
-- Index pour la table `album`
--
ALTER TABLE `album`
ADD PRIMARY KEY (`num_album`);
--
-- Index pour la table `artiste`
--
ALTER TABLE `artiste`
ADD PRIMARY KEY (`num_artiste`);
--
-- Index pour la table `conso`
--
ALTER TABLE `conso`
ADD PRIMARY KEY (`num_conso`);
--
-- Index pour la table `ecouter_podcast`
--
ALTER TABLE `ecouter_podcast`
ADD PRIMARY KEY (`num_conso`,`num_podcast`),
ADD KEY `num_podcast` (`num_podcast`),
ADD KEY `num_conso` (`num_conso`);
--
-- Index pour la table `ecouter_son`
--
ALTER TABLE `ecouter_son`
ADD PRIMARY KEY (`num_conso`,`num_son`),
ADD KEY `num_son` (`num_son`),
ADD KEY `num_conso` (`num_conso`);
--
-- Index pour la table `playlist`
--
ALTER TABLE `playlist`
ADD PRIMARY KEY (`num_playlist`);
--
-- Index pour la table `podcast`
--
ALTER TABLE `podcast`
ADD PRIMARY KEY (`num_podcast`),
ADD KEY `num_podcasteur` (`num_podcasteur`);
--
-- Index pour la table `podcasteur`
--
ALTER TABLE `podcasteur`
ADD PRIMARY KEY (`num_podcasteur`);
--
-- Index pour la table `produit_son`
--
ALTER TABLE `produit_son`
ADD PRIMARY KEY (`num_artiste`,`num_album`),
ADD KEY `num_artiste` (`num_artiste`),
ADD KEY `num_album` (`num_album`);
--
-- Index pour la table `ranger_son`
--
ALTER TABLE `ranger_son`
ADD PRIMARY KEY (`num_conso`,`num_son`,`num_playlist`),
ADD KEY `num_playlist` (`num_playlist`),
ADD KEY `num_son` (`num_son`),
ADD KEY `num_conso` (`num_conso`);
--
-- Index pour la table `son`
--
ALTER TABLE `son`
ADD PRIMARY KEY (`num_son`),
ADD UNIQUE KEY `num_album` (`num_album`);
--
-- AUTO_INCREMENT pour les tables déchargées
--
--
-- AUTO_INCREMENT pour la table `album`
--
ALTER TABLE `album`
MODIFY `num_album` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=21;
--
-- AUTO_INCREMENT pour la table `artiste`
--
ALTER TABLE `artiste`
MODIFY `num_artiste` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=21;
--
-- AUTO_INCREMENT pour la table `conso`
--
ALTER TABLE `conso`
MODIFY `num_conso` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=21;
--
-- AUTO_INCREMENT pour la table `playlist`
--
ALTER TABLE `playlist`
MODIFY `num_playlist` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=21;
--
-- AUTO_INCREMENT pour la table `podcast`
--
ALTER TABLE `podcast`
MODIFY `num_podcast` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=21;
--
-- AUTO_INCREMENT pour la table `podcasteur`
--
ALTER TABLE `podcasteur`
MODIFY `num_podcasteur` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=21;
--
-- AUTO_INCREMENT pour la table `son`
--
ALTER TABLE `son`
MODIFY `num_son` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=21;
--
-- Contraintes pour les tables déchargées
--
--
-- Contraintes pour la table `ecouter_podcast`
--
ALTER TABLE `ecouter_podcast`
ADD CONSTRAINT `ecouter_podcast_ibfk_1` FOREIGN KEY (`num_podcast`) REFERENCES `podcast` (`num_podcast`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `ecouter_podcast_ibfk_2` FOREIGN KEY (`num_conso`) REFERENCES `conso` (`num_conso`) ON DELETE CASCADE ON UPDATE CASCADE;
--
-- Contraintes pour la table `ecouter_son`
--
ALTER TABLE `ecouter_son`
ADD CONSTRAINT `ecouter_son_ibfk_1` FOREIGN KEY (`num_son`) REFERENCES `son` (`num_son`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `ecouter_son_ibfk_2` FOREIGN KEY (`num_conso`) REFERENCES `conso` (`num_conso`) ON DELETE CASCADE ON UPDATE CASCADE;
--
-- Contraintes pour la table `podcast`
--
ALTER TABLE `podcast`
ADD CONSTRAINT `podcast_ibfk_1` FOREIGN KEY (`num_podcasteur`) REFERENCES `podcasteur` (`num_podcasteur`) ON DELETE CASCADE ON UPDATE CASCADE;
--
-- Contraintes pour la table `produit_son`
--
ALTER TABLE `produit_son`
ADD CONSTRAINT `produit_son_ibfk_1` FOREIGN KEY (`num_artiste`) REFERENCES `artiste` (`num_artiste`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `produit_son_ibfk_2` FOREIGN KEY (`num_album`) REFERENCES `album` (`num_album`) ON DELETE CASCADE ON UPDATE CASCADE;
--
-- Contraintes pour la table `ranger_son`
--
ALTER TABLE `ranger_son`
ADD CONSTRAINT `ranger_son_ibfk_1` FOREIGN KEY (`num_playlist`) REFERENCES `playlist` (`num_playlist`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `ranger_son_ibfk_2` FOREIGN KEY (`num_son`) REFERENCES `son` (`num_son`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `ranger_son_ibfk_3` FOREIGN KEY (`num_conso`) REFERENCES `conso` (`num_conso`) ON DELETE CASCADE ON UPDATE CASCADE;
--
-- Contraintes pour la table `son`
--
ALTER TABLE `son`
ADD CONSTRAINT `son_ibfk_1` FOREIGN KEY (`num_album`) REFERENCES `album` (`num_album`) ON DELETE CASCADE ON UPDATE CASCADE;
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
SQL Requête / query
une requête SQL simple pour sélectionner tous les sons et les trier par ordre alphabétique de leur titre
SELECT *
FROM `son`
ORDER BY `titre_son` ASC;
les sons triés par titre ainsi que les noms de leurs artistes, nous allons joindre les tables son
, album
, produit_son
et artiste
SELECT s.titre_son, s.durée_son, a.nom_artiste
FROM `son` s
JOIN `album` al ON s.num_album = al.num_album
JOIN `produit_son` ps ON al.num_album = ps.num_album
JOIN `artiste` a ON ps.num_artiste = a.num_artiste
ORDER BY s.titre_son ASC;
une requête pour obtenir les titres des sons qui se trouvent dans une playlist dont le titre contient le mot "Jazz”
SELECT s.titre_son
FROM `son` s
JOIN `ranger_son` rs ON s.num_son = rs.num_son
JOIN `playlist` p ON rs.num_playlist = p.num_playlist
WHERE p.titre_playlist LIKE '%Jazz%';
la liste des titres des sons écoutés le 2024-11-01
SELECT s.titre_son, es.date_ecoute
FROM `son` s
JOIN `ecouter_son` es ON s.num_son = es.num_son
WHERE DATE(es.date_ecoute) = '2024-11-01';
les titres des sons qui se trouvent dans des albums de type "Jazz" ou "Rock”
SELECT s.titre_son, al.titre_album
FROM `son` s
JOIN `album` al ON s.num_album = al.num_album
WHERE al.type_album IN ('Jazz', 'Rock');
la liste des différents types d'albums
SELECT DISTINCT type_album
FROM `album`;
la liste des podcasts dont le titre contient les caractères "IA”
SELECT titre_podcast
FROM `podcast`
WHERE titre_podcast LIKE '%IA%';
le nombre total de sons dans la table son
SELECT COUNT(*) AS nombre_de_sons
FROM `son`;
la liste des podcasts dont la durée est comprise entre 1500 et 2500 secondes
SELECT titre_podcast, durée_podcast
FROM `podcast`
WHERE durée_podcast BETWEEN 1500 AND 2500
ORDER BY durée_podcast;
la liste des podcasts réalisés par le podcasteur nommé "Marie Curie”
SELECT p.titre_podcast
FROM `podcast` p
JOIN `podcasteur` pc ON p.num_podcasteur = pc.num_podcasteur
WHERE pc.nom_podcasteur = 'Marie Curie';