MySQL Datenbank für Webbasierten Schichtplaner/Stundenerfassung/Nutzerverwaltung

Wursti89

Neuer Benutzer
Beiträge
3
Hallo liebe Forumuser:)

zunächst mal im Vorfeld: Ich bin nicht der geborene Entwickler und habe bisher auch noch keine großen Erfahrungen mit Datenbanken. Durch meine Ausbildung habe ich die grundlegenden Funktionen und den Aufbau von Datenbanken gelernt.

Da ich aber gerne etwas mehr in die Richtung MySQL & PHP lernen möchte hab ich mir ein Projekt vorgenommen.

Ich möchte gerne einen Webbasierten Schichtplaner erstellen, ich weiß, da gibt es jede menge Vorschläge im Netz etc., aber ich möchte das gerne selber machen sonst lernt man ja nichts :-D

Meine aktuelle Frage:

- Wie baue ich am besten die Datenbank dazu auf? -

Ich habe mir schon ein paar Gedanken gemacht, aber bisher hakt es noch etwas.

Folgende Tabellen würde ich anlegen:

Usertabelle
- User ID
- Personenbezogene Daten & Passwort
- Gruppenzugehörigkeit 1, 2, 3, 4 ( User soll in verschiedenen Gruppen eingetragen sein)

Datum Tabelle
- Jahr
- Monate
- 1-31 (je nach monat)

Schichten Tabelle
- Schichtbezeichnungen
- Schicht-Zeiten

Zeiterfassungstabelle
- Von
- Bis
- Schichtzulage
- etc

So, verknüpfen will ich das ganze so, das jedem User die Tabellen mit dem Datum zugeordnet wird. Dem Datum wird dann jeweils de Schicht zugeordnet bzw. Über die Zeiterfassungs-Tabelle die geleistete Arbeitszeit.

So und jetzt ist die Frage wie ob das so klappt, und wenn ja, wie setze ich das ganze um :-D
Oder würdet Ihr das anders umsetzen?

Ich weiß, das ist was ziemlich großes was ich mir da vorgenommen hab, wichtig ist mir in erster Linie das den Usern jeweils ein eigener Kalender zugeordnet wird.

Aussehen soll das in etwa so:

Jahr | 2013 | ... (nach Dezember dann 2014...
Monat | Januar | Februar | März | ...
Tag | 1 2 3 4..| 1 2 3 4 5| .....
User1 | FSN-- | FSNU | (F=Früh S=Spät...)
User2 | SN--F | SN--F....|
...
Tabellarisch dann dargestellt.

Hoffe das gibt ein etwaiges Bild von dem was ich mir vorstelle :)

Danke und Grüße,

Wursti89
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.423
Hallo liebe Forumuser:)



Meine aktuelle Frage:

- Wie baue ich am besten die Datenbank dazu auf? -

Ich habe mir schon ein paar Gedanken gemacht, aber bisher hakt es noch etwas.

Folgende Tabellen würde ich anlegen:


Datum Tabelle
- Jahr
- Monate
- 1-31 (je nach monat)

Wursti89


Wozu soll die dienen?

Wenn Du SQL lernen willst:


  • * lerne zuerst, welche Datentypen es gibt
    * lerne, diese anzuwenden
    * lerne die Regeln der Normalisierung
    * nutze Dinge wie referentielle Integrität, um konsistente Daten zu haben

Wenn Du MySQL nutzen willst, dann tue es. Empfehlen kann ich es nicht.

Fange also einfach an, erstelle Tabellen, probiere SQL. Aber nutze das, was die DB an Datentypen anbietet, auch wenn das bei MySQL sehr, ähm, übersichtlich ist.
 

Wursti89

Neuer Benutzer
Beiträge
3
Hi, danke für die schnelle Antwort. :)

Die Tabelle Für das Datum hatte ich mir überlegt, um die Tage und Monate nur einmal zu speichern und nicht jeden Tag separat für jeden User anzulegen. (Sollen wenn das dann mal funktioniert ca 250 User werden).

Hab ich alles mal gelernt aber ist schon lange her und hab seit dem nichts mit Datenbanken gemacht.

Welche Datenbank wäre empfehlenswert (wenn ich deine Forumsignatur lese bist du sicher Fan von PostgreSQL :D )?
Ich hab erstmal zum lernen MySQL genommen. Kann man ja später mal ändern ;)

Kannst du mir einen Vorschlag geben wie ich das realisieren kann?

Datentyp Date und dann Autoincrement? -> Somit bei jedem neuen Schichteintrag wird das entsprechende Datum angelegt. -> aber passiert das dann nicht für jeden user?

Ich glaub ich brauch etwas Lektüre... Gibt es da etwas empfehlenswertes?

Leider sind meine Berufsschul-Unterlagen zum Thema Datenbanken nicht mehr auffindbar-.-

Grüße
 

akretschmer

Datenbank-Guru
Beiträge
9.423
Hi, danke für die schnelle Antwort. :)

Die Tabelle Für das Datum hatte ich mir überlegt, um die Tage und Monate nur einmal zu speichern und nicht jeden Tag separat für jeden User anzulegen. (Sollen wenn das dann mal funktioniert ca 250 User werden).

Ein Datum ist ein Datum. Trenne das nicht in Jahr, Monat, Tag. das wird Murks.


Welche Datenbank wäre empfehlenswert (wenn ich deine Forumsignatur lese bist du sicher Fan von PostgreSQL :D )?

Exakt.

Kannst du mir einen Vorschlag geben wie ich das realisieren kann?

Datentyp Date und dann Autoincrement? -> Somit bei jedem neuen Schichteintrag wird das entsprechende Datum angelegt. -> aber passiert das dann nicht für jeden user?

Ahh, Du willst da den Schichtplan speichern, ja?

Als Schnellschuß aus der Hüfte:

Code:
test=# create table mitarbeiter (user_id int primary key, name text);
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "mitarbeiter_pkey" for table "mitarbeiter"
CREATE TABLE
Time: 10,138 ms
test=*# create table schichten (id char(1) primary key, bezeichnung text);
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "schichten_pkey" for table "schichten"
CREATE TABLE
test=*# create table schichtplan (user_id int references mitarbeiter, datum date, schicht char(1) references schichten, primary key(user_id, datum));
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "schichtplan_pkey" for table "schichtplan"
CREATE TABLE
Time: 23,787 ms



Nun kannst Du Deine Schichte 'F' Frühschicht, 'N' Nachtschicht, ... definieren, Deine Mitarbeiter, und den Schichtplan.
Man könnte dann z.B. auch recht einfach prüfen, ob für Mo-Fr alle zu besetzenden Schichten besetzt sind oder so.

Arbeitszeiten könnte so aussehen:

Code:
test=*# create table arbeitszeiten(id serial primary key, user_id int references mitarbeiter, az tsrange);
NOTICE:  CREATE TABLE will create implicit sequence "arbeitszeiten_id_seq" for serial column "arbeitszeiten.id"
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "arbeitszeiten_pkey" for table "arbeitszeiten"
CREATE TABLE
Time: 146,079 ms

tsrange ist ein RANGE-Type, da kannst Du speichern, daß Mitarbeiter von '[2013-08-27 06:55:03,2013-08-27 17:03:22)' da war. Kennt MySQL aber nicht.
Du könntest dann recht schnell rausfinden, wer alles zu einem Zeitpunkt anwesend war oder per Monat die Arbeitszeit aufsummieren etc.


Ist natürlich jetzt alles nur schnell hingetippt.
 

Wursti89

Neuer Benutzer
Beiträge
3
Wow super. Das hilft mir auf jeden Fall schonmal extrem weiter :)

Hab auch meinen Schulordner gefunden, da werd ich zusätzlich auch mal reinschauen, will ja nicht nur abtippen sonder verstehen:)

Aber ich glaub langsam versteh ich wie das aufgebaut werden muss.

Wenn ich neue Fragen hab werd ich wieder was schreiben. Wird denke ich noch recht interessant das Projekt, da ich in PHP auch nicht so fit bin. Wobei ich da aber gute Tutorials gefunden hab.

Danke und bis dahin erstmal,

Wursti:D
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.582
Vor den Datentypen würde ich noch die Normalisierung (siehe Beispiele auf Wiki) und das ERD stellen. Wichtig ist hier nicht jede Normalform auszuformulieren sondern das Prinzip zu begreifen. Das war bei mir auch in der Berufsschule sehr gut gemacht, einer der wenigen echten Lerngewinne. Normalerweise zeichne ich mir dann ERDs bevor ich loslege.

Ich würde für einen Neuanfang auch zu PG raten.
 
Oben