質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

5回答

5160閲覧

formのvalue値を文字列ではなく、数値でデータベースに保存するメリットとは?

stack-overflow

総合スコア29

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/11/01 01:37

formのvalue値を文字列ではなく、数値でデータベースに保存するメリットとは?

下記のような選択フォームがあり、ユーザーの選択値をDBに保存する際に、
文字列ではなく数値で保存するのをよく見かけますが、
これにはDBの容量節約以外にどのようなメリットがあるのでしょうか?

PHP

1// 定数管理ファイル 2define('OPTION_LIST', array( 3 1 => "初級", 4 2 => "中級", 5 3 => "上級", 6));

PHP

1// View(例ではbladeを使用しています) 2<select name="level"> 3 @foreach (Config::get('const.OPTION_LIST') as $key => $val) 4 <option value="{{ $key }}">{{ $val }}</option> 5 @endforeach 6</select>

DBに数値で保存しているデメリットとして、
下記のような処理が毎回必要になるのですが、
これは一般的なことでしょうか?

・選択値を表示する場合に、数値から文字列に置き換える
・「初級」で絞りこむようなSQLを書く際に、「WHERE = 1」ではわかりにくいので、
「WHERE = OPTION_BEGINNER」のように各オプションにも名前を付ける

素人考えかもしれませんが、
それなら最初から、DBに「初級」として保存しておいたほうがいいのでは?と思い質問させていただきました。

メリット・デメリットなどご回答いただけますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

数値のメリット

  • 見た目上のブレが少ない

似たような文字との混同例えば「l」と「1」や「0」と「O」などを始め、
文字列は見た目がならずしも認識と正しいとは言えない

  • インデックスがききやすい
  • オートインクリメント処理ができる
  • 拡張しやすい
  • 範囲が取りやすい(不等号やbetween)
  • 文字列な意味があるのであとから変更される可能性がある

総じてSQLとしてのデータ管理がしやすいということ。
逆にデータ効率が良い分、人が見てわかりにくくなっていくので
それに対応するのがマスターテーブルを使った正規化

投稿2018/11/01 01:49

yambejp

総合スコア114779

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2018/11/01 02:13

>インデックスがききやすい 同じバリエーションなら、インデックスが採択される可能性は同じなので、高速という表現の方が良いのでは?
stack-overflow

2018/11/01 02:20

回答ありがとうございます! 思ったよりたくさんのメリットがあるのですね。勉強になります。 >逆にデータ効率が良い分、人が見てわかりにくくなっていくので >それに対応するのがマスターテーブルを使った正規化 マスターテーブルに関してですが、 「性別」「役職」「都道府県」...のような選択フォームが1つのアプリで30個や50個ほどある場合でも、 各選択肢ごとに1テーブル用意していく、つまり「性別マスターテーブル」「役職マスターテーブル」..のようなイメージでしょうか?
yambejp

2018/11/01 03:23

都道府県:マスターとしては定番 性別:男女だけでなく「選択しない」や「その他」などの選択肢が必要 役職:微妙・・・ある程度定型化されている役職だけならよいですが組織改編で役職名はコロコロかわるのでむしろ自由入力の方がよいと思います。(等級の管理は別途する) また簡易なデータ管理として、ENUM型やSET型でも同様の効果が得られますがその場合 マスタを参照して一覧を得ることができませんのでご注意ください
guest

0

ベストアンサー

例に挙げられているデメリットは、本来は「選択肢マスタ」があれば解決するものです。
※データ上の値と、表示上の文字列を分けて管理する

データの論理的な「意味」と、表示上の「文字列」とを分離した方が、後々都合がよいことが多いのです。
例えば「初級」という意味はそのままで、表示は「ビギナー」に変えたいと思っても、意味と文字列が一致していると、修正箇所が多くなって面倒になります。表示文字列を分離していれば、単にそこの設定を変えるだけでいいのですから。

投稿2018/11/01 02:02

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

stack-overflow

2018/11/01 02:26

回答ありがとうございます! 他の回答者様にもコメントしたのですが、下記アドバイスいただけますと幸いです。 「選択肢マスタ」に関してですが、 「性別」「役職」「都道府県」...のような選択フォームが1つのアプリで30個や50個ほどある場合でも、 各選択肢ごとに1テーブル用意していく、つまり「性別マスターテーブル」「役職マスターテーブル」..のようなイメージでしょうか?
tacsheaven

2018/11/03 05:01

いえ、そういう場合は「種別」かなにかカラムを追加して、まとめるでしょうね。 ※都道府県の場合は別にするかも知れませんが
stack-overflow

2018/11/05 03:41

再度回答ありがとうございます! 作成予定のWebアプリでは選択フォームがたくさんあるので、 アドバイス頂いた方法で構築して行こうと思います。 勉強になりました!
guest

0

上で回答されている通りですが…

例えば、仕様変更で文言が変わった場合を考えると
影響範囲が限定的になるって話もありますね。
あと、英語化する場合とか。

投稿2018/11/01 02:09

takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

stack-overflow

2018/11/01 03:41

回答ありがとうございます! 皆さん数値のほうがいいという意見でしたので、 数値での保存を採用させていただきます。
guest

0

初級、中級、上級といった文字で情報を持つと、級の名称が変わったとか、級が増えたり、他の言語に移行するとプログラム・コードを変更が必要になったりと保守性・移植性が劣ります。
数値 → 顧客ID とすると、企業合併、結婚や養子縁組などにより顧客名が変わった時、顧客マスタの顧客名を変更するだけで済みます。

投稿2018/11/01 02:08

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

stack-overflow

2018/11/01 02:52

回答ありがとうございます! 速度だけでなく、保守性・移植性にも優れるんですね。 参考にさせていただきます!
guest

0

メリットとしては、お書きの容量節約と、速度向上ですね。
どちらかというと速度向上が目的ではないかと。

デメリットは挙げてらっしゃる内容で良いと思います。

投稿2018/11/01 01:54

otn

総合スコア84505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

stack-overflow

2018/11/01 02:28

回答ありがとうございます! 疑問に思いつつ、周りにならって数値で保存していたのですが、 今回皆様に頂いた回答で、「理由」を知ることができて勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問