2012-01-19 24 views
0

評価するいくつかのポイントを持つQA web-appを開発しています。次のカテゴリのいずれかに割り当てられます。データベースに何かの値の可変数を格納する

  • コール管理
  • 技術的なスキル
  • チケット管理このよう

は、それは彼らがダイナミックな作りではない価値が変更される可能性はありませんが、最悪のポイントは、ポイントがに似ているということです。

最初に私は各ポイントのための列を持っていた '品質'のテーブルを持っていましたが、必要条件が変更され、ちょっとブロックされました。

すべての点に値が含まれているが、将来的にはそれらの点が変わるという「評価​​」を保存する必要があります。

私は、品質テーブルに私はあなたがその与えられた値のポイントや句読点のIDのセットを持っている

1=1|2=1|3=2 

のようなものを持っている文字列のいくつかの種類を作ることができると考えました。

もっと良い方法を教えてもらえますか?

+3

他のテーブルでその関係を保存しないのはなぜ[s]は? –

+0

あなたは何を意味するのか分かりません。 –

答えて

1

この表は正規化されていません。それは1st Normal Form (1NF)違反:

Evaluation 
---------------------------------------- 
EvaluationId | List Of point=punctuation 
    1   | 1=1|2=1|3=2 
    2   | 1=5|2=6|3=7 

あなたはDatabase Normalization basicsについての詳細を読むことができます。 テーブルを正規化することができますとしては、SOにここに何度も言及

Evaluation 
------------- 
EvaluationId 
    1   
    2   

Quality 
--------------------------------------- 
EvaluationId | Point | Punctuation 
    1   | 1 | 1 
    1   | 2 | 1 
    1   | 3 | 2 
    2   | 1 | 5 
    2   | 2 | 6 
    2   | 3 | 7 
+0

私はそれについて考えましたが、これは20の評価点があれば、20の挿入された行がforeach評価につながると考えています。最適化されていますか? –

+0

はい、これは、保守、問合せ、更新、制約の適用などが容易なため、より優れています。これは標準的なデータベース設計です。 –

2

あなたが別々にアクセスする場合は、DBのフィールドに複数の値を置いてはいけません。

だから私は、2つの追加のテーブル持ってお勧め:

CREATE TABLE categories (id int AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL); 
INSERT INTO categories VALUES (1,"Call management"),(2,"Technical skills"),(3,"Ticket management"); 

CREATE TABLE qualities (id int AUTO_INCREMENT PRIMARY KEY, category int NOT NULL, punctuation int NOT nULL) 

を、あなたのデータを格納し、照会に応じ

関連する問題