質問: DB設計について勉強しています。 条件が多くなる場合のDB設計方法が知りたいです。 具体例として賃貸検索をするためのDBを作成する場合、 主な条件検索は以下が考えられ、 * 賃料 * 間取り * 築年数 細かい条件になると以下のようなものがあると思います。 * バストイレ別 * エアコン * 駐車場 * 南向き * などなど 細かい条件は、おそらく20~30条件はあり、 今後追加される可能性も考えられます。 この場合カラムは条件の数だけ 無限に増やしていく設計になるのでしょうか? 適切な設計例があれば教えていただけると助かります。
回答: スピードだけを確保したいなら無限に横に伸ばしていくのが間違いない イメージとしてはエクセルで管理している感じ ただし条件が追加されるたびにテーブル構成を変更するのは無謀 例えば物件によっては利用しない項目があったり一つの項目に複数のデータを 登録したりするなら、当然、必須事項は物件テーブルに横方向に伸ばすとして オプションデータについてはマスターと中間テーブルを使って管理するとよいでしょう 物件テーブル ====== * 物件A:BID=101 * 物件B:BID=102 オプション条件 ======= * バストイレ別:OID=10001 * エアコン:OID=10002 * 駐車場:OID=10003 * 南向き:OID=10004 中間テーブル ====== 仮に物件Aがバストイレ別、エアコン完備、南向き、物件Bが駐車場付き、南向きとすると | 物件ID | オプションID | | --- | --- | | 101 | 10001 | | 101 | 10002 | | 101 | 10004 | | 102 | 10003 | | 102 | 10004 | みたいな感じになります 別の考え方 ===== SQLとしてのメリットを無視してあえて正規化をあきらめ、 データ管理だけを主眼とするなら オプションデータは一つのJSON型のカラムに叩き込むという考えもあります