2011-05-09 45 views
4

背景:如何從多個數據庫中彙總數據?

我應該說這是說我是而不是試圖讓某人爲我做我的工作。我覺得我處在一個十字路口,有多種方式可以實現我的目標,但我不確定哪些是「標準」的,或者我的相對有限的知識是否缺乏。

我已經有了一個已經進行了6個月的系統了,自1月11日以來,數據庫模式一直非常穩定。 (我也不知道是我正在作出重大失誤創造了每個月每月會計週期對應的數據庫,但我只是沒有足夠的專業知識做,否則

NOW:

我的老闆正在要求我創建由所有月度數據庫記錄組成的年度報告。

我開始做:

我把一個元數據架構,並提供足夠的信息,我會寫信給執行ETL操作的應用填充它。

這裏是什麼樣子:

USE [DAMain1] 
GO 
CREATE TABLE AccountingPeriod (
    Id INT PRIMARY KEY NOT NULL, 
    Name VARCHAR(255) NOT NULL UNIQUE, 
    DateStart DATE NOT NULL, 
    DateStop DATE NOT NULL 
) 
GO 
INSERT INTO AccountingPeriod VALUES 
    (1, 'Jan11', '1/1/2011', '1/31/2011') 
    ,(2, 'Feb11', '2/1/2011', '2/28/2011') 
    ,(3, 'Mar11', '3/1/2011', '3/31/2011') 
    ,(4, 'Apr11', '4/1/2011', '4/30/2011') 
    ,(5, 'May11', '5/1/2011', '5/31/2011') 

CREATE TABLE [DBServer] (
    Id INT PRIMARY KEY NOT NULL, 
    Name VARCHAR(255) NOT NULL UNIQUE 
) 
GO 
INSERT INTO DBServer VALUES 
    (1, 'Aaron.directagents.local') 
GO 
CREATE TABLE [DBInstance] (
    Id INT PRIMARY KEY NOT NULL 
    ,DBServerId int NOT NULL REFERENCES DBServer(Id) 
    ,SchemaName VARCHAR(255) NOT NULL 
    ,CatalogName VARCHAR(255) NOT NULL 
    ,ConnectionString VARCHAR(2000) NOT NULL 
) 
GO 
INSERT INTO DBInstance VALUES 
    (1, 1, 'dbo', 'DADatabaseR2', 'Data Source=aaron\sqlexpress;Initial Catalog=DADatabaseR2;Integrated Security=True') 
    ,(2, 1, 'dbo', 'DADatabaseR3', 'Data Source=aaron\sqlexpress;Initial Catalog=DADatabaseR3;Integrated Security=True') 
    ,(3, 1, 'dbo', 'DADatabaseMarch11', 'Data Source=aaron\sqlexpress;Initial Catalog=DADatabaseMarch11;Integrated Security=True') 
    ,(4, 1, 'dbo', 'DADatabaseApr11', 'Data Source=aaron\sqlexpress;Initial Catalog=DADatabaseApr11;Integrated Security=True') 
GO 
CREATE TABLE DADB (
    Id int PRIMARY KEY NOT NULL, 
    Name VARCHAR(255) NOT NULL UNIQUE, 
    AccountingPeriodId int NOT NULL REFERENCES AccountingPeriod(Id), 
    DBInstanceId INT NOT NULL REFERENCES DbInstance(Id) 
) 
GO 
INSERT INTO DADB VALUES 
    (1, 'Direct Agents Database for January 2011', 1, 1) 
    ,(2, 'Direct Agents Database for February 2011', 2, 2) 
    ,(3, 'Direct Agents Database for March 2011', 3, 3) 
    ,(4, 'Direct Agents Database for April 2011', 4, 4) 
GO 
CREATE VIEW DADBs AS 
SELECT 
    DA.Name [Database] 
    ,AP.Name [Accounting Period] 
    ,AP.DateStart [Start] 
    ,AP.DateStop [Stop] 
    ,DS.Name [Server] 
    ,DI.SchemaName 
    ,DI.CatalogName 
    ,DI.ConnectionString [Connection] 
FROM 
    DADB DA 
    INNER JOIN AccountingPeriod AP ON DA.AccountingPeriodId=AP.Id 
    INNER JOIN DBInstance DI ON DA.DBInstanceId=DI.Id 
    INNER JOIN DBServer DS ON DI.DBServerId=DS.Id 
GO 
SELECT * FROM DADBs 
GO 

問題:

我不知道這是繞了一個合理的/正常的方式。我有足夠的時間加強一件事,但我無法自己想出什麼道路可以走下去。

問題:鑑於我需要提取行項目數據並聚合到多個數據庫,正如我所解釋的那樣,是否有替代方案來定義驅動自定義ETL解決方案的元數據表? (對於我而言一個C#應用程序和SSIS項目是EQIV,但我想知道如果有可能使用Analysis Services或Reporting Services的位置)

回答

4

壞數據庫設計通常後自己的報告。正如你發現的那樣,在不同的數據庫中爲每個月的數據創建一個報告噩夢。想象一下,如果會計週期日期發生變化會發生什麼?更好的解決方案是將數據整合到一個數據庫中,在這個數據庫中確定條目的會計週期屬性(輸入日期,發佈日期等)。

在此期間,我認爲最好的解決方案是創建一個統一數據庫,並使用來自其他數據庫的SSIS填充它,直到您可以更新中間層或UI以使用整合設計。

+1

是的 - 現在解決這個問題之前,它變得更糟! – Cheeso 2011-05-09 17:46:03

+0

謝謝你的建議。好奇,如果你碰巧知道 - 我想這可能是我進入分析服務的機會 - 我是否認爲這是基礎?我的基本理解是,如果你需要大量的基於靜態數據透視表的,它要走的路... – 2011-05-09 17:47:45

+0

@Gabriel - 分析服務可以幫助,但它也可能沒有必要。按週期分析會計數據是一個常見問題,通常可以在不需要數據倉庫的情況下解決。但是,這兩種解決方案都要求OLTP數據庫格式良好。 – Thomas 2011-05-09 18:14:04