- ベストアンサー
データベースの設計で質問です。
会社テーブルがあり、会社がサービス可能な都道府県情報を保存したい場合には、 どのように作るのがいいのでしょうか? 会社テーブルに都道府県別に47個のカラムを追加する 会社テーブル id | name | pref_1 | pref_2 | pref_3 | .... | pref_47 --------------------------------------- 1 | 会社A | 1 | 0 | 1 | .... | 0 2 | 会社B | 0 | 0 | 1 | .... | 1 という感じかなと思ったのですが、カラム数が多くなってしまい、なんとなく冗長な感じがしてしまいます。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
データの持たせ方、用途を考えてから決める。 当然縦、当然横、というものでもない。 縦から横(=例)の形式にするのは、クロス集計クエリ等で容易にできますが、 横(=例)から縦の形式は、47回繰り返すなどなにか作成する手間がかかります。 メリット、デメリットもあります。 例えば、 入力データ保持するテーブルは縦、 集計などの実用に使うときは(そのテーブルを)横に、等です。 たぶん、縦に持たせておく方が融通がききます。
その他の回答 (3)
- yambejp
- ベストアンサー率51% (3827/7415)
SQL的には 会社idと都道府県idを紐づけるテーブルを用意するのが汎用性が高い持ち方です。 ただし他の方が指摘もありましたが一覧を作るのが面倒になりますが それもピボットテーブル的な処理でかのうです。
- SaKaKashi
- ベストアンサー率24% (755/3136)
都道府県の数がこの先5~10年くらいは変わりそうにないので、 列数の制限を超えなければ横持ちの方がいいです。 別テーブルにすると、いちいちテーブル間結合する必要があるので扱いにくいです。
- LancerVII
- ベストアンサー率51% (1060/2054)
こんにちは。 基本的にテーブルは横に拡張しないほうが良いです。 サービス都道府県テーブルを作成して idと連番等をキーにしてサービス可能な都道府県レコードを用意する感じでしょうか。 1,1,東京 1,2,埼玉 2,1,栃木 とすると id=1である会社Aは東京と埼玉 id=2である会社Bは栃木 とすることが出来ます。
お礼
みなさま、回答ありがとうございました。 大変参考になりました。 今回の場合は、分けたほうが汎用性がありそうです。