SQL Lagersystem für Bauteile erstellen

Olunixus

Commodore Pro
Registriert
Dez. 2009
Beiträge
4.791
Hallöchen,
bei mir im Betrieb gilt es eine Datenbank für den Lagerbestand einzurichten. Dazu bekommt jeder noch so kleine Widerstand/Kondensator/Spule/IC/was auch immer eine ID. Zu dieser ID möchte ich nun "attribute" hinzufügen, wie elektrische kenngrößen, lagerbestand, die bauteilbezeichnung, den lagerort, direkter link zum datenblatt, usw .... und das dann miteinander verknüpfen. das ganze soll in einer mysql-datenbank gespeichert werden und über ein webinterface (via pHp?) erreichbar sein (am besten mit benutzerverwaltung, dass z.b. nur berechtigte personen den lagerbestand ändern dürfen).
Mit der Weboberfläche soll man einmal den aktuellen bestand einsehen können, buchungen vornehmen können, bauteile hinzufügen/löschen (natürlich nur, wenn man in der benutzerverwaltung entsprechende rechte hat) usw ... habt ihr vllt ein paar tipps wie das am einfachsten zu realisieren ist?
Habe ma gehört dass es bei solchen Datenbanken sinnvoll ist, viele Tabellen anzulegen um die einzelnen informationen zu verteilen, weil man so flexibler ist. Stimmt das? achja: server wird wohl apache mit mysql zum einsatz kommen (also via xampp). OS ist windows server, falls das wichtig ist.

Danke schonma
Olunixus
 
Am einfachsten zu realisieren?
Hm ich erkenne da nicht gerade die Komplexität, klingt relativ trivial.
Vllt. solltest du aber Gruppen für Bauteile also Tabellen einführen.
Klar ist, dass ein 0815 Buchungssystem mit einer Tabelle die die Buchungen speichert usw. benötigt wird.

Tips für deine Aufgabe sind generell schwierig zu geben ohne überhaupt eine Vortellung zu haben was für Eigenschaften noch alles gespeichert werden müssen bzw. einen Testdatensatz. Aber letztendlich wirst du ja bezahlt und nicht wir also solltest du diese kleine Aufgabe doch problemlos alleine hinbekommen.

MfG
 
:D darin liegt ja das problem^^ ich lerne elektroniker geräte/systeme und hab sonst mit datenbanken innerhalb der ausbildung nichts zu tun. was halt schwer werden könnte -find ich zumindest- ist, dass wenn man ein neues bauteil in die datenbank eingeben will und man für dieses dann ne komplett neue kategorie zum einsortieren brauchr, diese kategorie ja auch erstellt werden muss, aber möglichst ohne nochmal manuell was an den scripten/tabellen ändern zu müssen.
 
Ne das ist ganz simpel.
1 Tabelle für Kategorien
X Tabellen für Bauteile,wobei das nicht zwingend ist.

In deinem Fall legst du dann eben erst in der Tabelle Kategorien eine neue an, mittels einer Eingabemaske, wie diese heißen soll oder so und danach fügst du dein neues Bauteil hinzu wenn du magst, machst du eine Combobox zum auswahl der Kategorien und schwups fertig.

Sofern du etwas SQL kannst und etwas programmieren bekommst du das locker hin ;)
 
Wenn Du es dringend benötigst, würde ich es Dir gegen ein kleines Endgeld fertigstellen.
Bedingung ist nur, mach ne Liste fertig was es alles können muss und welche Benutzergruppen erstellt werden sollen.
Und was halt noch dazu nötig ist.

Hab Abends ein wenig Zeit und könnte dass dann zügig realisieren!

Wenn Du Interesse hast, meld Dich einfach per PM.
 
Zuletzt bearbeitet:
Wenn man die Aufgabenstellung ließt + das was nicht drinn steht aber gewünscht werden wird ist das eine für dich praktisch unlösbare aufgabe.

Versteh nicht wie da jemand sagen kann das ist kein Problem.
Eine sinnvolle Lagerverwaltung für ein Unternehmen ist kein Kinderspiel und muss sauber funktionieren irgnedwas zusammen pappen und hoffen das passt schon funktioniert nicht.
Ich rate euren Unternehmen wenn es das wirkich will sich eine Art Betriebsinformatiker zuzulegen für das dürfte ein Informatik Studenten eines höheren Semesters ausreichen, wenn er ein anständiges requirement bekommt.
 
ich bins nochma :)
habs hinbekommen - war wesentlich einfacher als ich dachte^^ kann jetzt daten eingeben, ausgeben, ändern, zu dem bauteil das richtige datenblatt aufrufen ..... :) aber: ich möchte jetzt noch, dass wenn ich mir die daten in form einer variablen tabelle anzeigen lasse, durch einen klick auf die ID des entsprechenden bauteils direkt zu einem formular weitergeleitet werden wo ich dieses bearbeiten kann. der code sieht so aus:

PHP:
//Variablen übernehmen
$Bauteil = $_POST["bezeichnung"];
$minAnzahl  = $_POST["minanzahl"];
$maxAnzahl  = $_POST["maxanzahl"];
$ID      = $_POST["id"];
$Typ     = $_POST["typ"];

$IDsend = " //HIER SOLL DER LINKNAME REIN ";
$changedatalink = "changedata.php?IDsend=".$IDsend;


//Eingabe prüfen!
if($maxAnzahl < $minAnzahl)
    {
    echo "Fehler!";
    }
//Daten ausgeben!
$filter = "SELECT * FROM bestand WHERE Typ = '$Typ' || Anzahl >= '$minAnzahl' && Anzahl <= '$maxAnzahl' || Bezeichnung = '$Bauteil' || ID = '$ID'";
$suchen = mysql_query($filter);

echo "<table width=\"100%\" border=\"1\">";
echo  "<tr>";
echo    "<td>Bauteilbezeichnung</td>";
echo    "<td>Anzahl</td>";
echo    "<td>Typ</td>";
echo    "<td>ID</td>";
echo    "<td>Datenblatt</td>";
echo  "</tr>";

while($row = mysql_fetch_object($suchen))
    {
    $Bauteil = $row->Bezeichnung;
    $Anzahl = $row->Anzahl;
    $Typ = $row->Typ;
    $ID = $row->ID;
    $Datenblatt = $row->Datenblatt;

echo  "<tr>";
echo    "<td>" . $Bauteil . "</td>";
echo    "<td>" . $Anzahl . "</td>";
echo    "<td>" . $Typ . "</td>";
echo    '<td><a href= '. $changedatalink .' > '. $ID . '</a></td>';
echo    '<td><a href="Datasheets/'. $Datenblatt . '""> '. $Datenblatt . '</a></td>';

echo  "</tr>";
  }
echo "</table>";

Das ganze sieht dann z.B. so aus:

suchergebnisse.png

wenn ich jetzt auf eine ID eines bauteils drücke, dann soll diese ID in der variablen $IDsend gespeichert werden, dass ich diese via URL übergeben kann. über eine session-ID oder cookies möchte ich es nicht machen, da wir auf cookies usw. verzichten wollen. mein problem ist, dass ich vorher ja nicht weiss in welcher zeile der benutzer später den link zu -seinem- bauteil anklickt, und ich weiss ja auch nicht wieviele bauteile die suche ausspucken wird. um es mal plump zu formulieren: "ich will dass der name des links, den der benutzer anklickt, in der variable $IDsend gespeichert wird".

hoffe ich habs einigermaßen verständlich rübergebracht^^
achja, was ich am anfang vergessen hatte zu sagen: diese bauteilverwaltung ist nur für unsere "kleine" ausbildungsabteilung gedacht, und wird nicht in irgendwelche firmeninterne prozesse o.ä. eingebunden, weshalb wir das auch gerne -selber- machen würden ;)

danke
Olunixus
 
http://selfhtml.org

Das was du suchst dürfte

<form action="changedata.php" method="POST">
<input type="text ..../>
</form>

sein.

Meine aussage mit Zusammenpappen drift hier übrigens zu ;)
 
sry, stehe grade aufm schlauch. ich hab doch den link usw. schon ... ich will doch nur der variable $IDsend den wert der ID in der entsprechenden zeile zuweisen ...
nachdem die letzte zeile ausgegeben wurde, steht in der variablen $ID noch der wert der letzten zeile ... (falls das was hilft)
 
Ich glaube du hast da einen Denkfehler. Du musst einfach machen:
Code:
echo    '<td><a href= '. $changedatalink. $ID.' > '. $ID . '</a></td>';
Dann erzeugt er für jede ID einen eigenen Link, der wiederum die ID enthält.
 
Ist jedes Bauteil eine eindeutige bezeichnung? Wenn ja, kannst du dir die Künstliche ID sparen.

Ansonsten würd ich wie oben schon erwähnt für jede kategorie eine eigene tabelle hernehmen.
Die Bauteilbezeichnung würd ich in der Tabelle dann jeweils als Primary Key nehmen.

In einer weiteren Tabelle würd ich dann die einzelnen Kategorien abspeichern.

Von SQL her würd das in etwa so aussehen

PHP:
CREATE TABLE categories ("Kategorie" VARCHAR(40) NOT NULL, 
    PRIMARY KEY("Kategorie"));
CREATE TABLE bauteile ("Bauteilbezeichnung" VARCHAR(40) NOT NULL, "Anzahl" INT(10), "Datenblatt" VARCHAR(255), 
    PRIMARY KEY("Bauteilbezeichnung"));
CREATE TABLE catbau ("Bauteilbezeichnung" VARCHAR(40) NOT NULL, "Kategorie" VARCHAR(40) NOT NULL, 
    PRIMARY KEY("Bauteilbezeichnung", "Kategorie"), 
    FOREIGN KEY("Bauteilbezeichnung") REFERENCES bauteile ("Bauteilbezeichnung"),
    FOREIGN KEY("Kategorie") REFERENCES categories ("Kategorie"));

Wichtig ist, das du die Tabelle "catbau" wegen der Fremdschlüsselbeziehungen als letztes erstellst.

bzw. so würd ich die Datenbank aufbauen.
Wenn du dann die Bauteile abfragst musst du warscheinlich mit JOINs arbeiten ;)
 
die ID soll als primärschlüssel zum eindeutigen identifizieren eines bauteils dienen.

@cx01
deine lösung gefällt mir, nur woher weiss das programm dass die variable ID im link für die entsprechende zeile auch die richtige ID enthält?

habe es mit der tabelle so gelöst, dass ich bisher eine tabelle habe (" bestand ") und dort gibts die spalten ID, bauteilbezeichnung, anzahl, typ, datenblatt (inzwischen sind noch 2 spalten für den lagerort hinzugekommen).
 
Olunixus schrieb:
@cx01
deine lösung gefällt mir, nur woher weiss das programm dass die variable ID im link für die entsprechende zeile auch die richtige ID enthält?

Ehrlich gesagt, verstehe ich deine Frage jetzt nicht. Kann natürlich auch sein, dass ich die ganze Sache falsch verstanden habe.
Die $ID kommt doch direkt aus der Datenbank. Wenn du die an die URL anhängst, weisst du im changedata.php dann, welche Row geändert werden soll.
 
hm ... macht sinn - werd ich gleich ma probieren^^

edit:

funzt :D - tiptop^^ danke ... oh man, und danach google ich 2 tage lang ohne was brauchbares zu finden ... werd mich bestimmt nochma wegen irgendwas andrem hier melden ;) ^^
 
Zuletzt bearbeitet:
@Olunixus: Schon klar, aber wenn die Bauteilbezeichnung eindeutig ist, dann kann man sich die ID sparen. Mein Datenbanken prof würd dir btw. den Kopf dafür abreißen wenn du künstliche IDs verwendest ;)

@cx01: Beantwort pls meine Frage: Ist die Bauteilbezeichnung eindeutig?
 
wieso? wir verwenden die IDs für strichcodes, die an die packung der bauteile geklebt werden. wir nehmen aber nen strichcode der nur ziffern enthält ^^

die bauteilbezeichnung könnte doppelt vorkommen, da die ID ja als primärschlüssel herhalten muss. aber theoretisch ist die auch eindeutig, da z.B. unterschiedliche gehäuseformen des gleichen bauteils eine andere bezeichnung haben^^
 
Black_Panter schrieb:
@cx01: Beantwort pls meine Frage: Ist die Bauteilbezeichnung eindeutig?
Nehme mal an, dass sie eindeutig ist. Allerdings sehe ich keinen Vorteil darin, sie als Key zu benutzen.
 
Okay.
Aber selbst mit ID würd ichs in die drei tabellen aufteilen. So machst du dir z.b. auch einfacher, wenn ne Kategorie umbenannt wird u.ä.
Den Namen kannst du ja als zusätzlichen schlüssel angeben. so kann man dann sowohl nach id als auch nach produktname suchen
 
man soll auch nach dem typ suchen können ... geht ja bisher auch schon. habe nen filter für bezeichnung, bestand, typ, anzahl (von X bis Y ist vom bauteil im lager) und für die ID. da fallen mir aber grad noch 2 sachen ein^^: mein primärschlüssel (im moment ID), ist der nur innerhalb der tabelle, oder ist der datenbankweit in allen tabellen "automatisch" untereinander verknüpft. (also in tabelle1 hab ich ne spalte ID als primärschlüssel, und in tabelle2 - weiss mysql dann schon, dass die IDs jeweils zusammengehören?), und wenn ich in mysql nach einem datensatz suche, dann kann ich mit dem %-Zeichen das ja so anstellen, dass wenn ich in der suche z.B. " PIC% " eingebe, dass dann alles angezeigt wird, was mit " PIC " anfängt. wenn ich jetzt jedoch bei meinem Filterformular auf der website das mit % eingebe, kommt garnix - wahrscheinlich sieht der das %-Zeichen noch als teil des begriffs, und nicht als -operator?- ... wie kann ich das einstellen, dass das gerät das %-Zeichen erkennt und entsprechend filtert?
 
Vielleicht als Randnotiz(en):
1. Allles was mit der Datenbank geht gehört escaped.
2. Die übergebene ID gehört auf Gültigkeit überprüft und falls nicht entsprechend gehandelt.
3. Wie schon erwähnt solltest ne integer(long) ID verwenden.
4. Ich würd nicht alles mit echo machen sondern ?> HTML zeugs <?php php zeugs
5. Falls dieses min/maxAnzahl einschränken soll funktioniert das so nicht da es reicht wenn eine der Bedingungen erfüllt ist.
6. Die Create Tabels von Black_Pantha funktionieren möglicherweise nicht, mein letzter wissensstand ist das Mysql nicht direkt foreign key beherrscht sondern nur mit der InnoDB engine.
7. eine vermutlich noch längere Liste

Suchen nach etwas das mit einem Text anfängt oder vor kommt in SQL funktioniert folgendermaßen.
Select * From table t where t.column LIKE '%escapedSearchString%'
 
Zurück
Oben