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の場合は「非公開」であり、データがある場合を「公開済み」と扱います。

cover

(中略)詳細は書籍 自走プログラマー をご参照ください