Um modelo de dados para facilitar a consulta ao banco de dados

Ah! Entendi! Alguma ideia de como isso poderia ser? Estamos sempre procurando maneiras de facilitar as coisas aqui :slight_smile:

2 curtidas

Com certeza! Algo como o modelo de dados Northwind (famoso no MS Access!) seria brilhante. Pode até haver uma ferramenta que gere um investigando o esquema do Postgres.

2 curtidas

Você pode compartilhar isso como se estivesse falando com um novato? Tipo:

  • O que adicionar isso ajudaria a resolver?
  • Como você esperaria ver isso se fosse adicionado? Como ficaria?

Eu estou basicamente pegando sua sugestão e pedindo mais detalhes (o máximo que você puder dar :wink: ) para que possamos melhorar a experiência para o próximo Arquiteto de Dados que aparecer. Eu não tenho experiência em dados, então sua sugestão detalhada será útil :slight_smile:

2 curtidas

Haha Osioke,

Um argumento muito justo! Tocou no ponto…

Então, a maioria das pessoas que trabalham com bancos de dados (não apenas arquitetos de dados! Desenvolvedores também!) acham muito útil ter algum tipo de modelo de dados que mostre como as várias tabelas estão conectadas umas às outras.

Por exemplo, vamos pegar minha consulta ;), eu precisava de várias informações sobre um usuário - eu precisava de informações sobre um usuário que:

  • estava (ou não estava) em um grupo específico
  • havia resolvido um tópico
  • dentro de um determinado intervalo de datas

Para responder ao acima, preciso da tabela de usuários, da tabela de ações do usuário e da tabela de grupos. Um modelo de dados teria me mostrado que posso vincular um usuário a uma ação do usuário via id/user_id, e vincular um usuário a um grupo via seu primary_group_id/id visualmente.

Ajuda a visualizar não apenas quais dados estão disponíveis, mas como juntá-los, especialmente se houver algumas consultas longas em jogo.

Sim, você poderia clicar em cada tabela no explorador de dados para descobrir quais campos estão disponíveis e anotá-los para não esquecer, mas ter um modelo de dados pode ser um pouco mais humano para alguns de nós :slight_smile:

5 curtidas

Ah! Entendi de novo! :sweat_smile:

Eu não sou técnico, então isso não ficou claro para mim. Eu vejo a necessidade, então sim. Um modelo de dados seria útil. Vou ver o que posso fazer. :slight_smile:

Enquanto isso, movi esta conversa para um novo tópico em nossa categoria Site feedback para mantermos a outra discussão limpa.

2 curtidas

Isso seria incrível, obrigado!

1 curtida

Estou conversando com a equipe e isso não seria algo simples por muitas razões. Também o movemos para Feature porque isso mostra mais o que seria.

Atualmente, nós que trabalhamos com dados internamente usamos principalmente os modelos disponíveis no código-fonte:

Também dei uma olhada no modelo de dados Northwind:

Isso é definitivamente fácil de entender e cabe em um papel ou em uma tela. 13 tabelas no total.

Comparando isso com o Discourse, temos muito mais tabelas, mais de 180 ou mais, visualizá-las seria… uma jornada. Especialmente porque também existem tabelas de plugins (e estas mudam de instalação para instalação) e dados nas tabelas *_custom_fields que também deveriam ser incluídos se você realmente quiser ter uma imagem completa.

Também, devido à forma como nosso banco de dados é projetado, não podemos usar a maioria das ferramentas para modelagem de dados, precisaríamos encontrar uma que funcione com modelos ActiveRecord. E acho que isso também torna as coisas complicadas, todas essas conversas sobre dados estão acima do meu entendimento. :sweat_smile:

Mas isso não quer dizer que não queremos fazer isso, é apenas um comentário. Adoraria ouvir sugestões suas ou de qualquer outra pessoa sobre como poderíamos melhorar isso. :wink: :slight_smile:

6 curtidas

Não é muito útil, pois o tamanho dele, a falta de chaves estrangeiras e o fato de deixarmos muito pouca lógica para o SGBD significam que é difícil entender o banco de dados do Discourse sem ler o código-fonte do Discourse.

Mas se você realmente precisar de um, o RubyMine pode gerá-lo para você.

14 curtidas

Você pode gerar um com relacionamentos com rails-erd: GitHub - voormedia/rails-erd: Generate Entity-Relationship Diagrams for Rails applications

Não tenho certeza do quão útil isso é, no entanto.

10 curtidas

@lju Espero que todas as nossas explicações ajudem aqui, especialmente com o contexto adicionado. Fecharei isto em um ou dois dias. Se você ainda sentir que precisa de algum detalhe extra, sinta-se à vontade para perguntar.

3 curtidas

Olá @osioke,

Desculpe pela demora em responder, estive um pouco atarefado.

Tenho algumas ideias sobre o que seria útil - se puder me dar alguns dias, escreverei algo.

Abraços,

Lju

1 curtida

Incrível! Em alguns dias você terá :slight_smile: obrigado por dar atenção a isso.

Olá a todos,

Meu argumento seria que um modelo de dados seria útil, mas não precisamos necessariamente incluir todas as tabelas. Suspeito que provavelmente existam as 15-25 tabelas ‘chave’ que 90% de todas as consultas usam/o que as pessoas procuram. Na verdade, olhando para as várias tabelas disponíveis - provavelmente há uma série de modelos de dados que poderiam ser criados, com base nos tipos de consultas/dados que você está procurando explorar.

Posso tentar nos próximos dias reunir o que acredito serem as tabelas mais comumente consultadas - isso não seria uma pesquisa extensiva, apenas um palpite. Tenho certeza de que as várias perguntas feitas na categoria Data Explorer também lançarão luz sobre as tabelas populares.

Também poderia haver outro diagrama para representar ‘zonas’ de interesse para facilitar a navegação em diferentes partes dos dados disponíveis.

Isso faz sentido?

Abraços,

Lju

6 curtidas

O explorador de dados já lista as 9 tabelas mais importantes primeiro no painel da interface de edição de consulta, e você pode ver a estrutura de colunas e os tipos de todas as tabelas com um clique:

3 curtidas

Então poderíamos pegar essas 9 tabelas e transformá-las em um modelo de dados simplificado? :thinking: :wink:

5 curtidas

Claro, pode compartilhar os resultados!

4 curtidas

caramba, isso é enorme; um dos maiores esquemas de banco de dados que já vi online
foi criado com https://dbdiagram.io? pode compartilhar o link público do diagrama?
estou mais interessado nos relacionamentos e conexões entre essas tabelas
users,
user_options,
api_keys,
user_api_keys,
user_auth_tokens,
user_auth_token_logs,
notifications

obrigado

muito útil, mas seria ótimo ter um URL compartilhável para que possamos ver os relacionamentos das tabelas e também as chaves primárias/estrangeiras nas tabelas
existem relacionamentos 1 para 1 no esquema? gostaria de saber especialmente entre as tabelas users e user_options

alguém disposto a ajudar com os relacionamentos entre essas tabelas? do diagrama de esquema

users,
user_options,
api_keys,
user_api_keys,
user_auth_tokens,
user_auth_token_logs,
notifications

interessado em saber se existem relacionamentos 1 para 1

agradeço..obrigado

cc @Falco @sam

É principalmente 1-N, pois os usuários têm várias notificações, tokens de autenticação, etc.

user_options é 1-1.