0

データを保存する最良の方法に少し苦労しています-ユーザーから直接「生」データを送信するか、変換が必要な「コード化された」データを保存するか。以下は、患者の血圧が測定された場所を示す選択リストの具体例です。

<select id="location">
<option value="1">Office</option>
<option value="2">Home</option>
<option value="3">Hospital</option>
<option value="4">Work</option>
<option value="5">Other</option>
</select>

以前は、ストレージ変数 VARCHAR を作成し、すべて小文字の「office」、「home」、「hospital」、「work」、「other」として格納していました。しかし、先月、おそらくもっと「エレガントな」アプローチは、(上の例のように) 整数の「コード」として格納し、テーブルから読み取られたときに次のように変換することではないかと考えていました。サーバー側の翻訳:

  $location=$row['location'];
  if ($location == '1') {$location = "Office";}
  else if ($location == '2') {$location = "Home";}
  else if ($location == '3') {$location = "Hospital";}
  else if ($location == '4') {$location = "Work";}  
  else if ($location == '5') {$location = "Other";}

だからあなたへの私の初心者の質問は少し哲学的です -

  1. データを「生の」VARCHARデータとして常に/時々保存しますか、それとも整数/ブール値などで「コーディング」しますか? どちらかを行う基準はありますか?

  2. データを「コード化」する場合、サーバー側とクライアント側のどちらで「デコード」しますか?

あなたの考えを前もって感謝します。

4

1 に答える 1

0

答えは、マジック ナンバーは良くないということです。簡潔に言うと、 WTF は "4" を意味するif ($foo == 4)ので、コードで使用しないでください。

もしそうなら、この目的のために定数を使用してください:

define('HOSPITAL', 4);

if ($foo == HOSPITAL) ...

根底にある無意味な価値に直接触れなくなるからです。ただし、アプリケーションをデバッグする必要がある場合は、データベースを含むあらゆる場所でその値が表示されます。ここでは ENUM が便利ですが、PHP はサポートしていません。ただし、データベースはそうします。したがって、妥協案は、データベースでENUMを使用し、PHP で定数を使用することです。

CREATE TABLE foos (
    foo ENUM('hospital', 'office', ...)
);

define('HOSPITAL', 'hospital');

if ($foo == HOSPITAL) ...

これにより、以下が得られます。

  • 型の安全性とデータベース内のストレージの削減
  • 型の安全性と PHP での最小限の効率的な処理
  • コードの記述およびデバッグ時の完全な明快さ
于 2013-07-24T13:29:42.223 に答える