質問: MySqlデータベースで店舗情報を管理しようとしています。 店名や住所、電話番号やFAXなどをそれぞれ列として作ろうと思っていたのですが、 どんどん増えて現状50列以上になる見込みです。 (shop_id, key, value) から成るテーブルを作って列数を減らそうかとも思いましたが Entity-Attribute-Value は駄目だという評判も多くどのようにすればいいのかわかりません。 店名などの重要な情報のみ shops テーブルに格納し、座席数や喫煙可などの余り重要でない列のみ shop_details に分けて join する位しか思いつきませんが、このようなケースではどのようにして設計すればいいのでしょうか? また、列数の常識的な上限はどのくらいなのでしょうか? --- 追記 具体的な列を列挙します(49列) ID 固有番号 グループID ログインID パスワード 店名 よみがな 運営会社 運営会社よみがな 担当者名 担当者よみがな 担当者連絡先 メイン画像 サムネイル 営業時間 定休日 予約制か 喫煙可か 席数 席の種類 電話番号 FAX E-Mail 求人電話番号 求人メールアドレス 郵便番号 県名 住所 建物名 緯度 経度 エリア区分 アクセス方法 ウェブサイト Twitter Facebook Instagram LINE 紹介文 PR 一言メッセージ カテゴリID ジャンルID 会員グレード 備考 登録日 更新日 削除日 公開状態
回答: アプリケーションで各情報がどの様に扱われるかによって適切な設計は変わりますが、 設計完了までに情報が固まり、あくまで店舗ごとに情報を扱うようなケースであれば、列数は100でも200でも問題にならないと思います。 また、店舗数がそんなに多くないのであれば、列の追加によるインデックスの貼り直しコストもそんなに大きな問題にはならないので、列数を気にしないという方向はありだと思います。 > > (shop_id, key, value) から成るテーブルを作って列数を減らそうかとも思いましたが > > > 管理画面から動的に列の変更をしなければならないようなケース以外だとデメリットの方が大きくなると思います。 それならば、項目ごと、出来れば項目の分類ごとにテーブルを用意して、店舗IDをキーにしてjoinするような方法の方がまだいいかなと思いますね。