データベースにチェックボックスのON、OFF状態を
保存しようとしているのですが、
やり方が色々あり、どのやり方が一番いいのかわかりません。
調べたところ、大きく以下の4つがあることがわかりました。
-----------------------------------------
方法1 チェックボックス分カラムを用意する
-----------------------------------------
例
id name flag4 flag3 flag2 flag1
15 なまえ 1 1 0 0
-----------------------------------------
方法2 ビット演算を使う
-----------------------------------------
id name bit
15 なまえ 12
-----------------------------------------
方法3 カンマで区切ってデータを入れる
-----------------------------------------
id name check
15 なまえ 3,4
-----------------------------------------
方法4 チェックボックス管理テーブルを作る
-----------------------------------------
main_tb
id name
15 なまえ
check_tb
id check
15 4
15 3
それぞれ、一長一短があると思うのですが
それぞれのメリット・デメリット、一般的にどの方法が好まれているのか等
アドバイス頂けると嬉しいです。
No.1ベストアンサー
- 回答日時:
あくまで私見ですが参考までに
→一般的には(1)が好まれるのではないでしょうか
往々にして選択肢というのはシステムの運用が始まると拡張することがないため
1レコードに個別に埋め込むのが感覚的にももっとも適しているため
メリット:
特定のレコードに対する有無だけをチェックする場合はもっとも効率的
データ構造が単純なためイメージしやすい
(ようはエクセルちっくなデータだと思えばよいので)
デメリット:
項目が増えるといちいちカラムを増やさないといけず、多くの選択肢がある
場合は物理的に対応できないなど、スケーラビリティが低い
冗長なもち方のため集計や抽出の際にあまり効率的なSQLをかけない
→次に(2)と(3)はほぼ同様のケースであまりSQLライクではありません
とくに(3)のような持ち方だとおおよそSQLとしての集計には向きません
(例示の(2)はビット処理じゃないですね?1と2がチェックなら3?)
メリット:
カラム数がへらせる
データの拡張が容易
デメリット:
とくにインデックスがききにくいため大量のデータ処理にはむかない
データに制限をつけにくい
→個人的には(4)を使うケースが多いです
メリット:
集計が簡単で簡便なSQL文で表現できる
拡張性はたかい
デメリット:
かならず集計のSQLが必要になるためなれないとSQL文が書きにくい
ただし最初に書いた通り、拡張する必要があるかどうかで(1)の方を選ぶことも
多々ありそれはケースバイケースで設計時点で調整します
回答有り難うございます。
メリット・デメリットをご丁寧にありがとうございます。
例示2のbit 12は 1100を10進数として挿入したとして考えた場合です。
一長一短あるので、使用するシーンで使い分けていくのがよさそうですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- Excel(エクセル) エクセルVBAでチェックボックスにチェックを入れる 1 2022/09/14 00:52
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- JavaScript Q&Aの掲示板を作成していてヤフー知恵袋やgoo質問のように質問ごとにURLを生成したい 5 2023/08/04 01:22
- MySQL テーブル作成です。どこかのスペルが間違っているか記号など スペースかな? 1 2022/10/01 05:08
- PHP コメント機能に返信欄を矢印で追加したい 1 2022/05/09 21:17
- PHP $_SESSIONに渡した後はそのまま使っても問題ありませんか? 3 2022/11/08 22:17
- PHP PHPで入力フォームでデータを確認表示画面まで送る流れを日本語で理解したいのです。 1 2023/05/29 19:12
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
複数テーブルのGROUP BY の使い...
-
SQLサーバから、項目の属性(型...
-
副問合せの書き方について
-
WordpressのContact form 7でzi...
-
[MySQL] 1対多のリレーションで...
-
MySQL NULLだけをカウントして...
-
Yahoo .comの idには年齢制限、...
-
VIEWの元のテーブルのindexって...
-
android.R.id.text1はどこにある
-
液晶テレビの色鉛筆の落書きを...
-
JOIN後同一名カラムから値がと...
-
URL と行番号の指定
-
1対多結合で多を絞り込み条件と...
-
green houseのGH-YMP24-GD...
-
mysqlで特定のカラムから下4桁...
-
別テーブルからSELECTした値を...
-
学校の課題のSQLでVIEWの意味と...
-
MySQL 複数個の値を取るカラム...
-
複数JOINしているとCOUNTが正し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
SQL Left Join で重複を排除す...
-
副問合せの書き方について
-
SQLサーバから、項目の属性(型...
-
VIEWの元のテーブルのindexって...
-
select文のwhere句に配列を入れ...
-
selectした大量データをinsert...
-
センノシド異性体構造式
-
Unionした最後にGROUP BYを追加...
-
insertを高速化させたい
-
SQLにて特定の文字を除いた検索...
-
マイクラPC版のコマンドで効率...
-
ある条件の最大値+1を初番する...
-
inner joinをすると数がおかし...
-
sqlで、600行あるテーブルを100...
-
エクセルの関数について教えて...
-
Access パラメータクエリをcsv...
-
URL と行番号の指定
-
複数テーブルのGROUP BY の使い...
-
PL/SQLの変数について
おすすめ情報