2012-01-19 94 views
0

我正在開發一個質量保證網絡應用程序,該應用程序有一些要評估分配給以下類別之一的點。在數據庫中存儲可變數量的值

  • 呼叫管理
  • 技術技能
  • 票務管理

由於這是不太可能改變它不值得讓他們動態的,但最糟糕的一點是,點是喜歡。

首先,我有一張'質量'表,其中每個點都有一個列,但隨後必要條件發生了變化,我有點被阻止。

我必須存儲所有點與他們的價值的「評估」,但也許在未來,這些點將改變。

我認爲在質量表,我可以做出某種字符串有類似的東西

1=1|2=1|3=2 

如果您有集,給定值的點和標點符號的ID的。

有人能指點我一個更好的方法來做到這一點嗎?

+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。 表可以歸爲:

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個插入的行進行評估。這是優化的嗎? –

+0

是的,這樣比較好,因爲它更易於維護,查詢,更新,強制約束等。這是標準的數據庫設計。 –

2

如這裏的SO多次提及,從來沒有把一個以上的值轉換成數據庫字段,如果你想SEPERATELY訪問它們。

因此,我建議有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) 

然後存儲並相應地查詢數據