tag:forum.selfhtml.org,2005:/self Stundeneingabe erstellen – SELFHTML-Forum 2007-07-11T10:25:21Z https://forum.selfhtml.org/self/2007/jul/6/stundeneingabe-erstellen/1140637#m1140637 Beach 2007-07-06T10:10:13Z 2007-07-06T10:10:13Z Stundeneingabe erstellen <p>Hi,</p> <p>ich muß ne Stundeneingabe die bisher über Excel läuft in eine Datenbank übertragen. Die vorhandene Daten der letzten Jahre sollen evtl. mit übernommen werden.<br> Das ganze soll dazu dienen zu verfolgen wieviele Stunden jedes Monat auf den verschiedenen Projekten gearbeitet wurde.</p> <p>Ich habe mir gedacht das ganze mittels Formular und Textfeldern in HTML/PHP zu programmieren.</p> <p>Jeder Mitarbeiter ca.40 Personen später evtl mehr arbeitet im Durchschnitt an 3-5 Projekten am Tag, Wenn ich jetzt für jeden Mitarbeiter pro Tag eine Datensatz verwende, dann kommen pro Jahr ca. 5*5*52*40=50000 Datensätze zusammen.<br> Ist das sinnvoll oder sollte ich lieber einen Datensatz je Monat und Projekt machen und 31 Splaten für die einzelnen Wochentage.</p> <p>Ist es überhaupt praktikabel das über HTML/PHP zu machen, oder wisst Ihr nen besseren Ansatz.</p> <p>Grüße Thomas</p> https://forum.selfhtml.org/self/2007/jul/6/stundeneingabe-erstellen/1140645#m1140645 Siechfred http://www.anaboe.net/codes/ 2007-07-06T11:08:45Z 2007-07-06T11:08:45Z Stundeneingabe erstellen <blockquote> <p>Das ganze soll dazu dienen zu verfolgen wieviele Stunden jedes Monat auf den verschiedenen Projekten gearbeitet wurde.</p> </blockquote> <p>Das lässt sich problemlos über die Datenbankabfrage steuern.</p> <blockquote> <p>Ich habe mir gedacht das ganze mittels Formular und Textfeldern in HTML/PHP zu programmieren.</p> </blockquote> <p>Schön, und welches Datenbanksystem willst du verwenden?</p> <blockquote> <p>Jeder Mitarbeiter ca.40 Personen später evtl mehr arbeitet im Durchschnitt an 3-5 Projekten am Tag, Wenn ich jetzt für jeden Mitarbeiter pro Tag eine Datensatz verwende, dann kommen pro Jahr ca. 5*5*52*40=50000 Datensätze zusammen. Ist das sinnvoll oder sollte ich lieber einen Datensatz je Monat und Projekt machen und 31 Splaten für die einzelnen Wochentage.</p> </blockquote> <p>Ich würde mit mindestens drei Tabellen arbeiten:</p> <ul> <li>Tabelle Projekte mit einem Feld Projekt-ID und weiteren beschreibenden Feldern (Aufgabe o.ä.)</li> <li>Tabelle Mitarbeiter mit einem Feld Mitarbeiter-ID und weiteren beschreibenden Feldern (Name...)</li> <li>Tabelle Zeiterfassung mit den Feldern Projekt-ID, Mitarbeiter-ID, Datum, Zeit</li> </ul> <p>Gegebenenfalls kannst du noch eine Tabelle Kunden hinzufügen, um <a href="http://de.wikipedia.org/wiki/Redundanz_%28Information%29" rel="nofollow noopener noreferrer">Redundanzen</a> in der Projekttabelle zu vermeiden, falls du dort die Kundendaten mit ablegen willst. Hast du das getan, kannst du über <a href="http://aktuell.de.selfhtml.org/artikel/datenbanken/joins/" rel="nofollow noopener noreferrer">JOINs</a> über die Tabellen Abfragen erstellen. Denkbar z.B.:</p> <ul> <li>Stunden je Projekt</li> <li>Stunden einzelner Mitarbeiter je Projekt</li> <li>Stunden einzelner Mitarbeiter je Projekt für einen bestimmten Zeitraum</li> <li>Stunden eines Mitarbeiters für einen bestimmten Zeitraum</li> </ul> <p>Je <a href="http://de.wikipedia.org/wiki/Normalisierung_%28Datenbank%29" rel="nofollow noopener noreferrer">normalisierter</a> dein Datenbankdesign ist, um so vielfältiger sind die Auswertungsmöglichkeiten.</p> <p>Siechfred</p> <div class="signature">-- <br> Ein Selbständiger ist jemand, der bereit ist, 16 Stunden am Tag zu arbeiten, nur um nicht 8 Stunden für einen Anderen arbeiten zu müssen. </div> https://forum.selfhtml.org/self/2007/jul/6/stundeneingabe-erstellen/1140644#m1140644 Ilja Lorfinduil@gmx.de 2007-07-06T11:10:05Z 2007-07-06T11:10:05Z Stundeneingabe erstellen <p>yo,</p> <blockquote> <p>Ist das sinnvoll oder sollte ich lieber einen Datensatz je Monat und Projekt machen und 31 Splaten für die einzelnen Wochentage.</p> </blockquote> <p>50.000 Datensätze sind kein problem, sprich mach es nicht mit einer spalte pro tag.</p> <blockquote> <p>Ist es überhaupt praktikabel das über HTML/PHP zu machen, oder wisst Ihr nen besseren Ansatz.</p> </blockquote> <p>weder html noch php werden die zugriff auf die daten machen, sondern das jeweilige dbms. insofern betrifft die frage weniger html/php, sondern welches dbms system letzlich dahinter "hängt".</p> <p>html hat meiner meinung nach immer den vorteil, man muss keinen zusätzlichen client installieren und fast jeder kennt sich mit einem browser aus.</p> <p>Ilja</p> https://forum.selfhtml.org/self/2007/jul/6/stundeneingabe-erstellen/1140638#m1140638 Frank (no reg) 2007-07-06T12:45:09Z 2007-07-06T12:45:09Z Stundeneingabe erstellen <p>Hello,</p> <p>ich kenne viele Zeiterfassungssysteme, die mittels Webinterface arbeiten, ich habe auch selber schon komplette Systeme derer Art programmiert, weiterentwickelt, implementiert. Es gibt so gesehen keinen objektiven Nachteil einer zentralisierten html/php Lösung als Frontend für die Eingabe.</p> <p>Verwende bitte einen Datensatz pro Zeiterfassung. Eine Zeiterfassung besteht dabei aus</p> <ul> <li>Referenz zum Benutzer (dem der die Zeit kontieren will)</li> <li>Referenz zur Tätigkeit (Projekt)</li> <li>optional für feinere Graninität Referenz zur Aufgabe innerhalb des Projekts</li> <li>Referenz zum Datum, bzw. das Datum für welches die Eintragung gelten soll</li> <li>die Menge der zu kontierenden Zeit in der von dir gewünschten genauigkeit (decimal(4,2) erlaubt -99,99 bis +99,99 Std. ...)</li> </ul> <p>Also als Bespiel:</p> <p>MA           | Projekt     | Aufgabe        | Datum      | Zeit   |<br> -------------|-------------|----------------|------------|--------|<br> Müller, M.   | ProjektX    | Dokumentation  | 2007-07-06 | 1.75   |<br> Müller, M.   | ProjektY    | Programmierung | 2007-07-06 | 4.00   |<br> Meier, R.    | ProjektX    | Meeting        | 2007-07-06 | 3.25   |</p> <p>Du verstehst das Konzept?</p> <p>Sinnlose Eingaben wie > 24.00 pro Tag verhinderst du mit Check-Constraints. Darüber hinausgehende halb-sinnlose Kontierungen wie mehr als 48h pro Woche verhinderst du durch die Geschäftslogik in PHP.</p> <p>Es ist vollkommen unkritisch (wenn du nicht gerade mit Technik von 1965 arbeitest), 50.000 Datensätze für ein Jahr zu haben. Dein DBMS bietet dir für die Abfrage mind. 1 Möglichkeit zur Performancesteigerung - Indizierung.</p> <p>Was du jetzt zur Auswertung betreiben kannst ...</p> <ul> <li>gib mir die gesamtzahl Stunden für Projekt X im Zeitraum ...</li> <li>gib mir die monatlich kontierten Stunden pro Mitarbeiter für die letzten 12 Monate</li> </ul> <p>Das erreichst du durch den Gebrauch von Aggregatsfunktionen wie SUM(), AVG(), GROUP BY in eigentlich sehr trivialen SELECT Queries.</p> <p>Obiges Modell kann natürlich noch soweit Normalisiert werden, dass die Tabelle technisch so aussieht:</p> <p>MA-ID | Projekt-ID  | Aufgabe-ID | Datum      | Zeit   |<br> ------|-------------|------------|------------|--------|<br> 123   | 1           | 5          | 2007-07-06 | 1.75   |<br> 123   | 2           | 3          | 2007-07-06 | 4.00   |<br> 254   | 1           | 12         | 2007-07-06 | 3.25   |</p> <p>Dazu hast du dann separate Tabellen für MA, Projekte, Aufgaben, die über deren Primärschlüssel mit obiger Tabelle verbunden sind.</p> <p>Normalisierung ist ne feine Sache, allerdings hebt das überhaupt nix in Sachen Vielfältigkeit der Auswertungsmöglichkeiten. Entweder die Daten (Graninität) sind da oder sie sind nicht da.</p> <p>Mehr fällt mir jetzt grad nicht mehr ein. :)</p> <p>Ciao, Frank</p> https://forum.selfhtml.org/self/2007/jul/6/stundeneingabe-erstellen/1140640#m1140640 Siechfred http://www.anaboe.net/codes/ 2007-07-06T18:43:47Z 2007-07-06T18:43:47Z Stundeneingabe erstellen <blockquote> <p>Normalisierung ist ne feine Sache, allerdings hebt das überhaupt nix in Sachen Vielfältigkeit der Auswertungsmöglichkeiten. Entweder die Daten (Graninität) sind da oder sie sind nicht da.</p> </blockquote> <p>Da dieser Ball an mich geht: Ich habe das mal anders beigebracht bekommen, was mir aber vor dem Hintergrund deiner Ausführungen irgendwie nicht mehr so einleuchtend vorkommt wie damals - naja, war noch dBASE und später ein bisschen Access, vielleicht war das damals ja noch richtig :)</p> <p>Siechfred</p> <div class="signature">-- <br> Ein Selbständiger ist jemand, der bereit ist, 16 Stunden am Tag zu arbeiten, nur um nicht 8 Stunden für einen Anderen arbeiten zu müssen. </div> https://forum.selfhtml.org/self/2007/jul/6/stundeneingabe-erstellen/1140639#m1140639 at 2007-07-11T10:25:21Z 2007-07-11T10:25:21Z Stundeneingabe erstellen <p>Hallo.</p> <blockquote> <p>(Graninität)</p> </blockquote> <p>Muss man dafür Hohes C können?<br> MfG, at</p> https://forum.selfhtml.org/self/2007/jul/6/stundeneingabe-erstellen/1140641#m1140641 Frank (no reg) 2007-07-06T19:07:56Z 2007-07-06T19:07:56Z Stundeneingabe erstellen <p>Moin,</p> <p>je mehr Normalisierung, je mehr JOINs brauchst du, je mehr logische Lesevorgänge muss das DBMS machen. Deswegen sind analytische Modelle, die für die Abfrage optimiert sind (nicht für die Eingabe) eher denormalisiert. Z.b. Stern-Schema oder wenn's des unbedingt bruucht, Schneeflöcken-Schema (Snowflake). Der Informationsgehalt ist dabei annähernd identisch, die technische Datenmenge mehr, durch Explosion und Denormalisierung. Wie gesagt, entweder die Informationen sind da oder nicht.</p> <p>Methodiken sind auch der natürlichen Evolution unterworfen. Kann durchaus sein, dass man damals davon ausgegangen ist, Normalisierung ist das Allheilmittel. (Bei uns nennt es sich gerade Sharepoint ;))</p> <p>Cheers<br> Frank</p> https://forum.selfhtml.org/self/2007/jul/6/stundeneingabe-erstellen/1140642#m1140642 Beach 2007-07-08T21:08:51Z 2007-07-08T21:08:51Z Stundeneingabe erstellen <p>Hi,</p> <p>ich danke euch für die Vielen Tip's. Jetzt wo ich weiß dass es sowas schon gibt, denke ich dass ich's auch mit html/php/mysql machen werde.</p> <p>Mir gings nur darum erst mal zu wissen ob Ihr das überhaupt für sinnvoll haltet, nicht dass ich hier programier und irgendwann stoße ich an die Grenzen der Browser und merke dass es auf diese Weise überhaupt nicht geht.</p> <p>Jetzt muß ich mir dann auch mal Gedanken über das Design machen. Habt ihr dafür evtl Beispiele bei denen mann sich Anregungen holen kann wie man die Eingabe am besten aufbaut. Ich dacht als erstes an das klassische Tabellenlayout (z.B Blatt für 1 Monat mit den Taben in Spalten und den Projekten in Zeilen). Aber vermutlich wird das sehr aufwendig zu programieren.</p> <p>Grüße Thomas</p> https://forum.selfhtml.org/self/2007/jul/6/stundeneingabe-erstellen/1140643#m1140643 Frank (no reg) 2007-07-09T10:41:43Z 2007-07-09T10:41:43Z Stundeneingabe erstellen <p>Hallo nochmal,</p> <p>ich verwende für die Eingabe immer Schema F. ;)</p> <p>Also die standard Eingabe-Seite zeigt mir die Tage der Woche aktuelle Woche per default) in Spalten an und die Projekte als Zeilen. Insofern liegst du mit deiner Idee schon recht gut.</p> <p>Als Tabellenfuss mache ich dann eine Summierung der Stunden für den gesamten Tag. Mit etwas Programmlogik färbe ich diesen Betrag denn rot wenn er zu hoch ist, nur mal so als weiterführender Gedanke.</p> <p>In den Zellen (Zelle = Kreuzung aus Zeile/Spalte) die sich ergeben, habe einen Button zum Hinzufügen eines neuen Stunden-Eintrags und einen für die Details von dem Projekt/Tag. Der Detail-Button gibt mir nach (unter) der Tabelle dann eine Liste von Kontierungen für Projekt/Tag. Von dort aus kann ich Einträge editieren und wieder löschen.</p> <p>Weiterhin zeige ich in der Tabellenzelle selbst noch die Summe der Stunden für dieses/n Projekt/Tag.</p> <p>Projekt    | Montag    | Dienstag  | ....      | Total     |<br> -----------|-----------|-----------|-----------|-----------|<br> Projekt X  | 6.50  D + |         + | ....      |      6.50 |<br> Projekt Y  | 1.00  D + | 2.75  D + | ....      |      3.75 |<br> -----------|-----------|-----------|-----------|-----------|<br> Total      | 7.50      | 2.75      | ....      |     10.25 |<br> -----------|-----------|-----------|-----------|-----------|</p> <p>D ist der Detail-Button, + der "Neuer Eintrag"-Button.</p> <p>Die Liste für die Details sieht dann zum Bleistift so aus:</p> <p>Montag, 7.10.2006</p> <p>Projekt    | Aufgabe   | Stunden   |<br> -----------|-----------|-----------|-----------|-----------|<br> Projekt X  | Doku      | 3.50      | Ändern    | Löschen   |<br> Projekt X  | Proggen   | 3.00      | Ändern    | Löschen   |<br> -----------|-----------|-----------|-----------|-----------|</p> <p>Die Logik für die Anzeige ist imho nicht wirklich kompliziert oder über die Maßen aufwendig, aber so trivial wie <h1>Hello World</h1> ist es dann auch nicht. Es ist imho einfach eine Verwendung von <table> (ja, für tabellarische Daten darf man wirklich <table> verwenden) und Schleifen deiner Programmlogik.<br> Die Totals am Zeilen- oder Spaltenende kannst du dann entweder dynamisch in PHP über die Schleifen und Arrays berechnen oder als separate Abfrageergebnisse aus der DB Holen.</p> <p>Die einzigen Schreibaufgaben (Inserts und Updates) solltest du vom eigentlichen Eingabeformular für die Stundenkontierung machen, der Rest sind alles nur Selects mit ein paar JOINs, vielleicht auch UNIONs.</p> <p>Die Verwendung eines DBMS (Version) mit Unterstützung für Unterabfragen (Subqueries) könnte dir für die Selects ganz hilfreich sein.</p> <p>Soetwas wäre eine gute Aufgabe für einen Job-Kandidaten, stelle ich gerade fest. 4 Std. sollten da genügen.</p> <p>Grüsse<br> Frank</p>