Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

MySQL Datenbank für Webbasierten Schichtplaner/Stundenerfassung/Nutzerverwaltung

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Wursti89, 27 August 2013.

  1. Wursti89

    Wursti89 Neuer Benutzer

    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
     
  2. akretschmer

    akretschmer Datenbank-Guru


    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.
     
  3. Wursti89

    Wursti89 Neuer Benutzer

    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
     
  4. akretschmer

    akretschmer Datenbank-Guru

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


    Exakt.

    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.
     
  5. Wursti89

    Wursti89 Neuer Benutzer

    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
     
  6. ukulele

    ukulele Datenbank-Guru

    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.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden