Ran*_*der 3 sql-server database-design
我是使用SQL Server 2012构建运营数据存储(ODS)数据库的团队的一员,我们的一些分析师将使用它来进行预测建模.ODS将包含我们制造的单一产品的制造生产数据.
我们将在ODS中拥有数百个表格.但是,我们将有一个核心表,其中包含有关每个制造项目的关键信息(生命周期信息)(每年数千万).我们的产品在一家制造工厂生产,并且在生产线上花费大约2.5小时的时间进行各种工艺.我们希望在这个核心表中存储各种各样的,制造的和制造后的信息.一个示例数据可能是产品进入特定烤箱的时间.
我们决定如何构建此表.我们可以创建一个宽表(多列)或一个窄表,其中大多数列是行(作为属性值).我从来没有设计和使用非常窄的表结构,并且列被视为表中的行.
我想要一些关于宽表和窄表的利弊的反馈.以下内容可能有助于此讨论:
每年生产的产品数量:数百万(每个产品实例将在核心表中排成一行)
是否会经常查询此表:是的,经常查询.它将是许多子表的父级.
可能的列数(或行属性):75到150+
如果有更多信息有用,我很乐意提供.
宽表,静态属性
您通过明确定义的制造流程跟踪单个产品.这个数据模型听起来非常静态,并且可以扩展到一个包含许多列的宽表,这些列始终填充数据.
狭窄的桌子,动态的属性
如果您有许多产品在制造过程中有很多变化,那么它将更适合于窄表,您可以在其中轻松添加新属性以进行跟踪.
难以查询窄表
但是,即使简单查询窄表也非常困难.例如,当该属性在100多个其他属性行中混洗时,如果需要按特定属性对数据进行排序,该怎么办?如何将所有行组合在一起形成一个"记录",然后对结果集中的记录组进行排序?
扁平表更易于查询
根据您查看和分析数据的方式,您可能会发现自己经常使用数据透视表或交叉表查询.如果是这种情况,那么为什么不先将存储表弄平呢?
或两者都做
另一个选择是同时执行这两项操作:以窄范围存储数据,并使用转换过程将其展平以便于报告.这样,您可以快速开始跟踪新属性(仅通过添加行),然后您可以更新报告表和转换过程以利用新数据.
| 归档时间: |
|
| 查看次数: |
3287 次 |
| 最近记录: |