Si j'utilise une migration pour mettre à jour une base de données et que j'ajoute un champ entier comme celui-ci:
t.integer :foo :default => 0, :null => false
Quel est l'état par défaut des enregistrements existants et nouveaux dans la base de données? J'espère que la réponse est: - Les deux liront foo comme 0.
La valeur par défaut => 0 est-elle nécessaire si j'ai: null => false?
J'essaie juste de comprendre la différence entre les deux ...
:null => false
indique à votre base de données de ne pas accepter les valeurs NULL
.
:default => 0
fait deux choses:
NULL
ou rien n'est spécifié dans une requête.Le point 2 garantit que lorsque vous enregistrez votre nouvel objet, vous avez réellement une valeur valide en place.
Pour répondre à votre question: Si vous ne voulez pas de valeurs NULL
dans votre base de données, définissez :null => false
, sinon utilisez simplement le :default
paramètre. Attention, "0" et NULL
ne sont pas les mêmes choses.
Ne pas avoir de valeurs NULL
peut être important à des fins d'indexation ou si vous devez fournir un accès direct à la base de données à un tiers.