如何组织凌乱的数据库
How to Organize a Messy Database
我知道这个问题没有简单的答案,但是如何清理没有关系、外键和大量结构的数据库?
我是 SQL 的业余爱好者,我继承了一个完全混乱的数据库。我们没有参照完整性,也没有太多关于表如何工作的逻辑。
我的数据库都是来自搭建服务器的仓库的数据。
为了让您了解我正在处理的数据类型:
- 来自客户的 EDI
- 服务器项目的原始输出
- 销售信息
- 站点信息
- 零件清单
我一直在优先考虑原始输出和 EDI 信息,并使用 SSRS 使用该信息生成报告。在短时间内,我学到了很多关于 SQL Server 和 BI Microsoft 工具(SSIS 和 SSRS)的知识。但是,我仍然是一个业余爱好者,我想建立一个可靠的数据库,它可以很好地流动并且可以独立存在。
数据仓库模型似乎是我应该采用的结构类型。
我的问题是,在淹没在数据中之前,如何处理混乱的数据库并使内容更有条理?
由于您的最终目标似乎是业务报告,并且您正在处理来自 "isolated" table 的多个来源的数据,我建议您首先汇总所有这些进入数据模型。
就个人而言,我会设计一个维度模型来构建和存储所有数据,目标是易于理解(用于报告或即席查询)。该模型应侧重于业务实体及其交易。在维度模型中,业务实体(几乎总是)是维度,而交易(指标)是事实。例如,在不知道您的模型的情况下,我猜测直接实体将包括 Customer、Site、Part,而交易将包括 ServerSale、SiteVisit、PartPurchase、PartRepair、PartOrder 等...
有关维度建模的更多信息here and here, but I suggest going straight to the source: https://www.kimballgroup.com/data-warehouse-business-intelligence-resources/books/data-warehouse-dw-toolkit/
设计好模型(并在 SQL 服务器之类的数据库中实现)后,您将从不同的来源 systems/databases 中提取数据并对其进行转换,从而将数据加载到模型中从当前结构转换为模型定义的结构,即使用 ETL 工具,如 MS Integration Services。例如,您的客户数据可能分散在 "sales"、"customer" 和 "site" 中,因此您希望聚合所有这些数据并将其加载到单个客户维度 table .在执行此 ETL 时,您应该检查您的数据是否存在您已经提到的问题,将正确的行加载到您的数据模型中,并将不正确的行丢弃到 file/log 中,以便稍后检查和更正它们。 (解决这个问题的多种方法)。
可以在 https://technet.microsoft.com/en-us/library/jj720568(v=sql.110).aspx
找到使用 SSIS 进行 ETL 入门的简单教程
因此,总而言之,您应该构建一个 data mart:
- 设计一个表示业务事实的维度模型,并且
您拥有的数据的上下文。这将极大地促进数据理解和报告,因为维度模型与业务用户的术语和心智模型非常匹配。
- 使用 ETL 工具从当前源中提取数据,对其进行处理(例如检查数据质量问题,连接来自不同来源的数据)并将其加载到维度模型中并检查是否存在问题。这将使您接近实现自动化数据集成 job/pipeline,并进行您认为适合数据的质量检查。
我知道这个问题没有简单的答案,但是如何清理没有关系、外键和大量结构的数据库?
我是 SQL 的业余爱好者,我继承了一个完全混乱的数据库。我们没有参照完整性,也没有太多关于表如何工作的逻辑。
我的数据库都是来自搭建服务器的仓库的数据。 为了让您了解我正在处理的数据类型:
- 来自客户的 EDI
- 服务器项目的原始输出
- 销售信息
- 站点信息
- 零件清单
我一直在优先考虑原始输出和 EDI 信息,并使用 SSRS 使用该信息生成报告。在短时间内,我学到了很多关于 SQL Server 和 BI Microsoft 工具(SSIS 和 SSRS)的知识。但是,我仍然是一个业余爱好者,我想建立一个可靠的数据库,它可以很好地流动并且可以独立存在。
数据仓库模型似乎是我应该采用的结构类型。 我的问题是,在淹没在数据中之前,如何处理混乱的数据库并使内容更有条理?
由于您的最终目标似乎是业务报告,并且您正在处理来自 "isolated" table 的多个来源的数据,我建议您首先汇总所有这些进入数据模型。
就个人而言,我会设计一个维度模型来构建和存储所有数据,目标是易于理解(用于报告或即席查询)。该模型应侧重于业务实体及其交易。在维度模型中,业务实体(几乎总是)是维度,而交易(指标)是事实。例如,在不知道您的模型的情况下,我猜测直接实体将包括 Customer、Site、Part,而交易将包括 ServerSale、SiteVisit、PartPurchase、PartRepair、PartOrder 等...
有关维度建模的更多信息here and here, but I suggest going straight to the source: https://www.kimballgroup.com/data-warehouse-business-intelligence-resources/books/data-warehouse-dw-toolkit/
设计好模型(并在 SQL 服务器之类的数据库中实现)后,您将从不同的来源 systems/databases 中提取数据并对其进行转换,从而将数据加载到模型中从当前结构转换为模型定义的结构,即使用 ETL 工具,如 MS Integration Services。例如,您的客户数据可能分散在 "sales"、"customer" 和 "site" 中,因此您希望聚合所有这些数据并将其加载到单个客户维度 table .在执行此 ETL 时,您应该检查您的数据是否存在您已经提到的问题,将正确的行加载到您的数据模型中,并将不正确的行丢弃到 file/log 中,以便稍后检查和更正它们。 (解决这个问题的多种方法)。
可以在 https://technet.microsoft.com/en-us/library/jj720568(v=sql.110).aspx
找到使用 SSIS 进行 ETL 入门的简单教程因此,总而言之,您应该构建一个 data mart:
- 设计一个表示业务事实的维度模型,并且 您拥有的数据的上下文。这将极大地促进数据理解和报告,因为维度模型与业务用户的术语和心智模型非常匹配。
- 使用 ETL 工具从当前源中提取数据,对其进行处理(例如检查数据质量问题,连接来自不同来源的数据)并将其加载到维度模型中并检查是否存在问题。这将使您接近实现自动化数据集成 job/pipeline,并进行您认为适合数据的质量检查。