Die Wahl der
SQL-Datenbank ist hier wohl eher nebensächlich, da es sich wirklich nur um recht einfach gestrickte Daten handelt.
Wichtiger ist eigentlich da die Wahl der Zugriffsrechte, denn ein Mitarbeiter sollte doch wohl nur seine eigenen Daten sehen und ändern können und nicht die der anderen. Natürlich könntest Du das über die Programmlogik abfangen, aber dann nimmt man einfach einen
SQL-Browser und verbindet sich direkt auf die
DB.
Als sauberste Lösung bleibt hier eigentlich nur eine echte Server/Client-Anwendung und nur die Serversoftware hat Zugriff auf die
DB.
Etwas aufwändiger, aber ohne Serversoftware: Du legst pro Mitarbeiter eine Tabelle "Entries_<userid>" an und gibst jedem Mitarbeiter nur auf diese Tabelle Schreibrechte, und auf alle anderen "Entries_*"-Tabellen gar keine Rechte. Erst der Controller darf auf alle Tabellen zugreifen und übernimmt dann am Ende des Monats die Werte in eine zentrale Tabelle "Entries".
Noch weniger aufwändig, aber gefuscht
: Wenn Du im Client-Programm Username und Kennwort abfragst, vermurkst Du das Kennwort noch mit irgendeiner festen, zufälligen Kennung, bevor Du Dich an der
DB anmeldest, also sowas wie
DB.Connect(user, 'DHz!64&'+pass+'vzFg');
Als Tabellen würd ich Dir vorschlagen:
- Mitarbeiter - Eine Liste aller Mitarbeiter
- Kunden - Eine Liste der Kunden
- Projekte - Die Liste der Projekte, die abgerechnet werden sollen. Kurzname, Beschreibung, Kunde, Letzte Abrechnung erfolgt am, Genehmigte Stunden, Bereits verrechnete Stunden, (StartZeitpunkt des Projekts, EndZeitpunkt, ...)
- Entries - MitarbeiterID, Datum, Startzeit, Endzeit, (Anzahl Minuten), Zuordnung zu Projekt, Abgerechnet Ja/Nein
- Rechnungen - Kunde, Projekt, ZeitraumStart, ZeitraumEnde, versandt Ja/Nein, Leistungsnachweis akzeptiert ja/nein, bezahlt ja/nein
Dann machst Du zwei Programme: ein etwas kleineres für die Mitarbeiter, die brauchen dann nur ReadOnly-Zugriff auf Kunden, Projekte und vollen Zugriff auf Entries_<userid>. Und dann ein programm für die Controller, die vollen Zugriff auf alles haben, und insbesondere die Tabellen "Entries_<userid>" anlegen und löschen können und mit den passenden Zugriffsrechten versehen können.