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

Raspberry Pi Bastelprojekt scheitert an DB-Design ;)

Dieses Thema im Forum "Datenmodellierung, Datenbank-Design" wurde erstellt von 4eversr, 5 Mai 2015.

  1. 4eversr

    4eversr Benutzer

    Hallo,

    ich möchte gerne mit dem Raspberry Pi ein kleines Projekt realisieren, bei dem der Tonerbestand eines mittelständischen Unternehmens verwaltet werden soll. (Details zum Projekt hier: http://www.forum-raspberrypi.de/Thread-projekt-idee-automatisches-toner-bestands-und-bestellsystem )

    Ich komme aber gar nicht aus der Programmierer-Ecke und mein letztes Datenbankprojekt in der Berufsschule ist nun auch schon 11-12 Jahre her. Ich weiß noch Dunkel was ne relationale Datenbank ist, aber ich scheitere daran meine Datenfelder in sinnvolle Tabellen zu gliedern, denn es gibt ein paar "Spezialfälle".

    Prinzipiell gibt es:
    - Verschiedene Lieferanten
    - Verschiedene Toner
    - Verschiedene Druckermodelle

    Da die Bestandserfassung (um die sich alles dreht) später über die Barcodes erfolgen soll, spielt der Barcode wohl eine wichtige Rolle.
    Grundsätzlich hat jeder Toner einen eindeutigen, immer gleichen Barcode, ABER es müssen auch Ausnahmen berücksichtigt werden, in denen der Toner dann von uns einen abweichenden Zufalls-Barcode aufgeklebt bekommt, weil z.B. der Originalbarcode fehlt/beschädigt ist -> Trotzdem müssen diese abweichenden Barcodes für den selben Toner mit zum Gesamtbestand für diesen Toner addiert werden.

    Auch ist es so, dass ein Toner in mehrere Druckermodelle passen kann.
    Und es muss berücksichtigt werden, dass ein Farbdrucker auch 4x verschiedene Toner benötigt (eben jede Farbe einmal). (Der Raspberry Pi soll dem Anwender nämlich beim scannen einen Hinweis mit Foto anzeigen für welchen Drucker der Toner ist)

    Am meisten Kummer macht mir diese "Der gleiche Toner kann abweichende Barcodes haben, auch wenn dies idR. nicht der Fall ist, da alle Barcodes eines Toners grundsätzlich gleich sind"-Thematik.
    Wobei die "Ein Toner kann in mehrere Druckermodelle passen"-Thematik auch nicht ohne ist.

    Ich weiß momentan nicht, wie ich das am besten in Beziehung stelle.
     
  2. 4eversr

    4eversr Benutzer

    Anbei noch eine Tabelle mit Beispieldaten, in rot markiert sind die Spezialfälle.
     

    Anhänge:

  3. Distrilec

    Distrilec Datenbank-Guru

    Find ich gut das du und deine Firma das möchten... Nur was hat das mit uns zu tun?
    Derzeit hört sich das so an als hättest du gerne, das einer von uns dein komplettes ERM vorbereitet?
     
  4. 4eversr

    4eversr Benutzer

    Meine Firma weiß noch von nichts, und für mich ist das wie gesagt ein Hobbyprojekt.
    Für mich ist der interessante Bereich, die Hardware, die Programmierung.

    "Leider" brauche ich wohl eine Datenbank um es ordentlich zu machen, und da fehlt mir jetzt das Knowhow.
    Von daher hoffe ich tatsächlich auf einen User der sich erbarmt und mir da Starthilfe gibt :)

    Zumal ich das ganze gut dokumentiere und OpenSource dann quasi gemeinnützig bereitstelle.
     
  5. akretschmer

    akretschmer Datenbank-Guru

    das bezieht sich auf die Tonerart, oder? Damit allein kannst Du keine Bestandsverwaltung machen.
     
  6. 4eversr

    4eversr Benutzer

    Der Toner für einen HP4050 hat immer Barcode 12345678, ein anderer Toner hat auch einen anderen Barcode. - Wenn dieser HP4050 Barcode 8 mal eingescannt wird, im Modus einlagern, soll er einfach 8-mal in den Bestand übernommen werden. - Wenn er dann z.B. 8 mal ausgelagert wird, soll er einfach 8-mal abgezogen werden. - Das es hier schnell Fehlbestände geben könnte, ist mir klar, aber das kann ich durch regelmäßige Schnellinventuren beim einlagern neuer Ware schnell ausmerzen.


    Ausnahme 1:
    Der Toner HP4050 hat immer den Barcode 12345678. Nun fehlt bei einem Toner der Karton oder der Barcode ist beschädigt. - Trotzdem möchte ich diesen Toner ohne Karton/ohne Barcode natürlich mit in den Bestand aufnehmen, zu den anderen Tonern die alle Barcode 12345678 haben.
    Er bekommt also einen Zufallsbarcode-Ersatzaufkleber, den ich mit dem Scanner scanne und dann z.B. per Touchscreen-Auswahl dem Bestand der anderen HP4050 Toner hinzufüge. Er muss also trotz anderem Barcode zu den restlichen 4050 Tonern hinzugefügt werden. - Wenn er dann irgendwann entnommen wird, wird natürlich wieder sein "Sonderbarcode" gescannt der dann wieder dem restlichen HP4050 Tonerbestand entnommen werden kann.

    Ausnahme2:
    Es gibt Resttonerbehälter die haben gar keinen Barcode, die würden dann alle einen zufälligen Barcodeaufkleber bekommen, der dann wieder per Touchscreen dem Posten "Resttonerbehälter für Druckermodell A" zugewiesen wird.


    Diese beiden Ausnahmefälle machen für mich die Schaffung eines ERM so kompliziert, oder ich blicks nicht wie einfach es sein kann... ;)
     
    Zuletzt bearbeitet: 5 Mai 2015
  7. Distrilec

    Distrilec Datenbank-Guru

    Also ich sehe dabei einige Probleme:
    1. Du schätzt den Zeitaufwand falsch ein. Du musst dich nicht nur um die Datenbank kümmern, sondern auch um das Front-End... Dazu gehört dann nicht nur manuelle Eingabe, du willst auch gleich noch eine Scanneranbindung. Wartung und die fortlaufende Entwicklung mal ganz außer acht gelassen, solltest du dir auch noch Gedanken um Sicherheit und Fehlerbehandlung machen.
    2. Entweder macht man es richtig oder lässt es bleiben. Wenn du dich nicht um Konsistenz in deiner Datenbank scherst... Dann nimm doch lieber gleich Papier und Stift in die Hand :) Ist wahrscheinlich weniger Aufwand als alle paar Tage eine "Schnellinventur" zu machen... Wozu ist so ne Datenbank denn da?
    3. Du weißt nicht einmal selbst was du willst. Entweder gibt es eindeutige Barcodes, oder du benutzt garkeine... Wenn ich schon lese "die würden dann alle einen zufälligen Barcodeaufkleber bekommen"... Als nächstes willst du dann jeden Morgen die Lagerbestände neu würfeln?
    4. Du hast uns überhaupt garkeinen Einblick gegeben. Hier mal ein paar Fragen, die mir so spontan einfallen:
    - Wie kann ich einen Drucker identifizieren?
    - Was ist ein Posten? Und warum per Touchscreen? Hat jeder Scanner einen Touchscreen und soll dein Front-End ausschließlich auf Scannern laufen?
    - Warum gibt es einen Barcode pro Tonerart und nicht für jedes gekaufte Modul einen eigenen? Würde mMn wesentlich mehr Sinn machen.
    - Willst du eine Verbrauchshistorie? Soll es Vorplanung geben?
    ...
    5. Ein ERM erstellen ist NICHT einfach... Das erfordert viel Planung, Papier und Bleistiftminen (oder eben Kugelschreiber...). Und wahrscheinlich wirst du im Gesamten auch nicht nur eins erstellen, sondern mehrfach überarbeiten. Gerade für deine "Ausnahmen"... Auch wenn ich bei deinen genannten noch kein Problem sehe.

    Zu deinen Ausnahmen:
    1. Wenn du es wirklich so machen willst, wie du es vorgeschlagen hast... Und du weißt welchen Toner du in der Hand hältst... Warum scannst du nicht einfach einen Barcode eines anderen Moduls (der gleichen Art) und verabschiedest dich von deinem "Zufallsbarcode" ? Ist mir derzeit vollkommen unverständlich.
    2. Dann gib nicht jedem Toner einen Barcode, sondern jedem Austauschmodul? Und schon brauchst du auch hier keinen "Zufallsbarcode"... Damit könnte man sogar noch Transferbänder einlagern... Eigentlich so ziemlich alles...
     
  8. 4eversr

    4eversr Benutzer

    @Distrilec

    Hallo Distrilec, deine Fragen kann ich alle beantworten.

    Zu 1.) Es geht hier um einen einzelnen, fest montierten USB-Scanner, der an einem kleinen Raspberry steckt. Die Scanneranbindung ist also schnell gemacht. Grundsätzlich gibt es für den Bediener keine großartigen Eingriffmöglichkeiten: Der Bediener nimmt sich einen Toner aus dem Regal, hält diesen vor den Scanner und ohne das dieser sonst irgendeine Taste drücken muss geht er weg. - Nur der Admin bzw. IT-Mitarbeiter bekommt ein kleines Frontend, damit dieser in den Modus Einlagern kommt. - Wie schon angesprochen geht es hier nicht um ein Riesen-Lager, sondern nur um eine einzige Regalwand, in der vielleicht 20x verschiedene Toner für 8-9 verschiedene Drucker liegen. Also alles übersichtlich.
    Zu 2.) Hier gilt das Prinzip "Keep it simple". Das System soll hauptsächlich das Problem lösen, dass der Toner ausgeht ohne das rechtzeitig nachbestellt wurde. - Wenn ich eine großzügige Restmenge von z.B. 4 Tonern pro Sorte einplane, spielen kleinere Fehlbestände keine Rolle. Auch ist es für den Admin/IT-Mitarbeiter gar kein großes Ding, beim Einräumen einer neuer Lieferung kurz zu checken ob der Systemstand "12 Toner von Sorte A" noch mit der Datenbank übereinstimmt. Da dies sozusagen mit nur einem Blick passiert, ist hier keine große Arbeit vön Nöten. - Die Datenbank dient dem Hauptzweck der automatischen Nachbestellung, bzw. noch genauer: der rechtzeitigen Nachbestellung, da es schon oft vorgekommen ist, das zu spät bestellt wurde.
    Zu 3.) Ich möchte eigentlich den EAN-Barcode auf den Tonerkartons scannen. Die sind immer gleich. Wie schon erwähnt kann es aber vorkommen, dass so ein Barcode dann mal fehlt. Um jetzt, aus Anwendersicht, den Aufwand so gering wie möglich zu halten, ist es in meinem Fall viel zu aufwenidg genau den passenden Barcode-Aufkleber für den jeweils fehlenden Barcode nachzudrucken. Da steht der Aufwand (aus Anwendersicht) in keinem Verhälnis zum Ziel. Aus Anwendersicht wäre es besser, wenn dort eine 5000er Rolle mit vorgedruckten, fortlaufenden Barcodes bereitliegt. Man nimmt sich beim einlagern einen dieser Barcodes, der Admin ist im Modus einlagern und scannt den Barcode. Das System meldet "Diesen Barcode kenne ich nicht, auf welchen Psoten möchten sie den Artikel buchen?" Der Admin wählt dann den Posten "Toner 4050". - Zack, das System bucht den Toner dorthin. - Dann kommt irgendwann der Anwender der diesen Toner nimmt, dieser hält den nur kurz vor den Scanner, und zack wird er wieder vom HP4050 Bestand abgezogen, als wäre er nie dagewesen.
    Zu 4.) Grundsätzlich geht es ja nur um den Tonerbestand. Der Anwender soll aber beim Entnahme-Scan einen kurzen Bildhinweis/Texthinweis angezeigt bekommen "Dieser Toner passt in: HP4050" oder auch "Dieser Toner passt in: Ineo 220 und Ineo 280". Dies ist der einzige Grund warum das system überhaupt wissen muss, welche Druckermodelle es gibt. Davon gibt es vielleicht 10 verschiedene Modelle im Unternehmen. - Wie schon gesagt gibt es nur einen einzigen Scanplatz, nämlich den Raspi selbst. Der Endanwender hat neben dem Scanner und vielleicht einem "Abbrechen"-Knopf keine Möglichkeit zu interagieren. Der Touchscreen, der nur dem Admin zugänglich ist, dient evtl. dazu in den "Einlager"-Modus zu gelangen, und dann z.B. die Zufallbarcode-Buchungen zuzuweisen. Vielleicht reicht hier aber auch schon eine Tastatur oder ein Navigationskreuz, welche nur dem Admin zugänglich ist.
    Frage Barcode pro Tonerart: Hier soll einfach der EAN-Barcode des Herstellers genutzt werden, deswegen immer gleicher Barcode. Alles andere wäre zuviel Aufwand, denn es muss alles "simpel" gehalten werden, und die ganze Datenbank dient wie gesagt dazu die Bestellungen rechtzeitig zu erledigen.
    Sonderfunktionen wie Verbrauchshistorie/Vorplanung wären sicher nicht schlecht, aber auch kein Muss.
    Zu 5.) Ja, das weiß ich. Ich habe mir schon den Kopf zermatert und etliche ERM's für dieses Projekt entworfen. Aber wie schon gesagt: Ich bin da leider gar kein Fachmann, und ich selbst stolpere ständig über diese Ausnahmesituation "Freibarcode". Mir ist momentan nicht klar, wie ich das mit unterbringe und trotzdem eine Relation zwischen den Tabellen herstellen kann.

    Zu meinen Ausnahmen:
    Zu 1.) Beim Einlagern könnte ich als Wissender Admin-Nutzer das wirklich so machen. - Aber der Endanwender der sich später diesen Toner aus dem Regal nimmt und dann vergeblich den Barcode sucht, kommt vermutlich/vielleicht nicht auf die Idee einen anderen Barcode zu nehmen. Der normale Anwender wird wohl denken "Mhhh, kein Barcode, entweder ich gehe jetzt einfach so, oder ich leg diesen Toner zurück ins regal und nehme mir einen mit Barcode" - Dann verführt man entweder den Endandwender zum Nicht-scannnen oder man hat einen Toner den nie jemand aus dem Regal nehemen will, weil der keinen Barcode hat. Wenn ich diesem Toner stattdessen einen Freibarcode geben kann, dann kann der Anwender ihn einfach aus dem 'Regal nehmen und genause den Barcode scannen wie er es von allen anderen Tonern gewohnt ist. - Das ist der Grund warum ich beim Einlagern nicht einfach einen anderen Barcode der gleichen Tonerart scannen kann/darf, da eben der Mitarbeiter der später diesen Toner aus dem Regal nimmt (z.B. eine 60 Jahre alte Dame aus der Verwaltung) , vermutlich nicht auf die Idee kommt. - Ich möchte das System gerne so simpel halten, dass es nie jemand erklärt werden muss. Wie im Projekt beschrieben erkennt der Raspberry eine Bewegung am Tonerregal und eine Sprachausgabe erfolgt dann "Bitte scannen sie den entnommenen Toner ein. Danke" - Dann merkt der Anwender, der bis zu dem Zeitpunkt noch nie was von diesem System gehört hat, ah, ich muss scheinbar was einscannen. Er nimmt seinen Tonerkarton und hält den Barcode an den fest montierten Scanner. Es macht "Piep" und auf einem Display wird angezeigt "Ihre Entnahme wurde gebucht: 1x Toner schwarz für Ineo +224. Auf Wiedersehen"
    Zu 2) Den Einwand verstehe ich nicht recht, aber vielleicht löst sich dein Einwand wenn du realisierst das ich den vorhandenen EAN-Barcode der Toner nutzen möchte.
     
    Zuletzt bearbeitet: 6 Mai 2015
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