質問: データベース設計徹底指南 > > ある物事に対する事実の集合 > > > 「通知を受け取るユーザーの集合」だと考えれば、1? 「ユーザーの通知設定」というデータの集合だと考えれば、2? 第1回 データベース設計とは:初めてのデータベース設計|gihyo.jp ... 技術評論社 > > 概念設計では,データベースによって管理の対象とするものを現実の世界から抽出して概念モデルを作成します。 > > > 管理の対象は、ユーザーごとの通知設定。 レコードで管理するのか、行で管理するのかは、概念モデルの時点では判明しない?
回答: 2の場合のデメリットとして、設定の種類が増えるたびに、 このようなテーブルが増大してしまうことが考えられます。 対して、1の場合は新たな設定項目に対する列を追加するだけで済みます。 増大するのがテーブルではなく列になるだけといってしまえばそれまでですが、 この手の設定は一度に複数利用することも多いので、 1ユーザの設定を1レコードの問い合わせで取得できるこちらの方が性能上有利になります。 また、細かいテーブルが大量に増えると、リバースツールでER図を生成した際 ごちゃごちゃするなど、設計情報を共有する観点からもいいことはありません。 とはいえ、USERテーブルに設定項目の列だらけになって名前や住所など、 より重要度の高いはずの列が埋もれてしまうのも、個人的にはあまり好きではありません。 私の場合は、USERテーブルと1:1対応するUSER_SETTINGSなどのテーブルを別途作ると思います。 (また、焦点がぼやけないよう、USER_SETTINGSの詳細は概念モデリング時には省略しておきます) データベース設計の際には、起こりうる変更の可能性にどれだけ耐えられるかという 観点からも設計検討されるとよいかと思います。