Pregunta

ANTECEDENTES:

Debería prefacio esto diciendo que soy no Tratando de hacer que alguien haga mi trabajo por mí. Siento que estoy en un poco de encrucijada donde hay múltiples formas de llegar a mi objetivo, pero no estoy seguro de cuáles son 'estándar' y/o si falta mi conocimiento relativamente limitado.

Tengo un sistema que ha estado evolucionando durante seis meses, y desde el 11 de enero, el esquema de DB ha sido bastante estable. (Nunca estaba seguro de si estaba cometiendo un error importante creando una base de datos para cada mes para corresponder con los ciclos de contabilidad mensuales, pero simplemente no tenía el conocimiento de lo contrario)

AHORA:

Mi jefe me pide que cree informes anuales hasta la fecha que consisten en registros de todas las bases de datos mensuales.

Lo que empecé a hacer:

Reuní un esquema de meta datos y lo poblé con suficiente información para que pudiera escribir una aplicación para realizar operaciones ETL.

Así es como se ve:

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

PROBLEMA:

No sé si esta es una forma razonable/normal de hacerlo. Tengo suficiente tiempo para aumentar una cosa, pero no puedo entender por mi cuenta qué camino bajar.

Pregunta: Dado que necesito extraer datos de elementos de línea y agregar sobre múltiples bases de datos, como expliqué, ¿hay alternativas para definir las tablas de meta datos que impulsan soluciones ETL personalizadas? (Para mis propósitos, una aplicación C# y un proyecto SSIS son EQIV, pero estoy interesado en saber si uno podría usar servicios de análisis o servicios de informes aquí)

No hay solución correcta

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top