31,029
edits
Tag: 2017 source edit |
Tag: 2017 source edit |
||
| Line 283: | Line 283: | ||
Cette instruction ne doit pas être utilisée : Elle n'est pas gérée de la même manière par des bases de données différentes. | Cette instruction ne doit pas être utilisée : Elle n'est pas gérée de la même manière par des bases de données différentes. | ||
De plus, l'utilisation de WITH ROLLUP brise la pureté des données retournées. L'agrégation intermédiaire de génération de sous-totaux réalisée par cette instruction peut facilement être effectuée à l'aide de PHP et permet de conserver le tableau de données retourné propre (non corrompu par des données insérées artificiellement). | De plus, l'utilisation de WITH ROLLUP brise la pureté des données retournées. L'agrégation intermédiaire de génération de sous-totaux réalisée par cette instruction peut facilement être effectuée à l'aide de PHP et permet de conserver le tableau de données retourné propre (non corrompu par des données insérées artificiellement). | ||
Outres son côté pas bien standardisé, en insérant des résultats de calculs au sein des données, donnant un résultat qui est un mixe donnée et calculs métiers d'aggrégation, la compréhension du code se trouve compliqué et même les évolutions du code sur ces agrégations plus possibles lorsque se complexifient. | |||
* Utilisez $db->ifsql pour le IF SQL | |||
N'incluez pas le IF dans votre requête SQL générée. Mais utilisez plutôt la méthode $db->ifsql() pour créer un SQL IF compatible avec toutes les bases de données SQL. | |||
* Pas de DELETE CASCADE et ON UPDATE CASCADE | |||
De telles instructions SQL sont interdites car elles contournent les règles métiers de l'application. Par exemple, s'il existe une cascade de suppression entre la table A et B, lorsque l'application exécutera le code pour supprimer un enregistrement dans A, les enfants de la table B seront également supprimés. S'il y a eu un trigger Dolibarr PHP (par exemple apporté par un module externe) sur la suppression de l'enregistrement de B (par exemple pour valider la suppression ou pour exécuter une action complémentaire), la DELETE CASCADE sera exécutée sans avoir le trigger Dolibarr PHP exécuté, manquant la validation ou les actions du déclencheur PHP du module. Donc toutes les règles métiers doivent être implémentées du même côté (côté serveur PHP), c'est la raison pour laquelle les règles métier implémentées sur Database ne sont pas autorisées (même situation que le point suivant sur les triggers Database) | |||
==Règles de migration de base== | ==Règles de migration de base== | ||