Dans MySQL, est-il préférable de toujours autoriser les valeurs NULL sauf si vous savez qu'un champ est obligatoire, ou de toujours les utiliser Not Null
sauf si vous savez qu'un champ contiendra des NULL? Ou n'est-ce pas important?
Je sais que dans certains SGBD, ils disent utiliser Not Null
le plus possible, car autoriser les valeurs NULL nécessite un bit supplémentaire (ou un octet?) Par enregistrement pour stocker le statut Null.
NULL
si et seulement si laNULL
valeur a une interprétation de la chose que vous modélisez.Réponses:
Dans la plupart des bases de données, une
NOT NULL
colonne sera plus efficace en termes de données stockées pour la raison que vous indiquez, et également plus efficace pour interroger et indexer. Ainsi, à moins que vous ne souhaitiez autoriser des valeurs NULL dans une colonne, vous devez explicitement les interdire.Il y aura une légère implication sur les performances, car les
NOT NULL
contraintes supplémentaires devront éventuellement être vérifiées pour chaque ligne affectée par un INSERT ou un UPDATE, mais comme la plupart des bases de données sont relativement légères en lecture et très lues, ce n'est probablement pas un problème De toute façon, il est peu probable que du temps supplémentaire soit perçu, car il s’agit d’une opération liée au processeur, où le reste de l’opération d’insertion / mise à jour sera lié à l’entrée / sortie et donc un goulot d'étranglement beaucoup plus important) et qui vous laisse un peu de liberté. "vérification des données afin que votre code (ou le code des autres personnes) ne puisse pas mettre accidentellement des valeurs NULL là où un autre code ne les attend pas et peut donc donner des résultats incorrects en leur présence.Edit: Comme Peter le fait remarquer dans son commentaire, ce qui précède est un généralisme et pourrait ne pas s’appliquer à tous les DMBS, bien que je sois à peu près sûr que c’est le cas pour mysql et mssql. D'autres complications dans le domaine pourraient inclure des fonctionnalités telles que les tables éparses (telles que MSSQL 2008 implémentée) qui modifieront la dynamique de performance des colonnes (non) nullables.
la source
Vous devez laisser votre conception de schéma et les exigences d’application guider cette décision. Les différences de performances ne sont probablement pas perceptibles dans les deux cas dans la plupart des cas.
la source