PostgreSQL - 将所有内容放入一个表中?

时间:2015-06-06 05:36:50

标签: sql postgresql database-design

所以我试图学习一些基本的数据库设计原则,并决定下载USDA提供的sr27数据库的副本。该数据库存储有关食物的营养信息,以及有关如何获得这些营养价值的统计信息。

当我第一次开始这个项目时,我的想法是:好吧,我希望能够搜索食物名称,我可能想要对你最常见的营养价值做一些基本的统计建模,比如卡路里,蛋白质,脂肪等等,这个想法很简单,只需要制作3个看起来像这样的表:

  • 一张食物名称表
  • 一张共同营养价值表(1-1与名字的关系)
  • 其他营养价值表(1-1与名称的关系)

但是,目前尚不清楚这是否必要。你是否从根据这个想法对列(或值)进行分区获得了任何收益:我喜欢对名称进行搜索,所以让我们把它作为一个表来保持较少的开销,我喜欢关于常见营养价值的数据计算所以,让我们把它作为另一张桌子。 (问题1 )或者正确的索引是否会造成这种争议?

我的下一个问题是:为什么美国农业部决定使用12张桌子?这被认为是良好的数据库设计实践,还是他们最好合并很多这些表? (摘录摘自上面美国农业部链接中提供的PDF,第29页)

enter image description here

2 个答案:

答案 0 :(得分:1)

  

您是否从基于列(或值)的分区中获得了任何收益   关于这个想法:我喜欢对名字进行搜索,所以让我们把它作为一个   用于减少开销的表,我喜欢常见的数据计算   营养价值所以让我们把它作为另一张桌子。 (问题1)   或者正确的索引是否会造成这种争议?

如果您只有一个项目列表,并且想要总结其中的一些项目,那么索引是解决性能的方法,而不是任意将一些项目拆分成另一个表格。

另外,请阅读规范化。

  

我的下一个问题是:为什么美国农业部决定使用世界   12桌?这被认为是良好的数据库设计实践,还是会   他们最好合并很多这些表吗? (摘录   取自上面美国农业部链接中提供的PDF,第29页

可能是因为他们想问的问题类型与你想要提出的问题不完全相同。

他们显然有更多关于每种食物的信息 - 例如群体,营养素,体重,它们也显然跟踪源数据的来源......

答案 1 :(得分:0)

有一些与设计关系数据库相关的重要规则 - Normal forms - 可以减少一些假象并减少IO操作。这种设计通常用于OLTP数据库 - 我有可能看到可怕的慢速数据库,因为开发人员对此没有任何了解。分析数据库OLAP略有不同 - 使用了广泛的表,一些现有的OLAP数据库支持列存储。

PostgreSQL是经典的行存储数据库 - 所以一个表中的所有内容都不常见,这不是一个好策略。您可以使用view创建一些典型且经常使用的数据视图 - 因此复杂模式可以为您隐藏(透明)。