48 lines
2.9 KiB
SQL
48 lines
2.9 KiB
SQL
-- ============================================================
|
|
-- Omika Diagnostic Center -- 007_diagnostics_usage.sql
|
|
-- Tâche 18 : télémétrie d'utilisation des écrans / fonctionnalités (additif).
|
|
-- ============================================================
|
|
-- IDEMPOTENT : ADD COLUMN IF NOT EXISTS + CREATE INDEX IF NOT EXISTS.
|
|
-- AUCUN DROP, AUCUNE suppression, AUCUNE migration destructive.
|
|
-- PostgreSQL 18 compatible (syntaxe disponible depuis 9.6).
|
|
--
|
|
-- Ajoute au diagnostic_event deux dimensions d'USAGE fonctionnel, NULLABLES :
|
|
-- les événements antérieurs restent parfaitement valides (screen_code = NULL,
|
|
-- feature_code = NULL), AUCUN backfill, AUCUNE valeur inventée (« UNKNOWN »/« N/A »
|
|
-- interdits).
|
|
--
|
|
-- screen_code : code fonctionnel STABLE d'un écran (ex. AGENDA, SITE_DETAIL).
|
|
-- Produit DEPUIS le catalogue applicatif (jamais un nom de
|
|
-- Page/ViewModel, jamais un identifiant métier, jamais une saisie
|
|
-- utilisateur). Null pour les événements background sans écran.
|
|
-- feature_code: code fonctionnel STABLE d'une action métier significative
|
|
-- (ex. EMAIL_SEND, REPORT_GENERATE). Attaché à l'événement précis
|
|
-- de l'action, jamais à un « contexte courant » global. Null si non
|
|
-- applicable.
|
|
--
|
|
-- CHOIX DE TYPE (cohérence schéma) : TEXT sans VARCHAR, comme les autres chaînes
|
|
-- (priority, level, component, license_number…). La validation (longueur, valeurs
|
|
-- bornées) est portée par le code au moment de la résolution, comme les autres
|
|
-- champs. Les deux colonnes sont NON SENSIBLES : jamais de DeviceId/UserId/
|
|
-- CollaborateurId/email/téléphone/token/id métier dynamique (§9/§10/§72).
|
|
-- ============================================================
|
|
|
|
ALTER TABLE diagnostic_event
|
|
ADD COLUMN IF NOT EXISTS screen_code TEXT,
|
|
ADD COLUMN IF NOT EXISTS feature_code TEXT;
|
|
|
|
-- Index de recherche « tous les ScreenView d'un écran dans le temps » (T18, §49) :
|
|
-- les agrégations d'usage filtrent par (event_code, screen_code) puis par période,
|
|
-- mais l'index composé (screen_code, timestamp_utc DESC) couvre le filtre écran +
|
|
-- le tri temporel des diagnostics filtrés (§60), aligné sur le style de
|
|
-- ix_diagnostic_event_device_key_timestamp (006).
|
|
CREATE INDEX IF NOT EXISTS ix_diagnostic_event_screen_code_timestamp
|
|
ON diagnostic_event (screen_code, timestamp_utc DESC);
|
|
|
|
-- Index (feature_code, timestamp_utc DESC) : filtre fonctionnalité + tri temporel.
|
|
-- FeatureCode est une dimension de catalogue à cardinalité TRÈS faible (< 10), donc
|
|
-- un index est peu sélectif ; il est néanmoins ajouté par symétrie avec screen_code
|
|
-- car le filtre « Tous les diagnostics d'une fonctionnalité » (§60) est prévu.
|
|
CREATE INDEX IF NOT EXISTS ix_diagnostic_event_feature_code_timestamp
|
|
ON diagnostic_event (feature_code, timestamp_utc DESC);
|