kelvins / municipios-brasileiros

:house_with_garden: Dados relacionados aos municípios brasileiros
MIT License
1.09k stars 613 forks source link

SQL: Mover as informações de estado para uma tabela separada #20

Closed kelvins closed 5 years ago

kelvins commented 6 years ago

Acredito que faz mais sentido mover as informações relacionadas ao estado (Código UF, UF, Estado) para uma tabela separada e utilizar uma chave estrangeira para ligar com cada município. Assim podemos remover a quantidade de informações repetidas na tabela de municípios.

helysousa commented 5 years ago

@kelvins, concordo contigo, vou trabalhar nessa Issue.

kelvins commented 5 years ago

Pow legal @helysousa, seria ótimo. Se precisar de uma mão é só falar.

helysousa commented 5 years ago

Codigo UF pode ser a chave estrangeira em Municípios, certo?

kelvins commented 5 years ago

Isso. Só não parei para pensar em como ficariam os arquivos CSV e JSON ao separar isso ainda.

helysousa commented 5 years ago

No caso do CSV acho que poderíamos dividir em dois arquivos, no caso do JSON, acho que teríamos uma estrutura parecida com [ municipios: [ {mun 1,...}, {mun2,...}...{}], estados: [{UF1,...},{UF 2,...}]], o que acha?

helysousa commented 5 years ago

Para ser mais preciso, segue um exemplo (desconsidere o número da população, os valores são fictícios): [ "estados": [ { "codigo_uf": 52, "uf": "GO", "estado": "Goiás" }, { "codigo_uf": 31, "uf": "MG", "estado": "Minas Gerais" } ], "municipios": [ { "codigo_ibge": 5200050, "nome_municipio": "Abadia de Goiás", "capital": false, "codigo_uf": 52, "latitude": -16.7573, "longitude": -49.4412, "populacao": 123984 }, { "codigo_ibge": 3100104, "nome_municipio": "Abadia dos Dourados", "capital": false, "codigo_uf": 31, "latitude": -18.4831, "longitude": -47.3916, "populacao": 32789 } ] ]

kelvins commented 5 years ago

Certo, acho que faz sentido manter dessa maneira sim.

kelvins commented 5 years ago

E ai @helysousa beleza? Só para comunicar que foram feitas algumas alterações no master devido ao PR https://github.com/kelvins/Municipios-Brasileiros/pull/22, caso você ainda esteja trabalhando nessa issue.

helysousa commented 5 years ago

@kelvins , bom dia. Sim, vi que entrou um novo campo relacionado a Capital. Vou incluir essa informação no modelo proposto acima. Salvo algum impedimento maior, devo submeter uma PR ainda esse final de semana. Um abraço e obrigado pela mensagem.

helysousa commented 5 years ago

Na solução apresentada nos arquivos originais o campo capital é um boolean, na solução que será proposta, com estruturas separando os municípios dos estados, proponho a criação de uma FK Capital na tabela de estados, apontando para a tabela de municípios.

Desta forma o comando:

select ESTADO, MUNICIPIO AS CAPITAL from MUNICIPIOS_BRASILEIROS where CAPITAL is TRUE;

Poderia ser substituido por:

select UF.ESTADO, MN.MUNICIPIO from ESTADOS_BRASILEIROS UF inner join MUNICIPIOS_BRASILEIROS MN on UF.CAPITAL = MN.CODIGO_IBGE

Desta forma, o campo CAPITAL em ESTADOS_BRASILEIROS teria o CODIGO_IBGE da respectiva capital.

kelvins commented 5 years ago

Perfeito, acho que fica bom a FK Capital na tabela de estados. Mas cara, pode fazer tranquilo, quando sobrar tempo. A ideia é se divertir, aprender e disseminar conhecimento. 😄 Abraço

Otoru commented 5 years ago

Apenas comentando, para o caso do json, a estrutura seria algo similar a isso:

{
    "estados": [{
        "codigo_uf": 52, 
        "uf": "GO", 
        "estado": "Goiás"
    },
        ...
    ],
    "cidades": [{
        "codigo_ibge": 5200050, 
        "nome_municipio": "Abadia de Goiás", 
        "capital": false, 
        "codigo_uf": 52, 
        "latitude": -16.7573, 
        "longitude": -49.4412, 
        "populacao": 123984
    },
        ...
    ]
}

Achei validos destacar pois no comentário anterior, da a entender que se estaria utilizando chave:valor entre colchetes (como se fosse uma lista) e não entre chaves (correto para objetos). De qualquer forma, com o SQL feito, me disponho a fazer um PR com o json atualizado. Prefiro aguardar o SQL apenas para manter um padrão.

Otoru commented 5 years ago

Sobre o CSV, em minha opinião o mais correto seria ter uma pasta com dois arquivos separados.

kelvins commented 5 years ago

@Otoru, isso mesmo, provavelmente o colchetes foi por engano no lugar das chaves (inclusive isso deu a ideia de incluir um "validador" de arquivos para rodar no travis, pra não cair nesse tipo de problema).

Sobre o CSV, concordo com você, como serão 2 arquivos (municípios e estados) acho melhor organizar eles em uma pasta.

kelvins commented 5 years ago

Como essa issue estava parada a um certo tempo, resolvi implementar as alterações no PR https://github.com/kelvins/Municipios-Brasileiros/pull/23. Seria uma boa se alguém pudesse dar uma olhada para garantir que está tudo ok e que faz sentido as alterações realizadas.