AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 122593
Accepted
Mathieu Guindon
Mathieu Guindon
Asked: 2015-12-02 10:31:13 +0800 CST2015-12-02 10:31:13 +0800 CST 2015-12-02 10:31:13 +0800 CST

Projetando um banco de dados dimensional a partir de uma fonte normalizada que já implementa SCDs

  • 772

Eu construí um SSIS ETL para integrar várias fontes de dados (uma do MySQL, duas do SQL Server) em um único banco de dados SQL Server relacional e normalizado, que chamei de [NDS].

O SSIS ETL lida com atualizações do tipo 2 e, portanto, o [NDS] gera chaves substitutas e as tabelas SCD incluem um registro de data e hora [_EffectiveFrom] e uma coluna anulável [_EffectiveTo], e há restrições para as chaves naturais e belas chaves estrangeiras que vinculam todas as dados juntos.

Agora, eu queria construir um banco de dados dimensional SSAS a partir dele e não demorou muito para perceber que estava me preparando para um esquema de floco de neve:

Diagrama yUML descrevendo uma amostra dos relacionamentos de tabela

Portanto, estou pensando em adicionar um novo banco de dados [DDS] (relacional) para criar a dimensão real e as tabelas de fatos que alimentarão os DSVs para o banco de dados SSAS.

Este banco de dados [DDS] seria tão desnormalizado quanto humanamente possível, de modo a "achatar" os fatos e dimensões (como, [OrderHeaders]+[OrderDetails] em uma tabela de fatos [Orders] e [CustomerStores]+[Customers]+ [SalesReps] em alguma tabela de dimensão [Clientes]) - fazer isso não deve apenas facilitar a construção das hierarquias de dimensão no SSAS, mas também facilitar a criação de um esquema em estrela real.

Eu tenho algumas perguntas embora:

  • Posso reutilizar um subconjunto de minhas chaves substitutas existentes? Estou pensando em pegar a chave existente para o nível mais granular e torná-la a chave de dimensão. Essa é uma boa abordagem ou devo simplesmente ignorar as chaves substitutas [NDS] e fazer com que o [DDS] (db relacional) gere um novo conjunto de chaves substitutas?
  • Como lidar com SCD? Por exemplo, "Materiais" e "Fornecedores" irão gerar novos registros em [NDS] quando alguns campos específicos mudarem no sistema de origem... Acho que terei que projetar o SSIS ETL para carregar apenas os registros de "última imagem" no banco de dados [DDS] e, em seguida, reimplemente as atualizações do tipo 2 nesse processo, ou seja, trate o [NDS] como um "sistema de origem" que mantém o histórico, enquanto duplica tudo neste banco de dados [DDS]. Mas então, por que eu precisaria manter o histórico no [NDS] e no [DDS]? Claramente algo não está certo.

Estou me preparando para um Big Mess™ ou estou no caminho certo?

sql-server ssas
  • 1 1 respostas
  • 329 Views

1 respostas

  • Voted
  1. Best Answer
    Dave
    2015-12-02T15:57:07+08:002015-12-02T15:57:07+08:00

    Como você pode ver, um dos benefícios do Kimball Dimensional Modeling é que o projeto do data warehouse é essencialmente o seu projeto SSAS. Embora sempre haja exceções, normalmente você pode selecionar uma tabela no DSV e mover imediatamente para o design de hierarquia, relacionamentos de cubo etc.

    Eu recomendaria mudar para o DDS com a ressalva de que você eliminaria gradualmente o NDS. Pelo simples motivo que você mencionou com o SCD Tipo II - não há motivo para duplicar todos esses dados, ETL e base de código. Manter ambos leva a uma solução excessivamente complexa com muita manutenção e risco - este é o principal Big Mess™ que você precisa evitar.

    Eis a justificativa:

    • O DDS soa como um projeto dimensional Kimball que será facilmente compreendido e mantido por qualquer novo contratado e contratado
    • Existem muitos designs comprovados para esquema e ETL que acompanham isso, facilitando o design e a manutenção
    • Mais fácil de lidar com grandes quantidades de dados por meio de opções como particionamento de fatos e índices de armazenamento de colunas
    • Consultas de DW mais fáceis no futuro para você e usuários avançados
    • Design geral mais simples

    O design alternativo que eu sugeriria apenas se você tivesse pequenas quantidades de dados, nenhuma expectativa significativa de aumentos e nenhuma capacidade de mudar para o data warehouse. Essa sugestão inclui muito do trabalho de design que, de outra forma, iria para o DW e, como tal, é semelhante a manter o NDS e criar o DDS:

    Você pode criar seus cubos com consultas manifestadas como Visualizações ou codificadas no DSV.

    Parece que você superou muitos obstáculos e criou uma ótima solução funcional com o NDS. Infelizmente, o que ele não faz são duas coisas importantes que a modelagem dimensional fornece: padrões de consulta simples e tradução fácil em análises multidimensionais. Felizmente, muito do design de ETL provavelmente é útil como modelo ou ponto de partida para carregar uma estrutura de tabela diferente.

    • 3

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve