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 / 45841
Accepted
Tae
Tae
Asked: 2013-07-07 19:37:09 +0800 CST2013-07-07 19:37:09 +0800 CST 2013-07-07 19:37:09 +0800 CST

Armazenando divisões administrativas de diferentes países

  • 772

Estou desenhando uma base de dados que deve relacionar os usuários com sua divisão administrativa para fins estatísticos, considerando que cada país tem seu próprio tipo de divisão. O Chile, por exemplo, está dividido em regiões que estão divididas em províncias que estão divididas em comunas, enquanto Angola está dividida em províncias que estão divididas em municípios que estão divididos em comunas. Achei que uma solução poderia ser ter uma coluna chamada first_administrative_division na usertabela, que vai se referir a uma first_administrative_divisiontabela, que vai ter uma second_administrative_divisioncoluna que vai se referir a uma third_administrative_divisiontabela que vai ter uma coluna que vai se referir à countrytabela. Mas lendo isso Não constatei apenas que existem países que possuem apenas duas divisões administrativas, e em outros casos, quatro; alguns casos são ainda mais complexos, como Argentina e Brasil, que possuem diferentes tipos de divisões internas, divididas de formas distintas. Então, eu estou chorando agora.

Não quero cobrir o mundo inteiro, os países serão adicionados à medida que forem necessários. É possível modelar tal coisa?

Obrigado de antemão.

database-design
  • 1 1 respostas
  • 1428 Views

1 respostas

  • Voted
  1. Best Answer
    zedfoxus
    2013-07-07T21:36:01+08:002013-07-07T21:36:01+08:00

    Uma maneira de armazenar diferentes níveis de hierarquia é criando uma tabela hierárquica:

    ID    Type
    ---   ---------------------------
    1     Country
    2     Province/State
    3     County
    4     City
    5     Regions
    6     Communes
    7     Municipality
    

    Então você pode criar suas divisões e listá-las adequadamente. Isso permite que você atribua com flexibilidade as divisões e as divisões pai.

    ID    Division    Parent    Type
    ----- ----------- --------- -----
    1     Chile                 1
    2     Region-A    1         5
    3     Province-A  2         2
    4     Commune-A   3         6
    5     Angola                1
    6     Province-A  5         2
    7     Municip-A   6         7
    8     Commune-A   7         6
    

    Os benefícios são que diferentes níveis de hierarquia podem ser atribuídos neste projeto para diferentes divisões de nível superior. As pessoas podem ser associadas a qualquer nível de hierarquia.

    ID    Person      Division
    ----- ----------- ---------
    1     Tom         4 (Commune-A of Province-A of Region-A of Chile)
    2     Dick        7 (Municip-A of Province-A of Angola)
    3     Harry       1 (Chile)
    

    O desafio é criar uma função ou procedimento armazenado definido pelo usuário ou utilizar estruturas de dados hierárquicos (por exemplo , Hierarchy ID do SQL Server ) para extrair diferentes informações para os estatísticos. Por exemplo:

    Mostre as vendas por nível hierárquico mais alto de cada vendedor e liste o nível e o nome desse nível (por exemplo, Harry vendeu $ 45 milhões do widget A no Chile (nível 1 de 1) em comparação com Dick, que vendeu $ 40 milhões do mesmo widget em Município-A (nível 3 de 4)).

    Observe que a hierarquia de Angola tem 4 níveis de profundidade e Dick está funcionando em 1 nível acima do nível mais baixo. As estatísticas podem ser geradas por diferentes profundidades.

    Mostrar vendas para o nível 1 de cada vendedor (por exemplo, vendas para Chile, Angola etc.). Mostrar vendas para o nível 2 (por exemplo, vendas para a Província-A se for Chile, ou Município-A se Angola etc.). Mostra todas as vendas de um nível chamado Província, ou ainda mais complexo - mostra todas as vendas de Províncias de países que o possuem ou Municípios de países que o possuem.

    A estrutura de data warehouse desnormalizada também pode ser usada, como você mencionou na pergunta. Em uma tabela dimensional, adicione o nome do vendedor e atribua os campos level1, level1type, level2, level2type etc. O nível 1 de Tom seria Chile e o tipo seria Country. O nível 2 seria a Região-A e o tipo seria a Região, etc. Esse tipo de estrutura pode ser fácil para a extração de dados se os estatísticos estiverem procurando aprimorar o nível 1 ou 2 ou algo semelhante. Acabamos de aumentar a complexidade de adicionar mais colunas à medida que descobrimos a hierarquia de diferentes países, mas o benefício é que os dados são fáceis de visualizar. Uma instrução select simples pode nos ajudar a entender como Tom está funcionando.

    Sente-se com estatísticos e descubra o que eles gostam de ver e como gostariam de usar os dados. Com base nas ideias deles, você poderá construir um sistema melhor, talvez um híbrido.

    • 3

relate perguntas

  • Os índices filtrados podem ajudar a melhorar as consultas baseadas em uma hora inserida ou isso deve ser evitado?

  • 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

    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

    Conceder acesso a todas as tabelas para um usuário

    • 5 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
    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
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +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