在数据库中存储重复数据的正确方法

时间:2015-07-29 12:47:51

标签: mysql sql database

我有一个数据库表,其中包含以下字段的问题列表: '主题','问题'和'颜色'。

有几个科目,如“数学”或“物理”,在“问题”字段中有关于这些科目的问题。

“颜色”字段包含诸如“红色”或“绿色”之类的单词,以告诉我的Web应用程序用于主题的颜色主题,例如,我可以将数学设置为具有红色的颜色主题,然后全部使用“数学”的数据库中的记录在颜色字段中将显示“红色”。

可以想象,有数百个问题(每个用户),每个主题的色域都会重复很多。如果有另一张表格可以更有效地说出要使用的颜色:

UserID | Subject | Colour
  91   |  Maths  |  Red
  13   | Physics | Green

这是不必要的麻烦还是这是一种更好的存储主题颜色的方法,然后在第一个表格中重复显示该用户的所有“数学”主题的“红色”?

提前致谢。

2 个答案:

答案 0 :(得分:1)

规范化您的表格以创建两个:一个将问题与主题相关联,另一个将主题与颜色相关联。在示例代码中,您包含UserID。每个用户都会设置自己的颜色吗?如果是这样,你的例子是正确的。

规范化的目的不是避免多次存储值(尽管使用名称作为标识符有很多问题),但要避免多次存储值之间的关联。由于每个主题都有一种颜色,因此该对(数学,红色)只应记录一次。

答案 1 :(得分:0)

就数据规范化而言,你所做的事情并不是做这种任务的一个很好的例子。

制作两张桌子

UserID | Subject | ColourID
  91   |  Maths  |  1
  13   | Physics |  2 
  14   | Physics |  2

和另一个颜色表

ColorID | Color 
  1     |  Red  
  2     | Green

这样您就不会重复第一个表格中每个主题的颜色值。

此外,将来如果您想为任何主题提供另一种颜色,您只需更改颜色表中的一个值。

我希望这是有道理的。