我是使用 SQL Server 2012 构建操作数据存储 (ODS) 数据库的团队的一员,我们的一些分析师将使用该数据库进行预测建模。 ODS 将包含我们制造的单个产品的制造生产数据。
我们将在 ODS 中有数百个表。但是,我们将有一个核心表,其中包含有关制造的每个项目(每年数千万)的关键信息(生命周期信息)。我们的产品是在制造工厂制造的,沿着生产线经过各种流程大约需要 2.5 小时。我们想在这个核心表中存储各种单独的制造和后期制造信息。一个示例数据可能是产品进入特定 toastr 的时间。
我们要决定如何设计这张 table 。我们可以创建一个宽表(多列)或一个窄表,其中大多数列是行(作为属性值)。我从未设计和使用过非常窄且列被视为表中的行的表结构。
我想要一些关于宽 table 与窄 table 优缺点的反馈。以下内容可能有助于讨论:
每年生产的产品数量:数百万(每个产品实例都会在核心表中排成一行)
是否经常查询此表:是的,经常查询。它将是许多子表的父表。
潜在的列数(或行属性):75 到 150+
如果更多信息有用,我很乐意提供。
最佳答案
宽表,静态属性
您正在通过明确定义的制造过程跟踪单个产品。这个数据模型听起来非常静态,并且适用于包含许多始终填充数据的列的宽表。
窄表,动态属性
如果你有很多很多产品在制造过程中有很多变化,它会更适合狭窄的 table ,在那里你可以轻松地添加新的跟踪属性。
窄表查询困难
然而,即使是对窄表的简单查询也非常困难。例如,当某个属性在 100 多个其他属性行中混洗时,如果您需要按某个属性对数据进行排序,该怎么办?您如何将所有行放在一起形成一个“记录”,然后对结果集中的记录组进行排序?
扁平表更易于查询
根据您需要如何查看和分析数据,您可能会发现自己经常使用数据透视表或交叉表查询。如果是这样,那么为什么不从一开始就将存储表展平呢?
或者两者都做
另一种选择是两者兼而有之:严格存储数据,并使用转换过程将其展平以便于报告。这样您就可以快速开始跟踪新属性(只需添加行),然后您就可以更新报告表和转换过程以利用新数据。
关于sql-server - 表设计 - 宽表与作为属性的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16447903/