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 / 74595
Accepted
ivanmp
ivanmp
Asked: 2014-08-22 12:00:39 +0800 CST2014-08-22 12:00:39 +0800 CST 2014-08-22 12:00:39 +0800 CST

Hierarquia para modelo dimensional

  • 772

Estou tentando modelar um DW onde tenho vários níveis de geografia (Bairro, Distrito, Cidade, Estado).

Tenho vários dados demográficos que devem ser incluídos no modelo. Esses dados incluem contagem de pessoas que vivem nessa área, renda mensal média, idade média e outros. O nível mais baixo para o qual tenho dados é o bairro, o que significa que pode ser agrupado para calcular os valores dos níveis superiores.

A Geografia é modelada em uma única dimensão (desnormalizada), onde cada nível recebe sua própria coluna.

Agora tenho que ajustar os dados demográficos no modelo. Devo colocá-lo em outra dimensão separada ou devo colocá-lo na dimensão Geografia? E os níveis agregados?

Colocar tudo na dimensão Geografia me deixaria com um grande número de colunas:

  • Identidade
  • Nome do bairro
  • Nome do distrito
  • Nome da Cidade
  • Nome do estado
  • Renda mensal média do bairro
  • Idade média da população trabalhadora do bairro
  • Bairro Número de pessoas
  • ...
  • Renda mensal média do distrito
  • Idade média da população trabalhadora do distrito
  • Distrito Número de pessoas
  • ...
  • Renda mensal média da cidade
  • Idade média da população trabalhadora da cidade
  • Cidade Número de pessoas
  • ...

Isso está correto? Isso parece bastante complicado. Procurei designs alternativos em vários livros (incluindo o de Kimball), mas não consegui encontrar nada satisfatório.

Existem alternativas melhores, comprovadas, aprovadas e confiáveis ​​para esse projeto?

database-design data-warehouse
  • 1 1 respostas
  • 832 Views

1 respostas

  • Voted
  1. Best Answer
    Daniel Hutmacher
    2014-08-22T12:31:35+08:002014-08-22T12:31:35+08:00

    Minha opinião sobre isso é que talvez você queira tentar usar uma dimensão pai-filho, para que o modelo permita uma quantidade teoricamente infinita de níveis. Dessa forma, você pode conectar os fatos a cada nível da hierarquia.

    Aqui está um exemplo:

    CREATE TABLE dimGeography (
        id
        parent_id
        geographyType
        geographyCode
        geographyName
        PRIMARY KEY (id)
    );
    
    CREATE TABLE factDemographics (
        date
        geography_id
        monthlyIncome
        workingPopulationAge
        numberOfPeople
        PRIMARY KEY (date, geography_id)
        FOREIGN KEY (geography_id) REFERENCES dimGeography (id)
    );
    

    As vantagens desta abordagem são:

    • você é livre para adicionar ou remover níveis como quiser ao longo do tempo sem alterar o modelo de dados
    • você pode conectar fatos (demográficos) a cada nível
    • sem colunas de medidas duplicadas, ou seja, apenas uma coluna chamada "número de pessoas"
    • à prova de futuro: alguns países ou regiões podem usar diferentes tipos de níveis - por exemplo, nem todos os países usam "estado".

    As desvantagens que posso pensar são:

    • você pode ter que redesenhar sua dimensão existente (?) ou tabela de fatos
    • sua ferramenta de BI pode não ser capaz de lidar com dimensões pai-filho
    • consultas SQL mais complexas ao agregar os fatos em níveis superiores

    Não tenho a menor ideia se esta é a solução "correta" de acordo com Kimball, Inmon, etc. Em vez disso, gostaria que você verificasse se ela se aplica às suas necessidades específicas. ;)

    • 3

relate perguntas

  • Qual é a diferença entre os tipos de dados MySQL VARCHAR e TEXT?

  • É melhor armazenar os valores calculados ou recalculá-los a pedido? [duplicado]

  • Armazenar vs calcular valores agregados

  • Quais são algumas maneiras de implementar um relacionamento muitos-para-muitos em um data warehouse?

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