在数据库中存储可变数量的值

时间:2012-01-19 13:20:20

标签: php mysql metaprogramming methodology

我正在开发一个QA网络应用程序,它将评估分配给以下某个类别的评估点。

  • 通话管理
  • 技术技能
  • 票务管理

由于这不太可能改变,因此不值得让它们变得动态,但最糟糕的一点是分数是这样的。

首先,我有一张'质量'表,每个点都有一列,但后来必须改变,我有点受阻。

我必须存储具有所有价值的“评估”,但未来可能会改变这些点。

我认为在质量表格中我可以制作某种具有类似内容的字符串

1=1|2=1|3=2

您拥有该给定值的点ID和标点符号的集合。

有人能指出我这样做的更好方法吗?

2 个答案:

答案 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)

然后相应地存储和查询您的数据

答案 1 :(得分: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