sql - 相同的数据,两种不同的存储方式

标签 sql mysql database-design

下面的两个表都可以包含相同的数据——一整年,包括关于每个月的一些任意信息

table1 (one row = one month)
------
id
month
year
info


table2 (one row = one year)
------
id
year
jan_info
feb_info
mar_info
apr_info
may_info
jun_info
jul_info
aug_info
sep_info
oct_info
nov_info
dec_info

表A

  • 看起来更直观,因为月份是数字,但它
  • 全年数据的行数增加 10 倍。还有
  • 行更小(列更少)

表B

  • 全年数据的行数减少了 10 倍,但是
  • 单行要大得多
  • 可能更难在一个月内添加更多任意信息

在我设置的真实世界测试场景中,table1 中有 12,000 行 10 年的数据,而 table2 有 150 行。我意识到一般来说越少越好,但总是这样吗?恐怕我会忽略一些警告,如果我 promise 采用一种方式,以后会发现这些警告。我什至没有考虑磁盘使用情况或什么查询可能更快。 MySQL 更喜欢什么?有“正确”的方法吗?还是有“更好”的方法?

感谢您的意见!

最佳答案

不要考虑如何存储它,考虑如何使用它。还要考虑它将来会如何变化。存储结构应反射(reflect)使用情况。

第一个选项比第二个选项更规范化,所以我倾向于更喜欢它。它的好处是易于更改,例如,如果每个月突然需要存储第二条关于它的信息。通常这种结构更容易填充,但并非总是如此。考虑数据的来源。

如果您仅将此数据用于报告并且不需要跨月汇总数据,请使用第二个选项。

这实际上取决于数据的用途和来源。不过,一般来说,第一个选项更好。

关于sql - 相同的数据,两种不同的存储方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1190122/

相关文章:

php - 在 MySQL 中转换日期

sql - Mysql的伪代码结构?

Django:在字段上与在不同模型上存储模型属性

sql - 具有许多产品类别的站点的数据库设计

mysql - Doctrine2和where sql语句

sql - 计算精度为 99% 的数据点

php - 上传一个word文档,存储到mysql上并显示

MySQL 困难查询

SQL数据库结构

mysql - 值是否在值列表中? (Oracle SQL)