========================= 52:予備カラムを用意しない ========================= .. maigo:: 社内フローのシワ寄せで生まれてしまう予備カラム * 後輩W:将来的に、データベースにカラムが必要になるかもしれません。 * 先輩T:たしかにそうだね。 * 後輩W:ですので、今のうちに予備用のカラムをいくつか作っておこうと思います。 * 先輩T:それは良くないよ。あとから追加すれば十分じゃない? * 後輩W:社内の運用上、私がデータベースの操作をする権限がないので、先に十分な量を作っておいたほうがいいかなと。 * 先輩T:必要なときにカラムを足すほうが良いよ。アプリケーションの開発が大変になってしまうよ。 「 :index:`予備カラム` 」という言葉が聞こえたら、できる限り避けることを考えましょう。 具体的な失敗 ================== .. code:: python 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が入っている」と直感的にわからない * 文字列型など事前に決めた型でしか使えない * 文字列型として数値や日付を管理する必要が出る * 外部キーを貼れない * 事前に決めたカラムの大きさで使うしかない ベストプラクティス ======================== 単純に、予備カラムを使わないようにしましょう。 .. code:: python class Sale(models.Model): product = models.ForeignKey(...) bought_by = models.ForeignKey(...) .. omission::