Combien de temps garder une commande ?
La durée de conservation est le temps pendant lequel une organisation garde une donnée personnelle avant de la supprimer. La fixer à l'avance évite de garder des données devenues inutiles, et donc exposées pour rien.
Une boutique en ligne a des commandes depuis des années. Personne n'a décidé quand les effacer. Vous allez apprendre à fixer la règle, puis à trouver les lignes qui la dépassent.
À la fin de cette leçon
Remarque
Je peux fixer une durée de conservation et trouver, puis supprimer, les lignes qui la dépassent.
Mots clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Durée de conservation | le temps pendant lequel on garde une donnée | |
| Date limite | le jour avant lequel une ligne est trop ancienne | 2024-01-01 |
| Purge | la suppression des lignes qui ont dépassé leur durée | |
| Sauvegarde | une copie de la base gardée pour la restaurer | |
| Archivage | garder une donnée à part, avec un accès très limité |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Chaque donnée a une durée de conservation
Chaque donnée est gardée pour un but. Quand le but disparaît, la donnée doit disparaître aussi.
On fixe donc une durée par sorte de donnée, avant de collecter. Une loi impose parfois un minimum, par exemple pour les factures, ou un maximum.
Les durées du tableau sont des exemples inventés pour la leçon.
Exemple : une durée par sorte de donnée
| Donnée | But | Durée proposée |
|---|---|---|
| Panier abandonné | Relancer le client | 30 jours |
| Compte sans connexion | Garder l'accès ouvert | 2 ans sans connexion |
| Commande livrée | Suivi après-vente | 18 mois après la livraison |
| Facture | Preuve comptable | Durée que fixe la loi |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Mesurer le retard des commandes du laboratoire
Lancez les deux premiers Runs pour préparer le terminal. Le troisième cherche la commande la plus ancienne de la boutique.
Le dernier compte les commandes passées avant le 1er janvier 2024. Une date fixe donne toujours le même résultat, quel que soit le jour où vous travaillez.
Accepter le certificat du serveur
printf '[client]\nssl-verify-server-cert=0\n' > ~/.my.cnfAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Un nom court pour la boutique
alias sql='mariadb -h db -u student -pstudent shop -t -e'Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
La commande la plus ancienne
sql "SELECT MIN(ordered_at) AS plus_ancienne FROM orders"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Les commandes avant 2024
sql "SELECT COUNT(*) AS a_supprimer FROM orders WHERE ordered_at < '2024-01-01'"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Lire d'abord, supprimer ensuite
Une purge se fait en deux temps. D'abord un SELECT avec la date limite, pour voir les lignes concernées. Ensuite un DELETE avec la même condition.
Une exception existe : une ligne liée à un litige en cours est gardée jusqu'à sa fin. On l'écarte dans la condition.
Dans le laboratoire, vous purgez une copie, jamais la boutique.
Purger une copie dans votre base
Les Runs ci-dessous copient les commandes dans votre base student_vie_privee, puis comptent. Ils passent ensuite à la suppression.
La copie compte 120 lignes. La purge en retire 19, la même quantité que votre SELECT. Il en reste 101.
Un nom court pour écrire
alias bd='mariadb -h db -u student -pstudent -t -e'Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Créer votre base
bd "CREATE DATABASE IF NOT EXISTS student_vie_privee"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Jeter une ancienne copie
bd "DROP TABLE IF EXISTS student_vie_privee.commandes"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Copier les commandes
bd "CREATE TABLE student_vie_privee.commandes AS SELECT id, customer_id, ordered_at, status FROM shop.orders"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Purger les commandes avant 2024
bd "DELETE FROM student_vie_privee.commandes WHERE ordered_at < '2024-01-01'"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Compter ce qui reste
bd "SELECT COUNT(*) AS restantes FROM student_vie_privee.commandes"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Exemple : trois temps d'une purge
| Temps | Requête | Résultat dans le laboratoire |
|---|---|---|
| 1. Compter | SELECT COUNT(*) ... WHERE ordered_at < date | 19 lignes |
| 2. Supprimer | DELETE ... WHERE ordered_at < date | 19 lignes retirées |
| 3. Contrôler | SELECT COUNT(*) sur la copie | 101 lignes restantes |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Supprimer la ligne ne suffit pas toujours
Une donnée se cache à plusieurs endroits : la table, les sauvegardes, les journaux, les exports et les copies de test.
Supprimer la ligne ne touche que la table. Les sauvegardes gardent la donnée jusqu'à leur propre expiration. Il faut donc leur donner une durée aussi.
Dans la boutique, des lignes d'une autre table peuvent pointer la ligne : on supprime d'abord les lignes qui dépendent d'elle.
Une erreur fréquente
Attention
Beaucoup pensent que garder toutes les données ne coûte rien. C'est faux : chaque ligne gardée reste exposée à une fuite et peut être demandée par la personne. Gardez une donnée seulement tant que son but existe.
À vous : trouver les lignes trop anciennes
-- Les connexions plus vieilles que la date limite sont à supprimer.
SELECT id, utilisateur, vue_le
FROM connexions
WHERE vue_le < '2024-06-01'
ORDER BY vue_le;
-- À vous : avancez la date limite au 2025-01-01 et relancez.
-- Combien de lignes entrent dans la liste ?