Hintergrund
Ich bin ein CS-Student im ersten Jahr und arbeite Teilzeit für das kleine Unternehmen meines Vaters. Ich habe keine Erfahrung in der realen Anwendungsentwicklung. Ich habe Skripte in Python geschrieben, einige Kursarbeiten in C, aber nichts dergleichen.
Mein Vater hat ein kleines Schulungsunternehmen und derzeit werden alle Kurse über eine externe Webanwendung geplant, aufgezeichnet und weiterverfolgt. Es gibt eine Export- / "Berichts" -Funktion, die jedoch sehr allgemein gehalten ist und spezielle Berichte benötigt. Wir haben keinen Zugriff auf die eigentliche Datenbank, um die Abfragen auszuführen. Ich wurde gebeten, ein benutzerdefiniertes Berichtssystem einzurichten.
Meine Idee ist es, die generischen CSV-Exporte zu erstellen und (wahrscheinlich mit Python) in eine MySQL-Datenbank zu importieren, die jede Nacht im Büro gehostet wird, von wo aus ich die spezifischen Abfragen ausführen kann, die benötigt werden. Ich habe keine Erfahrung mit Datenbanken, verstehe aber die Grundlagen. Ich habe ein wenig über die Datenbankerstellung und normale Formulare gelesen.
Möglicherweise haben wir bald internationale Kunden, daher möchte ich, dass die Datenbank in diesem Fall nicht explodiert. Wir haben derzeit auch einige große Unternehmen als Kunden mit unterschiedlichen Abteilungen (z. B. ACME-Muttergesellschaft, ACME-Gesundheitsabteilung, ACME-Körperpflegesparte).
Das Schema, das ich mir ausgedacht habe, ist das folgende:
- Aus Kundensicht:
- Clients ist die Haupttabelle
- Kunden sind mit der Abteilung verbunden, für die sie arbeiten
- Abteilungen können über ein Land verteilt sein: HR in London, Marketing in Swansea usw.
- Abteilungen sind mit der Aufteilung eines Unternehmens verbunden
- Die Geschäftsbereiche sind mit der Muttergesellschaft verbunden
- Aus der Klassenperspektive:
- Sitzungen ist der Haupttisch
- Ein Lehrer ist mit jeder Sitzung verbunden
- Jede Sitzung erhält eine Status-ID. ZB 0 - Abgeschlossen, 1 - Abgebrochen
- Sitzungen werden in "Packs" beliebiger Größe gruppiert
- Jedes Paket ist einem Client zugeordnet
- Sitzungen ist der Haupttisch
Ich habe das Schema auf einem Blatt Papier "entworfen" (eher wie gekritzelt) und versucht, es auf die 3. Form zu normalisieren. Ich habe es dann in MySQL Workbench eingesteckt und es hat alles für mich hübsch gemacht:
( Klicken Sie hier für eine Grafik in voller Größe )
(Quelle: maian.org )
Beispielabfragen, die ich ausführen werde
- Welche Kunden mit noch verbleibendem Guthaben sind inaktiv (diejenigen ohne Unterricht in der Zukunft geplant)
- Wie hoch ist die Anwesenheitsquote pro Kunde / Abteilung / Abteilung (gemessen an der Status-ID in jeder Sitzung)?
- Wie viele Klassen hat ein Lehrer in einem Monat?
- Kennzeichnen Sie Kunden mit geringer Anwesenheitsquote
- Benutzerdefinierte Berichte für Personalabteilungen mit Anwesenheitsraten von Personen in ihrer Abteilung
Fragen)
- Ist das überarbeitet oder bin ich auf dem richtigen Weg?
- Wird die Notwendigkeit, für die meisten Abfragen mehrere Tabellen zu verknüpfen, zu einem großen Leistungseinbruch führen?
- Ich habe Clients eine Spalte "Lastsession" hinzugefügt, da dies wahrscheinlich eine häufige Abfrage sein wird. Ist das eine gute Idee oder sollte ich die Datenbank streng normalisieren?
Vielen Dank für Ihre Zeit
divisions
hat Spalte benannt divisionid
. Finden Sie das nicht überflüssig? Nennen Sie es einfach id
. auch Ihre Tabellennamen einschließlich _has_
: Ich würde das entfernen und es einfach zum Beispiel benennen cities_departments
. Ihre DATETIME
Spalten sollten vom Typ sein, es TIMESTAMP
sei denn, es handelt sich um Benutzereingabewerte. Ich denke, es ist eine gute Idee, die cities
und countries
Tische zu haben . Möglicherweise treten Probleme bei der Beschränkung der Tabellen auf eine einzelne auf status
. INT