
選択項目が、複数選択か単数選択か決まってない場合、データベースの設計はどのようにしますか?
例えば、性別や現住所の都道府県等、複数選択する可能性がないものは、親テーブルに定義しています。
例)
プロフィールテーブル
| id | 氏名 | 性別 | 都道府県 |
| 1 | 山田 | 1 | 14 |
また、絶対に複数選択の項目は、テーブルを分けます。
例)
アイテムテーブル
| id | プロフィールid | アイテム |
| 1 | 1 | 2 |
| 2 | 1 | 5 |
| 3 | 1 | 12 |
| 4 | 1 | 16 |
では、複数選択になるか単数選択になるか決めかねている項目は、どうすればいいでしょうか?
(例えば、「いちばん好きな食べ物をお選び下さい(単数選択)」を「好きな食べ物をお選び下さい(複数選択)」に変更するということは、普通にありえることですよね?)
テーブルを分けた場合、複数選択になっても問題はないですが、データを抽出するのにjoinしなければいけないので、面倒だし、パフォーマンスが悪くなる気がします。
皆さんの意見を聞かせてください。
※それとも、私の考え方自体が間違ってるのでしょうか・・・。
No.2ベストアンサー
- 回答日時:
理想を言うと、先に仕様を固めたほうが良いです。
それが難しいのであれば、#1の回答者様もおっしゃられた通り、
変更があった場合に面倒でない設計にしておくべきでしょう。
ですので、この場合でしたら分けておくのが妥当です。
(複数になった場合の面倒さは考えていただければわかると思います。)
No.1
- 回答日時:
拡張性を考えるとわけるのが妥当。
性別などスタティックなデータはかわらないのでプロフィールテーブル
でもよいですが、たとえば都道府県なんて引越せばかわるでしょ?
こういうダイナミックなデータは分けたほうがいいですよ。
(ま、運用方法によるのでどっちでもいいですが・・・)
「いちばん好きな・・・」もその類の項目が増えたり減ったり
しないなら別ですが、運用過程でその手の項目はよく変わるものです
それを考えると別テーブルで管理するほうが楽です。
(別テーブルであればフラグで管理できるので)
つまり理由が「面倒」なら、ぜひ別テーブルで管理することをお勧めします。
SQLは工夫すれば簡単に書き直せますが、拡張性のないテーブル管理は
「ひじょうに面倒」です。
「パフォーマンス」面では極度に正規化した場合、その弊害が大きいと
思いますが、個人で管理できるレベルのデータでは、パフォーマンスに
大きな差が出るほどの処理はあり得ないと思います
(きちんと最適化さえしてあれば・・・)
この回答への補足
ご回答ありがとうございました。
> たとえば都道府県なんて引越せばかわるでしょ?
引っ越しても、複数の都道府県にまたがって住むことはない(つまり一つ)なので、UPDATEするだけでよい気がしますが、間違ってますか?
> 「いちばん好きな・・・」もその類の項目が増えたり減ったり
項目の増減ではなく、その項目が複数選択か単数選択か、という問題をお聞きしております。
単数選択も、拡張性を考えるて別テーブルにするのは分かりますが、その場合、これはさすがに親テーブルと一緒でもいいだろう、というところの基準があいまいで、皆さんはどうしてるのかな、と思いました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) accessでの請求管理について 2 2022/06/13 21:51
- Excel(エクセル) EXCELピボットテーブル(複数アイテム) 1 2023/04/27 12:15
- Excel(エクセル) エクセルVBA 複数行にまたがっている選択を判定するには 2 2023/05/21 21:54
- JavaScript セレクトを全て選択されていないと、文字によるエラーメッセージを表示させるコードを調べています 2 2023/06/22 15:48
- JavaScript html javascriptにてWeb SQLを操作したい。 2 2022/12/16 17:43
- Windows 10 windowsのファイル複数選択について エクスプローラーなどでファイルを複数選択する際、 最初のフ 4 2022/05/22 16:39
- Excel(エクセル) エクセルの大きなシートでグラフを見つける 4 2022/07/28 10:07
- SQL Server DBのテーブルの設計ができず困っています。 2 2023/06/29 16:43
- JavaScript jsで診断コンテンツのページ内切り替えについて 1 2023/04/14 17:31
- その他(病気・怪我・症状) 選択肢が複数ある時や類似点があるものが 複数ある場合に逆の選択をしてしまいます。 例えば 将棋の棋士 2 2023/08/23 16:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【SQL】他テーブルに含まれる値...
-
SQLサーバに対するSQL文で抽出...
-
テーブル名が可変の場合のクエ...
-
2つのテーブルをLIKE演算子のよ...
-
Accessの構成をコピーしたい
-
同一テーブル内での比較(最新...
-
結合したテーブルをSUMしたい
-
(SQL)日数の計算
-
メインデータと最新サブデータ...
-
ExcelのMatch関数のようなもの...
-
既存データをINSERT文にして出...
-
副問合せを使わずにUNIONと同様...
-
DB2のSQLコマンドについて
-
改行を含んだデータのインポート
-
SQLのテーブルにないデータの出力
-
テーブルデータの上書きをした...
-
Access特定のテーブルを編集不...
-
PRIMARY KEYのコピー
-
SQLで、Join句で結合したテ...
-
重複データの一方を削除するSQL...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【SQL】他テーブルに含まれる値...
-
SQLで、Join句で結合したテ...
-
Accessの構成をコピーしたい
-
既存データをINSERT文にして出...
-
同一テーブル内での比較(最新...
-
SQLサーバに対するSQL文で抽出...
-
副問合せを使わずにUNIONと同様...
-
結合したテーブルをSUMしたい
-
テーブル名が可変の場合のクエ...
-
PRIMARY KEYのコピー
-
2つのテーブルをLIKE演算子のよ...
-
ACCESSのVBAにてExcelに行...
-
DB2のSQLコマンドについて
-
Excelでしりとりを作る方法
-
ExcelのMatch関数のようなもの...
-
改行を含んだデータのインポート
-
ExcelのVLOOKUP関数の動作をMyS...
-
ADO+ODBCでテーブルに接続する...
-
データ無し時は空白行にしたい...
-
Access特定のテーブルを編集不...
おすすめ情報