前提条件
ユーザ毎に提案を管理できるウェブアプリケーションの新規開発案件
があるとします。
このデータベースの内容は以下のような定義をしたとします。
データベースの構造
- users ユーザテーブル
id、username等・・・
- articles 提案書
id、user_id、title、content等・・・
このアプリケーションは将来的な拡張性を考慮して開発するようにとの事ですが
将来的に何をするのか?具体的なビジョンはなく開発者自身で推測の上
考えなくてはいけない状況だとします。
考えた末、ユーザの機能として既存の提案書以外に日報やメモなどこれに類似するような
機能は追加されても対応できるようにと考えるようになりました。
仮に日報機能を追加する事になった場合、対応する方法として主に以下の2つの方法が上がります。
- 方法1
新たにreportsテーブルを作成する
- 方法2
articlesテーブルにcategoryカラムを追加し、この値がproposalの場合は提案、
reportの場合は日報である切り分けを行う事で共用して使えるようにする。
聞きたい事
どれが正解だとは決められませんが、皆さんはどちらの方法を選択されるか理由も含めて教えて欲しいです。
補足
articlesテーブルに限らず、何かしら親のテーブルに対するステータスを管理する子テーブルなど
同じようなテーブルが機能追加の度に増える事に対し、保守・拡張性について考えた場合、理由もなくこれが正しいのか疑問に思う時があります。
時々、Wordpressのwp_optionsのようにステータスや設定に関する情報は1テーブルで管理した方が、拡張性が良いのでは・・・と思う時もあります。
皆さんのご意見をお聞かせ願います。