Arrière-plan
Je suis en première année de CS étudiant et je travaille à temps partiel pour mon papa d'une petite entreprise. Je n'ai pas d'expérience dans le monde réel de développement d'applications. J'ai écrit des scripts en Python, certains cours en C, mais rien de ce genre.
Mon père a un petit secteur de formation et actuellement toutes les classes sont organisées en, de les enregistrer et d'un suivi par le biais d'un web externe de l'application. Il y a un export/"rapports" fonctionnalité, mais il est très générique et nous avons besoin de rapports spécifiques. Nous n'avons pas accès à la base de données pour exécuter les requêtes. J'ai été demandé de mettre en place un système de rapports personnalisés.
Mon idée est de créer le générique CSV exportations et des importations (probablement avec Python) dans une base de données MySQL hébergée dans le bureau tous les soirs, d'où je peux exécuter les requêtes spécifiques qui sont nécessaires. Je n'ai pas d'expérience dans les bases de données, mais de comprendre l'essentiel. J'ai lu un peu sur la création de la base et formes normales.
On peut commencer à avoir des clients internationaux, à bientôt, donc, je veux que la base de données pour ne pas exploser si/quand ça arrive. Nous avons aussi actuellement un couple de grandes entreprises en tant que clients, à des divisions différentes (par exemple ACME société mère, ACME division des soins de santé, l'ACME le corps de la division)
Le schéma que j'ai est le suivant:
-
Du point de vue du client:
- Les Clients sont au centre de la table
- Les Clients sont liés au ministère qu'ils travaillent pour
- Les départements peuvent être dispersés autour d'un pays: HR à Londres, le Marketing à Swansea, etc.
- Les ministères sont liés à la division d'une société
- Les Divisions sont liés à la société mère
-
Du point de vue des classes:
- Les Sessions est la table principale
- Un enseignant est lié à chaque session
- Un statusid est donné à chaque session. E. g. 0 - Terminé, 1 - Annulé
- Les séances sont regroupés dans des "packs" d'une taille arbitraire
- Chaque packs est attribuée à un client
- Les Sessions est la table principale
J'ai "dessiné" (plus comme griffonné) le schéma sur une feuille de papier, en essayant de garder normalisée à la 3e. J'ai ensuite branché sur MySQL Workbench et il fait tout beau pour moi:
(Cliquez ici pour connaître la taille d'graphique)
Exemple de requêtes, je vais être en cours d'exécution
- Les clients avec un crédit encore à gauche sont inactifs (ceux sans une classe prévue dans l'avenir)
- Quel est le taux de fréquentation par client/département/division (mesurée par l'id d'état à chaque séance)
- Combien de classes a un enseignant avait dans un mois
- D'identifier les clients qui ont un faible taux de participation
- Des rapports personnalisés pour les départements de ressources humaines avec un taux de fréquentation de personnes dans leur division
Question(s)
- Est-ce overengineered ou suis-je dirigé dans le bon sens?
- Le besoin de rejoindre plusieurs tables pour la plupart des requêtes résultat dans un grand gain de performance?
- J'ai ajouté un " lastsession colonne de clients, ce qui est probablement va être une commune de la requête. Est-ce une bonne idée ou dois-je garder la base de données strictement normalisée?
Merci pour votre temps