2012-03-20 22 views
2

外部キーにはデータ型varbinaryを使用できますか? なぜですか? Falk to Scoreテーブルを持つEvalAnswerテーブルがあります。 スコアは機密情報であり、暗号化する必要があります。暗号化/解読はasp.net(4.0)プロジェクトで行われ、SQL Server(2008)では行われないため、データ型はvarbinaryである必要があります。外部キーとしてvarbinaryを使用

EDIT:詳細情報

もちろんです。 私は次の列を持っています:Id、Score、ScoreText、Description、Index Idは増分カウンタです。 (PK) スコアは、スコア(1など)のスコアです。 ScoreTextは文字としてのスコアです(スコア1は文字Aに等しい)。 説明はすべてのスコアのコメントです。

このような理由は特別な状況があり、質問の1つが1-4のスコアしか持たないなどの特殊な状況があり、残りは1-5です。

すべての質問にはスコア1がありますが、その説明は別の質問1とは異なります。 質問が5つある場合、スコア表に5 * 5行が表示されます。 (すべて説明が異なる)

私がページを読み込むと、すべてのドロップダウンリストに対して正しいスコアリング(説明付き)が得られます。通常1-5。 しかし、ユーザーがスコアリングを保存したときは、ページが読み込まれたときにすべての質問に対して以前に保存されたスコアを知る必要があります。 したがって、私はEvalAnswerと得点との間に関係があります。

重要ではないスコア表に関する質問があります。 しかし、いくつかはあります。それらのために私はEvalAnswerとScoreの関係を隠す必要があります。

悪いデザインは、 と同じテーブル(スコア表)を使用して、すべての質問に利用可能なスコアを表示するということです。 と、ユーザーが選択した内容を保持するものとしても使用できます。

してくださいアドバイスを(これは得点にEvalAnswerからFKである).......

+2

これは法律ではありませんが、非常に悪い考えです。 – Oded

+0

なぜ、それは悪い考えですか? 他の解決策をお勧めします。私のデザインに関する詳細が必要な場合は、お尋ねください。 –

+0

OK。スコアに参加する必要がある理由を説明してください。 – Oded

答えて

0

私はEvalAnswerテーブルからスコアテーブルと参照にこのフィールドをID int列を追加することをお勧めします。

これは、あなたが見ることができるようにあなたのテーブルのスクリプトが

CREATE TABLE Score (
    Id int not null identity primary key 
, Code varbinary(max) --> The new field containing the encrypted information 
, Score int 
, ScoreText varchar(5) 
, Description varchar(max) 
, Index int) 

CREATE TABLE EvalAnswer (
    Id int not null identity, 
    ScoreId int not null references Score(Id) 
    ... 
) 

に変更することを意味し、「旧」Idフィールドは今Code場となっています。新しいフィールドは、一意の番号、外部キーでvarbinaryカラムを用いに対するものは何もありません

を含むidentity列ですが、それは照会し、はるかに困難デバッグようになります。

また、暗号化BLOBの保存時にヒットする可能性のあるインデックスの幅には900バイトの制限があります。

+0

こんにちはフィリップ私はすでにEvalAnswerからスコアを取得しています。私が持っているこのイドは、私が守る必要のあるものです。しかし、私はasp.netアプリで暗号化/復号化する必要があります。だから私は列をvarbinaryに変更する必要があるので、私の質問です。ですから、私のFKをvarbinaryとして使う以外の方法はありませんか? –

+0

EvalAnswerのスコアキーテーブルに2つの外部キーがありますか? –

+0

いいえ私には1つしかありません。私があなたを誤解した場所はわかりません。 しかし、それでもvarbinaryである必要があります。 –

関連する問題