2017-05-10 10 views
0

アバターのステータスに関する更新情報をAPI経由で外部サービスに送信しています。SQL ServerとC#のルックアップテーブルの表現

アバター:私たちが送ることができる4つのステータスがあります

ID 
Name 
Age 
Nationality 
Status 

(A) Alive 
(D) Dead 
(C) Injured 
(U) Unknown 

は括弧内の文字は、ステータスが外部システムに格納されているどのようにしている - と我々は彼らにIDを送信する必要があります&その形式のステータス。

これらをSQL Serverに保存する必要があります。したがって、ステータステーブルの主キーはアバターテーブルに格納されます。

また、C#コードでステータスを表す必要があります。状況が変わることはまずありません。そのため、列挙型や辞書は、C#コードで状態を表現する適切な方法であると思います。

ステータステーブルにintプライマリキーを追加してから、(外部システムに送信される)単一の文字表現とフルネームを持つことができます。

または、プライマリキーを文字としてchar(1)に設定し、アバタテーブルのステータス列にそのキーを格納することができます。

前者は列挙型である可能性があります。後者はC#の辞書です。

いずれのアプローチでも正規化の問題はありますか。どちらのアプローチでもオブジェクト指向の用語で問題はありますか?

どちらの場合でもベストプラクティスは何ですか?

答えて

0

あなたの質問は主に意見に基づいています。何が最善であるかについての普遍的な答えはありません。

私の推奨は、セパレーションの懸念の原則に基づいています。データベースレイヤーとアプリケーションレイヤーの両方で可能な限りコンパクトな「データ」を捉えています。 「プレゼンテーションレイヤー」は、私が人間が読むことができるフォーマットで作業する場所です。これは、DateTime値の処理と同じです。 SQL Serverはこれを8バイトの数値として格納し、.Netは数値として動作します。プレゼンテーション形式にするには、To...String()ファミリを使用する必要があることがわかったときだけです。

あなたの特定のシナリオのために今すぐ。

ID私は一般的に整数ベースの形式を推奨していますが、SQL ServerのIDENTITY()にはその設定が一般的です。

実際の議論はありません。 Sql Serverの.Netとnvarcharの文字列。私はおそらく100文字未満と言うことにこれを制限します。

年齢ここでの年齢に関する質問は、キャラクターが老化するかどうかです。文字がリアルタイムでエージングする場合、これは整数ではなく、DOBのDateTimeベースの値になり、アプリケーション層はこれに基づいて年齢を計算します。

国籍これは、アプリケーション層とデータベース層の数値として最もよく使用される可能性があります。プレゼンテーションは、表示のために辞書または同様のルックアップを使用することができる。

ステータス提案したように、表示するまで番号を付けてください。列挙型、辞書などは、ルックアップには問題ありません。

また、DBスキーマのクラスプロパティに一致するようにしようとしています。最も小さいタイプ(bool、int)が上に上がり、長い文字列が最後にあります。

+0

ありがとうございます - 私の質問の肉は - ステータステーブルの主キーをintまたはchar(1)として保存しますか? int型の場合は、外部システムへの送信に必要なchar(1)に変更する必要がありますが、int型のPKが一般に優れています。 – niico

+0

@niico - 私のお勧めは、TinyIntで、CHAR(1)と同じ記憶域サイズですが、PKとインデックス(clusterdかどうか)がずっと簡単です。 –

+0

perfは可読性より重要ですか?このperfは、アバターとステータステーブルの間で結合を実行する場合にのみ関係しますか? – niico

関連する問題