2016-09-20 16 views
0

私はテーブルをIdNameStatusとしました。これがために縫い目T-SQL列挙型の数値または文字列

1  John  Online 
2  Elsy  Offline 

:C#では私は

public enum DriverStatus 
{ 
    Online = 0, 
    Offline = 1, 
    Busy = 2, 
    SoonFree = 3 
} 

は、現在のデータベースで、私はStatus列のvarcharデータ型を使用して、これは私のようなレコードを持っていることを意味ドライバの状態のための列挙型を持っています悪いと私はので、この必要性は、ステータスカラム型tinyintに変更すると思う:

  1. T-SQL Tinyintが範囲0と1バイトのみのサイズです-255。
  2. ステータスカラムでは通常varcharであるため、ソートすることはできません。そのため、列挙優先順位ではなくアルファベット順にソートされます。
  3. DriverStatus enum値の名前を変更した場合、一貫性を保つためにデータベースを更新する必要があります。我々は唯一の理由は、あなたが任意の本当に良い理由がで列挙型の文字列を持っている。ここで、0または3のようなテキストではない数です見るように、デバッグする方が簡単であることだった列挙型のカラムに対してvarcharを使用する理由

は、その後、私は他の人に尋ねましたデータベース?

+0

を可能にしました。データを理解するのが簡単です。将来の開発者またはレポート作成者であれば、値の意味を他にどのように知ることができますか?あなたが本当にそれらをソートする必要がある場合は、あなたの視点でそれらを翻訳するためにCASE WHENを使用してください。ルックアップのテキスト値よりも数値を選択する唯一の理由は、ソートの目的であると私は間違いなく考えています。 –

+1

'StatusCode'と' StatusDescription'を関連付ける別のテーブルをデータベースに持つことができます。あなたは実際にそれを使用する必要はありませんが、誰かが見ることができるでしょう。 –

+0

可能な解決策:1)データベーステーブルを表現するC#エンティティクラスを開き、コアが記述されていればそれを調べます。 2)純粋なデータベースプロジェクトの場合、列挙型キー値のための別のテーブルが存在することがあります。レポート作成者はそれに参加してユーザーフレンドリーな価値を得ることができます。 –

答えて

2

enum値にルックアップテーブルを使用することは絶対にお勧めします。

利点:

  • データベースで通常より少ない部屋が使用されています。
  • 表示値の名前を変更するのは簡単です。
  • グローバル化が可能です。
  • これ以上使用されなくなった値はリタイアしやすくなります。
    • 私のルックアップテーブルは常に三つのフィールド含まれています[ID /主キー]、[名前を、そしてうん、その理由は本当に良いです
関連する問題