SQL Dojo Bêta
Technique

Les invariants comme tests

Une règle qui doit tenir sur chaque ligne, ou entre un modèle et sa source, écrite comme « les lignes qui l'enfreignent ».

SELECT … WHERE total <> items - discounts + shipping est un test : il passe quand il ne renvoie aucune ligne (dbt exécute ces requêtes comme tests singuliers). Entre les couches, comparez les comptes : une jointure qui ajoute seulement des colonnes doit garder rows_in = rows_out, et COUNT(*) face à COUNT(DISTINCT clé) à chaque CTE montre où le grain a cassé.

-- A payment never comes before its order: no row means the test passes.
SELECT p.payment_id, p.paid_at, o.ordered_at
FROM payments p
JOIN orders o ON o.order_id = p.order_id
WHERE p.paid_at < o.ordered_at;
payment_idpaid_atordered_at
Aucune ligne
L’essayer en Randori