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

标签 mysql sql database

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

有多个科目,例如“数学”或“物理”,并且“问题”字段中有针对这些科目的问题。

“颜色”字段包含诸如“红色”或“绿色”之类的单词,以告诉我的 Web 应用程序对某个主题使用什么颜色主题,例如我可以将数学设置为红色颜色主题,然后将所有颜色设置为红色数据库中带有“数学”的记录的颜色字段将为“红色”。

正如您可以想象的那样,(每个用户)有数百个问题,每个主题的色域都会重复很多次。如果有另一个表格来说明要使用什么颜色,这样会更有效吗:

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

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

提前致谢。

最佳答案

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

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

关于mysql - 数据库中存储重复数据的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31700848/

相关文章:

mysql insert from select 内存不足?

MySQL:如何从另一个查询中减去 JOIN 的结果?

mysql - 在 Mac OS X El Capitan 上为 python 构建 mysql 时出错

sql - 在一列中显示所有表 SQL 的所有文本字段

mysql - 省略 SQL 中的某些记录

android - 如何在 Android 中调用 onUpgrade() 以使用 sqlite 数据库

database - 如何自动检测和删除 Postgresql 中重复的外键约束

mysql - 有没有办法将 mysql 数据库从 Windows(Wamp) 移动到 Ubuntu(Xampp)?

php - 我们如何在后台运行sql查询

sql - 带求和的左连接表 - 导致问题