2

ID、名前、ステータスの 3 つの列を持つ名前の小さなデータベースを作成しています。

「ステータス」は、待機中、承認済み、その他の 3 つのいずれかです。

私の質問は、「ステータス」を DB に保存するための最良/最も正しい方法は何ですか? varchar 文字列または 1、2、または 3 の整数として保存し、後で DB から読み取るときにそれを待機中/承認済み/その他に変換する必要がありますか? それが理にかなっていることを願っています。助けてくれてありがとう。

4

7 に答える 7

5

tinyintそのステータスを参照するデータ型を使用するステータス テーブル (ディクショナリまたはルックアップ テーブルと呼ばれる) が必要です。外部キー制約を使用します。このようにして、リレーショナルとドメインの整合性を維持します。テーブル構造を変更せずにステータス値を追加/変更/削除できます。

状態
=============
ID値
1 待機中
2 承認済み
3 その他
ユーザー
====================
ID名status_id
1 ボビー 3
于 2012-09-17T17:55:39.337 に答える
1

という別のテーブルを作成します。

2 つのフィールドを持つステータス id INT Primary Auto Increment name varchar(30)。

ユーザー テーブルにステータスを整数で追加し、JOIN で参照します。

users テーブルのステータスを status_id に変更することもできます。

IMOこれが最も適切な方法です

于 2012-09-17T17:58:20.487 に答える
0

整数は小さくなります。整数はアプリで複数の言語などに翻訳できます。

整数良い。

ENUMをチェックしてください。そうでない場合は、正しいサイズの整数を使用していることを確認してください。

于 2012-09-17T17:55:24.123 に答える
0

一般的に言えば、次の場合を除き、これらのアイテムをテキストとして保存します。

  • それらを検索します。文字検索は、数値 (整数) 検索よりも時間がかかり、コストが高くなります。
  • それらに対して「数学」(合計、平均、標準偏差など)を実行する必要があります。数値へのキャスト/変換、計算の実行、および結果で何かを行うことは、非常にプロセス集約的です)
于 2012-09-17T17:55:35.983 に答える
0

別のルックアップ テーブルで数値を使用します。

于 2012-09-17T17:55:47.337 に答える
0

整数フィールドは varchar フィールドよりも少ないメモリ スペースを使用するため、'status' オプションを数値として保存すると、メモリ使用量がわずかに削減されます。

「ステータス」を整数で保存し、必要に応じて外部で対応する値に変換することをお勧めします。

于 2012-09-17T17:56:16.533 に答える
0

それらはそのままの形で保存する必要があると思います: enum !

例:

status ENUM('waiting', 'approved', 'other') DEFAULT 'other'
于 2012-09-17T17:56:47.683 に答える