Design de banco de dados pela primeira vez: sou superengenharia? [fechadas]

fundo

Sou estudante do primeiro ano do ensino médio e trabalho em meio período na pequena empresa de meu pai. Eu não tenho nenhuma experiência no desenvolvimento de aplicativos do mundo real. Eu escrevi scripts em Python, alguns cursos em C, mas nada como isso.

Meu pai tem um pequeno negócio de treinamento e atualmente todas as aulas são agendadas, gravadas e acompanhadas por um aplicativo da Web externo. Há um recurso de exportação / "relatórios", mas é muito genérico e precisamos de relatórios específicos. Não temos acesso ao banco de dados real para executar as consultas. Me pediram para configurar um sistema de relatórios personalizado.

Minha idéia é criar as exportações genéricas de CSV e importá-las (provavelmente com Python) para um banco de dados MySQL hospedado no escritório todas as noites, de onde eu possa executar as consultas específicas necessárias. Não tenho experiência em bancos de dados, mas entendo o básico. Eu li um pouco sobre criação de banco de dados e formas normais.

Podemos começar a ter clientes internacionais em breve, então quero que o banco de dados não exploda se / quando isso acontecer. Atualmente, também temos duas grandes empresas como clientes, com diferentes divisões (por exemplo, empresa-mãe da ACME, divisão de assistência médica da ACME, divisão de assistência médica da ACME)

O esquema que criei é o seguinte:

Da perspectiva do cliente:Clientes é a mesa principalOs clientes estão vinculados ao departamento para o qual trabalhamOs departamentos podem estar espalhados por um país: RH em Londres, Marketing em Swansea etc.Os departamentos estão vinculados à divisão de uma empresaAs divisões estão vinculadas à controladoraDa perspectiva das classes:Sessões é a tabela principalUm professor está vinculado a cada sessãoUm statusid é fornecido para cada sessão. Por exemplo. 0 - Concluído, 1 - CanceladoAs sessões são agrupadas em "pacotes" de tamanho arbitrárioCada pacote é atribuído a um cliente

Eu "projetei" (mais como rabiscado) o esquema em um pedaço de papel, tentando mantê-lo normalizado para o terceiro formulário. Em seguida, liguei-o no MySQL Workbench e tornou tudo bonito para mim:
(Clique aqui para gráficos em tamanho real)

texto alternativo http://maian.org/img/schema.png

Consultas de exemplo que estarei executandoQuais clientes com crédito ainda estão inativos (aqueles sem classe agendada no futuro)Qual é a taxa de participação por cliente / departamento / divisão (medida pelo ID do status em cada sessão)Quantas aulas um professor teve em um mêsSinalizar clientes com baixa taxa de participaçãoRelatórios personalizados para departamentos de RH com taxas de participação de pessoas em sua divisãoQuestões)Isso é superengenharia ou estou seguindo o caminho certo?A necessidade de ingressar em várias tabelas para a maioria das consultas resultará em um grande impacto no desempenho?Eu adicionei uma coluna 'dura-sessão' aos clientes, pois provavelmente será uma consulta comum. É uma boa ideia ou devo manter o banco de dados estritamente normalizado?

Obrigado pelo seu tempo

questionAnswers(11)

yourAnswerToTheQuestion