[BDD-S1] Définir les politiques ON DELETE / ON UPDATE (FK) #3

Closed
opened 2025-08-25 09:44:06 +00:00 by vdorge · 3 comments
Member

Description

Clarifier et aligner les stratégies de suppression pour chaque FK (CASCADE / SET NULL / RESTRICT).

Tâches

  • Revue des FK : certaines sont déjà en CASCADE (ex. assistantes_maternelles.id_utilisateur, enfants_parents, dossiers, messages, contrats, avenants_contrats, evenements.id_enfant) ; d’autres sans règle explicite (ex. evenements.id_am, evenements.id_parent, evenements.cree_par, validations.id_utilisateur). Ajouter la stratégie voulue.

  • Produire 04_fk_policies.sql avec ALTER TABLE pour ajuster.

Critères d’acceptation

  • Stratégies documentées tableau par table.

  • Tests de suppression montrent le comportement attendu.

## Description Clarifier et aligner les stratégies de suppression pour chaque FK (CASCADE / SET NULL / RESTRICT). ## Tâches - Revue des FK : certaines sont déjà en CASCADE (ex. assistantes_maternelles.id_utilisateur, enfants_parents, dossiers, messages, contrats, avenants_contrats, evenements.id_enfant) ; d’autres sans règle explicite (ex. evenements.id_am, evenements.id_parent, evenements.cree_par, validations.id_utilisateur). Ajouter la stratégie voulue. - Produire 04_fk_policies.sql avec ALTER TABLE pour ajuster. ## Critères d’acceptation - Stratégies documentées tableau par table. - Tests de suppression montrent le comportement attendu.
vdorge added this to the P'titsPas-Ynov project 2025-08-25 09:44:06 +00:00
vdorge added the
BDD
Implémentation
Sprint 1
labels 2025-08-25 09:59:36 +00:00
vdorge added this to the Sprint 1 – Mise en place BDD milestone 2025-08-25 09:59:38 +00:00
Author
Member

Plan des politiques ON DELETE (résumé)

Table.Colonne FK → Référence Politique souhaitée Raison État actuel
assistantes_maternelles.id_utilisateur → utilisateurs.id CASCADE profil supprimé avec le compte déjà CASCADE
parents.id_utilisateur → utilisateurs.id CASCADE extension supprimée avec le compte déjà CASCADE
parents.id_co_parent → utilisateurs.id SET NULL garder le parent principal si co-parent supprimé (sans règle explicite)
enfants_parents.id_parent → parents.id_utilisateur CASCADE nettoyage des liaisons déjà CASCADE
enfants_parents.id_enfant → enfants.id CASCADE idem déjà CASCADE
dossiers.id_parent → parents.id_utilisateur CASCADE purge dossiers si parent supprimé (RGPD) déjà CASCADE
dossiers.id_enfant → enfants.id CASCADE purge dossiers si enfant supprimé déjà CASCADE
messages.id_dossier → dossiers.id CASCADE purge messages avec le dossier déjà CASCADE
messages.id_expediteur → utilisateurs.id SET NULL conserver l’historique des messages était CASCADE → à changer
contrats.id_dossier → dossiers.id CASCADE 1:1 avec dossier, purge si dossier supprimé déjà CASCADE
avenants_contrats.id_contrat → contrats.id CASCADE purge avenants avec le contrat déjà CASCADE
avenants_contrats.initie_par → utilisateurs.id SET NULL garder l’historique de l’avenant (sans règle explicite) → à fixer
evenements.id_enfant → enfants.id CASCADE purge événements si enfant supprimé déjà CASCADE
evenements.id_am → utilisateurs.id SET NULL garder l’historique même si AM supprimée (sans règle explicite) → à fixer
evenements.id_parent → parents.id_utilisateur SET NULL idem (sans règle explicite) → à fixer
evenements.cree_par → utilisateurs.id SET NULL garder l’historique de création (sans règle explicite) → à fixer
signalements_bugs.id_utilisateur → utilisateurs.id SET NULL garder le ticket même si compte supprimé (sans règle explicite) → à fixer
uploads.id_utilisateur → utilisateurs.id SET NULL déjà fait (conforme) déjà SET NULL
notifications.id_utilisateur → utilisateurs.id CASCADE nettoyage des notifs déjà CASCADE
validations.id_utilisateur → utilisateurs.id SET NULL garder la trace même si compte supprimé (sans règle explicite) → à fixer
# Plan des politiques ON DELETE (résumé) | Table.Colonne FK → Référence | Politique souhaitée | Raison | État actuel | | -------------------------------------------------------------- | ------------------- | ------------------------------------------------ | -------------------------------- | | **assistantes\_maternelles.id\_utilisateur → utilisateurs.id** | **CASCADE** | profil supprimé avec le compte | déjà CASCADE | | **parents.id\_utilisateur → utilisateurs.id** | **CASCADE** | extension supprimée avec le compte | déjà CASCADE | | **parents.id\_co\_parent → utilisateurs.id** | **SET NULL** | garder le parent principal si co-parent supprimé | (sans règle explicite) | | **enfants\_parents.id\_parent → parents.id\_utilisateur** | **CASCADE** | nettoyage des liaisons | déjà CASCADE | | **enfants\_parents.id\_enfant → enfants.id** | **CASCADE** | idem | déjà CASCADE | | **dossiers.id\_parent → parents.id\_utilisateur** | **CASCADE** | purge dossiers si parent supprimé (RGPD) | déjà CASCADE | | **dossiers.id\_enfant → enfants.id** | **CASCADE** | purge dossiers si enfant supprimé | déjà CASCADE | | **messages.id\_dossier → dossiers.id** | **CASCADE** | purge messages avec le dossier | déjà CASCADE | | **messages.id\_expediteur → utilisateurs.id** | **SET NULL** | conserver l’historique des messages | **était CASCADE** → à changer | | **contrats.id\_dossier → dossiers.id** | **CASCADE** | 1:1 avec dossier, purge si dossier supprimé | déjà CASCADE | | **avenants\_contrats.id\_contrat → contrats.id** | **CASCADE** | purge avenants avec le contrat | déjà CASCADE | | **avenants\_contrats.initie\_par → utilisateurs.id** | **SET NULL** | garder l’historique de l’avenant | (sans règle explicite) → à fixer | | **evenements.id\_enfant → enfants.id** | **CASCADE** | purge événements si enfant supprimé | déjà CASCADE | | **evenements.id\_am → utilisateurs.id** | **SET NULL** | garder l’historique même si AM supprimée | (sans règle explicite) → à fixer | | **evenements.id\_parent → parents.id\_utilisateur** | **SET NULL** | idem | (sans règle explicite) → à fixer | | **evenements.cree\_par → utilisateurs.id** | **SET NULL** | garder l’historique de création | (sans règle explicite) → à fixer | | **signalements\_bugs.id\_utilisateur → utilisateurs.id** | **SET NULL** | garder le ticket même si compte supprimé | (sans règle explicite) → à fixer | | **uploads.id\_utilisateur → utilisateurs.id** | **SET NULL** | *déjà fait* (conforme) | déjà SET NULL | | **notifications.id\_utilisateur → utilisateurs.id** | **CASCADE** | nettoyage des notifs | déjà CASCADE | | **validations.id\_utilisateur → utilisateurs.id** | **SET NULL** | garder la trace même si compte supprimé | (sans règle explicite) → à fixer |
Author
Member

Exécution + vérifications

Vérifier (exemples)

-- Supprime un utilisateur qui a posté des messages : les messages restent, sender NULL
DELETE FROM utilisateurs WHERE id = '...'; -- vérifier messages.id_expediteur IS NULL

-- Supprime un co-parent : la relation co_parent devient NULL
DELETE FROM utilisateurs WHERE id = '...'; -- vérifier parents.id_co_parent IS NULL

-- Supprime une AM : evenements.id_am devient NULL (historique conservé)
-- Supprime un parent : dossiers & messages du dossier sont supprimés via CASCADE

# Exécution + vérifications ## Vérifier (exemples) -- Supprime un utilisateur qui a posté des messages : les messages restent, sender NULL DELETE FROM utilisateurs WHERE id = '...'; -- vérifier messages.id_expediteur IS NULL -- Supprime un co-parent : la relation co_parent devient NULL DELETE FROM utilisateurs WHERE id = '...'; -- vérifier parents.id_co_parent IS NULL -- Supprime une AM : evenements.id_am devient NULL (historique conservé) -- Supprime un parent : dossiers & messages du dossier sont supprimés via CASCADE
Author
Member

Ajouter migrations/04_fk_policies.sql
A tester sur Docker

Ajouter migrations/04_fk_policies.sql A tester sur Docker
Sign in to join this conversation.
No description provided.