2009-12-19 3 views

Répondre

1

L'inconvénient de permettre à une colonne d'être nulle affecte la logique métier - nul signifie effectivement qu'il n'y a pas de valeur associée, mais il pourrait y avoir. Si ce n'est pas correct pour vos règles métier, la colonne ne doit pas autoriser l'existence de valeurs nulles.

Les valeurs NULL sont dans certains cas connues pour être coûteuses à interroger, et certaines bases de données n'évaluent pas deux colonnes dont les valeurs de null sont équivalentes.

BTW: Bien que vous puissiez définir une contrainte DEFAULT pour rendre la valeur de la colonne nulle, cela représente plus de travail que nécessaire. Il y a trois éléments à une définition de colonne lors de la création ou la modification d'une table:

  1. Le nom de la colonne
  2. Le type de données pour la colonne
  3. Le optionalité - si la colonne permettra des valeurs nulles d'exister
+0

La définition d'une valeur NULL par défaut est correcte. Ce qui ne va pas, c'est de faire un SELECT FROM TABLE OERE COLONNE EST NULL .... cela peut être très lent en effet. –

0

est-il une bonne pratique pour définir la valeur par défaut de un champ/colonne comme NULL dans MySQL?

Je pense que oui. Parce que NULL prend la mémoire minimale quel que soit le type de données

+1

Je pense que non ;-) L'économie d'espace est généralement hors de propos, mais le risque d'obtenir des résultats étranges lorsque vous ne savez pas comment utiliser les valeurs nulles augmente. – Brimstedt

3

Il n'y a aucun inconvénient à le définir comme par défaut, car cela importe juste une fois que vous ne lui définissez pas de valeur.

Si la valeur devient NULL, cela peut avoir des implications sur la recherche. C'est parce que MySQL regarde à travers les fichiers, et sauter des champs avec une longueur connue est facile, comme vous venez de sauter à travers cette longueur. Mais si une colonne peut contenir NULL, alors cela doit être vérifié avant que le saut ne soit fait. Cela ne prend pas trop de temps, donc je ne pense pas que cela ait autant d'importance. L'avantage est évidemment gain de place, mais le stockage est bon marché. C'est 2009 après tout. Le moyen le plus rapide de rechercher des choses est de définir toutes les colonnes NOT NULL, et plutôt utiliser des choses comme des chaînes vides et -1 (ou même 0, si cela ne veut rien dire d'autre) pour stocker des valeurs nulles. Cela ne prend pas beaucoup plus d'espace, et c'est toujours plus rapide, car la longueur des données est garantie. Cependant, si votre base de données est relativement petite et n'a pas besoin de filtrer 800 millions de lignes en 2 millisecondes, n'hésitez pas à utiliser les valeurs NULL. ;)

+0

+1 .. bon raisonnement – Xinus

0

En fonction de votre SGBD, NULL sera la valeur par défaut. Autrement dit, une valeur NULL sera stockée chaque fois que vous ne fournissez pas de valeur, et aucune valeur par défaut n'a été définie (et, bien sûr, la valeur NULL n'est pas interdite).

Le coût réel de NULLS vient quand les valeurs doivent être interprétées. Utilisations SQL utilise une logique à trois valeurs étrange et parfois contre-intuitif dans l'évaluation des expressions où NULLs pourraient être impliqués. La troisième valeur est UNKNOWN, et la partie contre-intuitive est que NOT UNKNOWN est égal à UNKNOWN. Si vous ne faites pas attention, vous pouvez obtenir de mauvais résultats.

Une statistique comme SUM (COLUMN) peut être sous-estimée si certaines des entrées ont la valeur NULL dans la colonne, et ces entrées ont une valeur dans le monde réel. Mais le vrai coup de pied dans la tête vient de la tendance des concepteurs de bases de données et des programmeurs à utiliser NULL pour transmettre une sorte d'information significative, au lieu de simplement "NO DATA HERE". Cela provoque presque toujours des erreurs logiques. Si vous avez des données, stockez les données. Si vous n'avez pas de données, et aucun choix à ce sujet, enregistrez une valeur NULL. Et ne vous laissez pas tromper par l'absence de données.

0

L'omission manuelle des définitions de colonnes NOT NULL a parfois un impact significatif sur les performances. J'ai donc pris l'habitude de l'inclure partout où je le peux.

Questions connexes