3

我需要为我的项目设计一个新表,它基本上包含每个键的 41 个数字的列表。列表中的第一个数字是一些距离测量值,而其余数字表示百分比的加权箱,如下所示:

  • 前十个百分位数各为 1%
  • 接下来的十个分别是 2%
  • 接下来的十个是每个 3%
  • 接下来的十个都是4%

总和为 1*10 + 2*10 + 3*10 + 4*10 = 100%

该数据的正常用法是对 bin 进行垂直求和。(即 key1-bin1 + key2-bin1 + .. ; key1-bin2 + key2-bin2 + .. ; 等等)

现在,假设这永远不会改变,并且总会有 40 个具有相同 bin 分散度的 bin,哪个更好?:

  • 每个键一行 - 键,距离,bin1,bin2 ... bin40

或者

  • 每个键 41 行,形式为 key、bin_number、value 其中 bin_number -1 保存距离

第一个选项的明显优势是减少了数据重复,而且我真的不喜欢我的“-1”解决方法。

但这感觉真的很脏而且非常“硬编码”,我记得有人告诉我数据库以某种方式“更喜欢”第二个选项,并且在压缩、索引等方面比第一个选项更好地处理它。(加上查询将在第二个选项中可能看起来更好,但我可以忍受我的代码中丑陋的查询)

谢谢!

4

1 回答 1

3

您选择答案的关键是“假设这永远不会改变”。如果这是真的,那么您应该使用多列表。没错,MySQL 和其他 dbms 系统可以很好地处理标准化数据(您的第一个选项)。但是,如果我正确理解您的问题,您将始终拥有每次观察的 41 个数据点。这意味着您的第一个选项每次观察 将始终有 41 行。

MySQL 或其他 DBMS 没有魔法。他们只是研磨数据。当然,他们做得非常有效。但是行数是观测值的 41 倍是很多。

如果您有时每次观察有一个、有时是三个、有时是十个数据点,您会选择归一化的短行选项。

于 2012-07-24T12:18:53.743 回答