Frage von MinecrafterPG, 21

Wie kann ich Bestellungen am besten in einer Datenbank speichern?

Hi Leute,

ich habe einen Shop indem die Produkte und Preise sich öfters ändern. Doch wie speichere ich Bestellungen nun am besten ab, sodass die Produkte und Preise immer noch stimmen, auch wenn das Sortiment gewechselt hat?

Ich habe schon an an JSON gedacht, aber ich wüsste nicht wie ich anfangen sollte :-(. Wenn das eine gute Methode ist, kann mir jemand dazu ein Beispiel geben? Ich arbeite mit PHP und MySQL (der Shop an sich ist aber HTML und JavaScript)

LG

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von wotan38, 8

Du hast Deine Datenbank so konzipiert, dass es für jeden Artikel nur einen Preis gibt, nämlich in der Artikeltabelle. Als Kaufmann musst Du doch wissen, dass der Preis nur zum Zeitpunkt der Bestellung damit übereinstimmt. In der Artikeltabelle kann er sich ändern, in einer abgeschlossenen Bestellung darf es sich dagegen nicht mehr ändern. Also hast Du zwei Preise, einen aktuellen Preis und den Preis, den Du einem Kunden berechnet hast. Wenn Du jetzt lieferst und die Rechnung erstellst, nimmst Du den falschen Preis, weil Du den richtigen Preis gar nicht gespeichert hast. Nur weil die Preise meistens übereinstimmen, sind die Datenfelder nicht die selben.

Also: Füge Deiner Bestelltabelle den Preis der Bestellung hinzu und verwende bei der Verarbeitung immer den richtigen Preis. Dann kannst in Deiner Artikeltabelle die Preise problemlos ändern und auch neue Artikel in das Sortiment aufnehmen. Beim Herausnehmen aus dem Sortiment darf man nicht ohne weiteres den Artikel löschen, da in der Bestelltabelle und wohl auch in der Rechnungstabelle auf diesen Artikel immer noch Bezug genommen wird. Man macht das am besten mit einem zusätzlichen Feld "Lieferstatus", z.B. 2 = vefügbar, 1 = vorübergehend vergriffen, 0 = nicht mehr im Sortiment. Endgültig löschen kannst den Satz dann später, wenn die darauf bezugnehmenden Bestellungen und Rechnungen nach Ablauf der Aufbewahrungsfrist auch gelöscht werden.

Grundsätzlich musst Du unterscheiden zwischen Stammdaten (das sind z.B. Artikel- und Kundendaten) und Bewegungsdaten (das sind Bestellungen, Rechnungen, Zahlungseingänge und dergleichen). Die Bewegungsdaten nehmen Bezug auf die Stammdaten und haben auch eigene Daten, z.B. Rechnungs-Nr, Rechnungs-Datum und eben auch die in Rechnung gestellten Preise und Anzahl der bestellten bzw. gelieferten Artikel.

Antwort
von mastema666, 14

Wo genau liegt dein Problem?

Du kannst doch eine Tabelle für die Bestellungen anlegen und dort jede Bestellung mit Kunde, Preis, Artikelnummer und was auch immer (alles was du benötigst halt) speichern. Dann spielt es doch keine Rolle ob sich irgendwas anderes ändert?

Kommentar von MinecrafterPG ,

Beispiel:

Der Kunde bestellt. Die Datenbank mit den Artikeln sieht im Moment so aus:

  • Artikel 1: Buch (10€)
  • Artikel 2: Stift (1€)
  • Artikel 3: Lampe (30€)

Die Bestellung wird dann so abgespeichert:

  • Kunde: Mr. Beispiel
  • Menge Artikel 1: 10
  • Menge Artikel 2: 0
  • Menge Artikel 3: 1

Wenn die Datenbank mir den Artikel jetzt nach der Bestellung geändert wird, z.B. ist Artikel 1 jetzt ein Handtuch, dann stimmt die Bestellung die Mr. Beispiel aufgegbenen hat nicht mehr. Das ist das Problem. Die Daten müssen korrekt abgespeichert werden, sodass nach einer Änderung der Artikel oder der Preise nicht alle Bestellungen falsch sind

Kommentar von mastema666 ,

Dann musst du wie gesagt alle Daten, die sich ändern könnten und die du für die Abwicklung der Bestellung brauchst, mit in der Tabelle für die Bestellungen speichern.

Allerdings würde ich gar nicht erst so anfangen bestehende Artikel nur zu editieren und dabei die ID beizubehalten, einen neuen Artikel würde ich immer als neuen Datensatz speichern, einen alten / nicht mehr benötigten entweder löschen oder ihm ein "inaktiv-Flag" verpassen, dann kommt es gar nicht erst zu so einem Problem.

Antwort
von LeonardM, 13

Wenn du mit php und mysql doch vertraut bist warum dann so ne unpräzise frage?

Keine passende Antwort gefunden?

Fragen Sie die Community