52:予備カラムを用意しない¶
プログラミング迷子: 社内フローのシワ寄せで生まれてしまう予備カラム
後輩W:将来的に、データベースにカラムが必要になるかもしれません。
先輩T:たしかにそうだね。
後輩W:ですので、今のうちに予備用のカラムをいくつか作っておこうと思います。
先輩T:それは良くないよ。あとから追加すれば十分じゃない?
後輩W:社内の運用上、私がデータベースの操作をする権限がないので、先に十分な量を作っておいたほうがいいかなと。
先輩T:必要なときにカラムを足すほうが良いよ。アプリケーションの開発が大変になってしまうよ。
「 予備カラム 」という言葉が聞こえたら、できる限り避けることを考えましょう。
具体的な失敗¶
class Sale(models.Model):
product = models.ForeignKey(...)
bought_by = models.ForeignKey(...)
yobi_001 = models.CharField("予備1", max_length=1023)
yobi_002 = models.CharField("予備2", max_length=1023)
yobi_003 = models.CharField("予備3", max_length=1023)
yobi_004 = models.CharField("予備4", max_length=1023)
yobi_005 = models.CharField("予備5", max_length=1023)
この例では今後のことを考えて yobi_
という予備カラムが5つあります。
将来的に予備カラムが使われるようになったとして、以下の問題があります。
カラム名が意味を説明できない
「
yobi_001
はキャンペーンIDが入っている」と直感的にわからない
文字列型など事前に決めた型でしか使えない
文字列型として数値や日付を管理する必要が出る
外部キーを貼れない
事前に決めたカラムの大きさで使うしかない
ベストプラクティス¶
単純に、予備カラムを使わないようにしましょう。
class Sale(models.Model):
product = models.ForeignKey(...)
bought_by = models.ForeignKey(...)
(中略)詳細は書籍 自走プログラマー をご参照ください