53:ブール値でなく日時にする¶
テーブル設計をするとき、ブール値を多く使いがちになります。 ですがブール値でなく、日時を使うことでより良い設計にできる場合があります。
具体的な失敗¶
class Article(models.Model):
published = models.BooleanField("公開済みフラグ", default=False)
published_at = models.DateTimeField("公開日時", default=None, null=True, blank=True)
この記事(Article)テーブルには、 published
というブール値のカラムがあります。
published
というカラムを用意しなくても、 published_at
というカラムを使えば、公開されたかどうかは判定できます。
カラムも1つ減らせるので、 published_at
のみを用意するのが良いでしょう。
ベストプラクティス¶
「公開済み」など、公開日時をフラグとして使えるデータであれば、ブール値を別途用意する必要はありません。 NULLの場合は「非公開」であり、データがある場合を「公開済み」と扱います。
(中略)詳細は書籍 自走プログラマー をご参照ください