N° erreur : 17
Niveau : Information
Constat
La nullité d’une rubrique est une valeur à part entière. L’amalgame est rapidement fait avec WinDev qui va donner une valeur aux rubriques à null : ceci est historique, avec les choix faits pour HyperFile. Il faut cependant se conformer au fonctionnement de tous les SGBD pour limiter le couplage, avec une seule technologie.
Cependant, en SQL, la recherche d’une valeur nulle, ne se fait pas de la même façon, qu’une valeur vide :
- “SELECT … FROM .. WHERE MaRubrique is null” : Sélection des enregistrement à null
- “SELECT … FROM .. WHERE MaRubrique = 0” : Sélection des enregistrement à 0
- “SELECT … FROM .. WHERE MaRubrique =
''
” : Sélection des enregistrement où la chaine est vide
Avis technique
Pour les SGBD, le moteur aura une analyse supplémentaire à faire (certes peu couteuse) sur les rubriques nullables
Ex : Avec SQL Server, les données des enregistrement sont placées différemment, si la rubrique est nullable. Le moteur s’évite une opération de ‘rebond’ pour aller chercher la donnée, si non nulle.
De plus, si nous n’avons pas la maitrise parfaite des enregistrements, nous devrons faire une double vérification lors des lectures du genre
SELECT * FROM MaTable WHERE MaRubrique is null OR MaRubrique = 0
Ceci est catastrophique pour les performances : l’analyseur de plan d’exécution déduit que l’opération est peu filtrante à cause du ‘OR’ et fera passer cette clause en fin d’exécution.
Solution à appliquer
Le réflex à adopter est d’interdire la nullité de toutes les rubriques, sauf si la valeur null est une valeur pertinente.
Cas pratiques :
- Le nom d’un client ne doit logiquement pas être null > Nous considérons qu’un client a forcément cette valeur fournie.
- Le nom de jeune fille d’un client ne doit logiquement pas être null > Nous considérons que s’il est vide, c’est que la donnée n’est pas fournie et qu’il n’est pas utile de distinguer les clients qui ont une valeur nulle ou une valeur vide.
- La température d’un frigo > La nullité a tout son sens pour ce type de rubrique, car la valeur ‘0’ est réellement une valeur et il nous faut différencier l’information ‘0°c’, d’un enregistrement où nous n’aurions pas la valeur (donc le null symbolise ‘inconnue’)
- Date de mariage > Là aussi la nullité symbolise que la personne n’est pas mariée.
- Date de création > Null impossible car nous l’imposons à la création