php.de

Zurück   php.de > Webentwicklung > Software-Design

Software-Design Diskussionen auf Profi-Niveau: PHP Lösungen auf konzeptioneller Ebene

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 1 Stimmen, 1,00 durchschnittlich.
Alt 11.08.2011, 18:36  
Erfahrener Benutzer
 
Benutzerbild von dreamcatcher
 
Registriert seit: 28.12.2010
Beiträge: 603
PHP-Kenntnisse:
Anfänger
dreamcatcher wird schon bald berühmt werden
Standard [Erledigt] Datenbank(Software)design bei halbstündlichen Schichten

Ziel:
Mitarbeiter Gutenberg (fiktiver Name) kann verschiedene Schichten zugewiesen bekommen.

Diese Schichten werden halbstündlich zugeteilt und können sich von 0:00 - 24:00 Uhr erstrecken.

Bisherige Lösung:
Ich habe für Gutenberg schon einmal ein Verfügbarkeitstool programmiert.

Er konnte dort dort seine Verfügbarkeit eintragen.
Es gab nur "verfügbar" oder "nicht verfügbar".

Gelöst wurde es relativ simpel, indem ich in der DB einen 48 stelligen String gespeichert habe.

1000000000000000000000000000000000000000
heißt also, dass Gutenberg nur von 00:00 bis 00:30 verfügbar ist.

Nun kann ich diese Methode jedoch nicht auf die neuen Aufgabenstellung anwenden, da ich ansonsten nur eine eingeschränkte Zahl an Möglichkeiten hätte (Sprich nur 1 Character der einer bestimmten Schicht zugeteilt werden könnte zum identifizieren der Schichtart)

Frage:
Wie kann man nun die Schichtzuteilung am besten realisieren ?

Meine Idee ist, dass es einfach eine extra Tabelle gibt die z.B. so aussieht:

PHP-Code:
id user_id char_pos schicht_id 
Das würde also bedeuten, dass wenn (deutsch ?! ) bei Herrn Gutenberg folgender Eintrag vorliegen würde:

PHP-Code:

Er mit der user_id 1 von 0:00 - 0:30 für die schicht_id 1 eingeteilt ist.

Die Lösung find ich nicht schlecht, aber man kann es auf so vielen anderen Wegen lösen, dass ich es hier zur Diskussion stellen möchte.

Wenn ihr es auch als beste Lösung empfindet hilft ein "Find ich gut, mir fällt auch nichts besseres ein".

Danke
dreamcatcher ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 11.08.2011, 18:39  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.994
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Code:
user | start: time | end: time
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 11.08.2011, 18:40  
Erfahrener Benutzer
 
Benutzerbild von dsmcg
 
Registriert seit: 11.10.2005
Beiträge: 2.405
dsmcg sorgt für eine eindrucksvolle Atmosphäredsmcg sorgt für eine eindrucksvolle Atmosphäredsmcg sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von nikosch Beitrag anzeigen
Code:
user | start: time | end: time
yes, wollte ich gleich auch schreiben.
Warum nicht einfach ne Anfangs und Endzeit eintragen?
__________________
Wie man Fragen richtig stellt
dsmcg ist offline   Mit Zitat antworten
Alt 11.08.2011, 19:01  
Erfahrener Benutzer
 
Benutzerbild von Delirius
 
Registriert seit: 07.07.2009
Beiträge: 215
PHP-Kenntnisse:
Anfänger
Delirius wird schon bald berühmt werden
Standard Datenbank(Software)design bei halbstündlichen Schichten

Zitat:
Zitat von dreamcatcher
Er mit der user_id 1 von 0:00 - 0:30 für die schicht_id 1 eingeteilt ist.
Wenn die Schichten immer halbstündlich eingeteilt bleiben und nicht geändert werden empfinde ich deine Idee gut. Fest zugeteilte id´s zu den Schichten verzichten auf Zeitenvergleich. Vermutlich sollen Schichten nicht doppelt vergeben sein?!?

Sollten sich die Schichten jedoch ändern können wären die beiden Einwände
Zitat:
Zitat von nikosch
user | start: time | end: time
Zitat:
Zitat von dsmcg
yes, wollte ich gleich auch schreiben.
Warum nicht einfach ne Anfangs und Endzeit eintragen?
sicher zu beachten.
__________________
LG Delirius

Ein Ring Sie zu knechten...
Delirius ist offline   Mit Zitat antworten
Alt 11.08.2011, 19:55  
Erfahrener Benutzer
 
Registriert seit: 11.04.2011
Beiträge: 260
PHP-Kenntnisse:
Fortgeschritten
lcrash wird schon bald berühmt werden
Standard

Für Statistikzwecke müssten natürlich die Schichten eingegeben werden. Dann kann man auch überprüfen ob jemand diese Schicht überhaupt machen darf.
lcrash ist offline   Mit Zitat antworten
Alt 11.08.2011, 20:22  
Erfahrener Benutzer
 
Benutzerbild von dsmcg
 
Registriert seit: 11.10.2005
Beiträge: 2.405
dsmcg sorgt für eine eindrucksvolle Atmosphäredsmcg sorgt für eine eindrucksvolle Atmosphäredsmcg sorgt für eine eindrucksvolle Atmosphäre
Standard

Man kann ja in einer Tabelle alle möglichen Schichten mit ner ID Verknüpfen. Dem Mitarbeiter werden dann diese Schicht IDs zugewiesen.
__________________
Wie man Fragen richtig stellt
dsmcg ist offline   Mit Zitat antworten
Alt 11.08.2011, 20:26  
Erfahrener Benutzer
 
Registriert seit: 01.06.2011
Beiträge: 392
PHP-Kenntnisse:
Anfänger
achtelpetit befindet sich auf einem aufstrebenden Ast
Standard

Für so etwas würde ich über eine Kalendertabelle nachdenken, die für jede halbe Stunde einen Datensatz hat. Bei halben Stunden sind das knapp 18.000 Datensätze pro Jahr.
Das könnte Vorteile bringen. Die Sache läßt sich leicht abfragen und gibt den Zeitraster vor, ohne daß man noch auf- oder abrunden müßte. Außerdem lassen sich Lücken leicht feststellen ohne jeweils aufwendige Rechnungen auszuführen.
Nachteil: das Verfahren ist nicht gut zur echten Zeiterfassung geeignet, ich denke da z. B. an Überstunden.
achtelpetit ist offline   Mit Zitat antworten
Alt 11.08.2011, 21:46  
Erfahrener Benutzer
 
Benutzerbild von dreamcatcher
 
Registriert seit: 28.12.2010
Beiträge: 603
PHP-Kenntnisse:
Anfänger
dreamcatcher wird schon bald berühmt werden
Standard

@Delirius
Es ist geklappt die gesamte Software später anzupassen.
Sprich der Admin darf entscheiden auf welcher Taktung die Software läuft (15/30/60 min).
Bei der Methode von mir habe ich mir gedacht diese Taktungen durch Identifier in der DB zu speicher (z.B. die Spalte "Taktung" => "1" für 15 Minuten) oder alternativ kann die Software automatisch herausfinden welche Taktung herrscht indem sie die Character des Strings zählt (48 = 30min, 96 = 15min, 24 = 60min).

@nikosch & dsmcg
Bei der Methode habe ich mehrere Nachteile entdeckt gehabt:

a.)
Man hat bei einem halbstündlichen Takt bis zu 48 Datensätze für eine Person.
Kurz:
Es entsteht die bis zu 48-fache Datenmenge.
Bei einem String hat ebend nur max. einen Datensatz.


----------------------------------------------------------------

!!! Dieser Punkt gilt nicht, jedoch wurde er stehen gelassen um den Aufbau besser zu erläuter !!!
b.)
Der Admin legt fest in welcher Taktung du deine eigene Verfügbarkeit einteilen kannst.
Diese wird dir dann grafisch angezeigt.

Stell dir folgendes vor:
[] [] [] [] [] [] [] [] [] | [Checkbox]

Jedes Rechteck ist eine halbe Stunde.
Wenn du auf eines klickst, updatet sich die DB im Hintergrund automatisch.

Nun müsste, wenn es kein String ist, die ID des Eintrages (Also eines Rechteckes) als HTML-Element ID mit ausgegeben werden.
Ansonsten kann der Eintrag in der DB nicht gefunden werden.

Soweit klar ?
(Bild gepostet siehe Update1)

Ok dann der Punk worauf ich eigentlich hinaus möchte:
Wenn Hr. Gutenberg jetzt seine Verfügbarkeiten aufruft müssen diese aus der DB geladen werden.

Sagen wir die Query ist "[...] Where day = Monday".

Jetzt bekommen wir 2 Datensätze, z.B. 15:30 -16:00 und 16:00 - 16:30.
Jetzt müsste ich, damit es angezeigt wird, in einer foreach() Schleife per if() prüfen, ob die geholte Zeit mit dem Rechteck (siehe Bild) passt.

Das ist jedoch bei dem String nicht anders, dort wird von mir auch jede Stelle
manuell auf den Status überprüft. [...]
!!! Bei diesem Punkt habe ich mich verzettelt !!!

----------------------------------------------------------------

Es bleibt nun Argument 1 mit der bis zu 96 fachen Datenmenge bei einer Taktung von 15 Minuten.

Das Argument "Es kann auch 15-16:30 angegeben werden, dann sind aus 3 Datensätze einer geworden kann nicht gehalten werden, da mir keine Methode bekannt ist diese Zeitspanne (außer mit unendlich vielen if() Anweisungen) darauf zu überprüfen ob sich eine halbe Stunde (die grafisch am Ende dargestellt wird) darin befindet oder nicht.


Außerdem ist es von meiner Logik her auch etwas aufwändiger mehrere Datensätze zu ziehen, diese einzeln im Array durchzugehen, ob die halbe Stunde sich darin befindet oder nicht, anstatt einen gesamten String zu haben und diesen einmal abzuarbeiten von vorne nach hinten.
(Ich hoffe meine Logik dahinter ist klar )

Weshalb würdet ihr diese Technik der anderen vorziehen ?


___
Update1://
Ich hab die graphische Oberfläche mal angehangen die ich programmiert habe.
Miniaturansicht angehängter Grafiken
erledigt-datenbank-software-design-bei-halbstuendlichen-schichten-php_de.jpg  

Geändert von dreamcatcher (11.08.2011 um 22:17 Uhr).
dreamcatcher ist offline   Mit Zitat antworten
Alt 11.08.2011, 22:54  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.994
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
Das könnte Vorteile bringen. Die Sache läßt sich leicht abfragen und gibt den Zeitraster vor, ohne daß man noch auf- oder abrunden müßte.
Wenn Dich das glücklich macht, kann man Start und Ende ja auch von 0 - 47 durchnumerieren. Ich halte allerdings ein Time(stamp)format für wesentlich praktischer. Was ist bspw. beim Dienst von 23:00 - 2:00? Willst Du die Schicht dann in 2 Tagen erfassen?

Zitat:
Bei der Methode von mir habe ich mir gedacht diese Taktungen durch Identifier in der DB zu speicher (z.B. die Spalte "Taktung" => "1" für 15 Minuten) oder alternativ kann die Software automatisch herausfinden welche Taktung herrscht indem sie die Character des Strings zählt (48 = 30min, 96 = 15min, 24 = 60min).
Noch ein Punkt pro Range. Sowas kann nur im Chaos enden.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 11.08.2011, 22:56  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.994
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
Außerdem ist es von meiner Logik her auch etwas aufwändiger mehrere Datensätze zu ziehen, diese einzeln im Array durchzugehen, ob die halbe Stunde sich darin befindet oder nicht,
Geht ganz einfach per Modulo.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Navigation mit Untermenüs in mehrerer schichten PHP Tipps 2004 7 29.07.2004 11:38

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
dantenbankschichten, profi php datenbank software, php kalender halbstündlich, software design schichten, datenbanksoftware gutenberg, datenbanksoftware charakter, rolle der datenbanksysteme im software schichtenmodell, 48-stellige zeichenkette

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:38 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum