Django: Datenbankaufbau Haushaltsbuch

Django, Flask, Bottle, WSGI, CGI…
Antworten
luvlinux
User
Beiträge: 33
Registriert: Donnerstag 24. August 2017, 08:53

Hallo zusammen,

ich habe vor einigen Monaten ein einigermaßen funktionierendes Haushaltsbuch mittels Access2016 erstellt, welches ich in Django neu erstellen möchte. Da ich mir nicht sicher bin, ob mein Datenbankaufbau optimal ist, wollte ich mal eure Meinung einholen.
Hier sind die Beziehungen https://picload.org/view/ddcodprr/bezie ... 1.png.html
Hier ist das Eingabeformular https://picload.org/view/ddcodpra/beweg ... s.png.html

Mit dem Haushaltsbuch sollen meine Einkaufsbelege, Aldi, Lidl, Tankstelle, Möbelhaus etc. erfasst werden. (vergleiche Eingabeformular).
Da auf einem Beleg meist mehrere Positionen habe, bleibt das Datum und die Lokation (Händler) über die Positionen hinweg gleich. Damit ich das Datum und die Lokation nicht immer erneut eingeben muss, gebe ich einen Datensatz einmal komplett ein und kopiere ihn dann z. B. ca. 20mal und ändere dann nur noch das Produkt, Anzahl, Einheit und Einzelpreis ab. Habe ich zuviele Datensätze kopiert, lösche ich die überschüssigen oder sind es zu wenig kopiere ich erneut.
Also was ich mir von einer optimierten Eingabe her vorstelle ist:
Ich wähle ein Datum (17.01.2018) und eine Lokation (Aldi) aus die konstant bleiben sollen, bis ich den Beleg abgearbeitet habe. Dann ändere ich die Lokation (z. B. Lidl), das Datum kann u. U. gleich bleiben oder sich auch ändern (z. B. 18.01.2018).

Hier nun meine Fragen:
1.Habt ihr einen Vorschlag wie ich meine gewünschte Eingabe realisieren kann
2. Muss ich für die Realisierung von Punkt 1. meine Datenbank anpassen oder habt ihr einen Optimierungsvorschlag für selbige?

PS: Das Haushaltsbuch nutze ich um meine Ausgaben analysieren zu können, z. B. wieviel Geld für Obst, Fleisch, Möbel, Tanken draufgegangen ist. Eventuell möchte ich die Anwendung um weitere Apps erweitern.
Das Projekt möchte ich durchführen, um meine Django-Kenntnisse zu erweitern.
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

@luvlinux: ob und wie vorbelegte Felder benutzt werden, ist allein Sache des Formulars. Bei der Einheit bist Du etwas ungenau, Eier gibt es in 10er oder 6er Packungen, den Schinken wahrscheinlich in noch größerer Vielfalt. Daher sollte die Einheit in die Produkt-Tabelle wandern. Die Tabellen kann man weiter normalisieren, wenn man noch eine für Einkauf hinzufügt, um Datum und Lokation dort nur einmal speichert.
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

ich denke, ich würde die Eingabe dann so machen, dass die Daten nicht per POST-Request gesendet werden, sondern via AJAX. Dann bleiben die Felder "stehen" und du kannst sie bei der nächten Eingabe überschreiben.

Das Formular-Framework von Django kennt ootb AFAIK keine Listen-Felder, sonst ginge das auch über eine dynamisch erweiterbare Liste im Frontend, wie hier mit WTForms und ein bisschen JavaScript umgesetzt.

Das mit dem auf gut Glück X Felder kopieren und dann löschen oder noch mehr kopieren ist jedenfalls ein schlechter Ansatz, weil umständlich und fehleranfällig.

Gruß, noisefloor
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Wenn du Datenbank-Programmierung und Django lernen willst, dann ist ein Haushaltsbuch damit sinnvoll.

Wenn du einfach nur ein Haushaltsbuch haben willst und herausfinden möchtest wohin dein Geld fließt, dann geht ist es viel einfacher:
Die Ausgaben werden einigermaßen einheitlich in Text-Dateien geschrieben (z.B. eine Datei pro Monat).
Mit Python wird ein Parser dazu mit Auswertung programmiert.
a fool with a tool is still a fool, www.magben.de, YouTube
luvlinux
User
Beiträge: 33
Registriert: Donnerstag 24. August 2017, 08:53

Sirius3 hat geschrieben:@Die Tabellen kann man weiter normalisieren, wenn man noch eine für Einkauf hinzufügt, um Datum und Lokation dort nur einmal speichert.
@Sirius3: Erst einmal vielen Dank für deine Antwort.
Ich denke, dass die vorgeschlagene Normalisierung mein Problemchen lösen würde. Ich lege dann eine Tabelle Einkauf mit den Felder
id_einkauf (pk), datum, id_lokation an. In meiner bewegungs-tabelle schmeiße ich datum und lokation raus und füge dann id_einkauf (fk) hinzu. In meinem Mockup würde das dann grob so aussehen: https://picload.org/view/ddcowlwl/mocku ... h.png.html
Denkst du, dass das so passt?
Dann würde ich demnächst mit der Umsetzung beginnen (da werde ich wohl doch nochmal bei den queries Hilfe brauchen :roll:

An Einheit in die Produkt-Tabelle packen, werde ich noch etwas feilen.
luvlinux
User
Beiträge: 33
Registriert: Donnerstag 24. August 2017, 08:53

@noisefloor und MagBen: Auch vielen Dank für eure beiden Antworten.

@noisefloor: Den Link werde ich mir ausführlich zur Gemüte führen, da ich das was du grob geschildert hast, sicher bald brauchen kann.
PS: Dass Kopieren und fehleranfällige Überschreiben der Datensätze war nur eine Notlösung, damit es schneller ging. Der Daher wollte ich es in einer zukünftigen Lösung auch vermeiden.

@MagBen
Da ich seit einiger Zeit mich mit Django beschäftige, wollte ich ein Projekt mit selbigem durchführen.
Antworten