Python Entwurf?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Jedes Lebensmittel hat eine eigene Maßeinheit.
Eine Maßeinheit kann bei mehreren Lebensmitteln vorkommen.
Also muss eine n-1 Verbindung von Lebensmittel zu Maßeinheit.
Ansonsten sollte die Maßeinheit mit nichts verbunden sein.

Einfaches Beispiel, damit du's verstehst:
Das Lebensmittel "Ei" hat die Maßeinheit "Stück", das Lebensmittel "Milch" hat die Maßeinheit "ml".

In der Lebensmittelliste brauchst du dann Einträge die eine Kombination aus Lebensmittel und Quantity darstellen. Quantity muss keine extra Tabelle sein, dafür reicht eine Spalte.

500 Milch (-> ml)
3 Ei
...

Ich würde dafür eine Tabelle Listeninhalt machen (wobei ich die Sachen persönlich eher auf englisch benennen würde, aber das ist egal):

ListenID     | LebensmittelID | Quantity
ABCD-1234    | Egg            | 5
ABCD-1234    | Milk           | 500
ASDF-3214    | Bread          | 1
ASDF-3213    | Egg            | 6

In dieser Tabelle steht dann also, in welcher Liste welche Lebensmittel in welcher Menge vorhanden sind. PK ist logischerweise die Kombination aus (ListenID, LebensmittelID), weil es pro Liste pro Lebensmittel einen Eintrag geben kann.

Jedem Lebensmittel würde ich wie du siehst eine ID geben, um es eindeutig zu identifizieren. Sowas anhand der Bezeichnung zu machen ist keine gute Idee, weil was ist, wenn du die App mal Mehrsprachig machen möchtest. Als ID verwendet man normalerweise eine automatisch generierte 128-bit UUID (lässt sich in VARCHAR(36) speichern), in dem Beispiel hier habe ich aber einfach selbst-vergebene IDs wie "Egg" oder "Milk" genommen, kann man natürlich auch machen wenn man nicht viele Daten hat.

Im Klassendiagram musst du die ListenID beim Inhalt natürlich nicht darstellen. Da gibst du der LebensmittelListe einfach eine List<Listeninhalt>, das hast du eh schon richtig.


Hangover2229 
Fragesteller
 16.04.2024, 14:15

Du meinst also ich sollte einfach nur die Maßeinheit mit dem Lebensmittel verbinden und erst wenn es zu einem Eintrag kommt, Quantity nutzen?

0
MrAmazing2  16.04.2024, 14:16
@Hangover2229

Genau, ja. Ich ergänze eben noch in der Antwort, wie ich die Einträge speichern würde

1
Hangover2229 
Fragesteller
 16.04.2024, 14:21

Danke dir!! Zum Punkt der ID: ich will für die Datenbank sowieso ein BusinessClassObject erstellen, wovon die meisten oder wahrscheinlich auch alle Klassen erben werden. Diese soll jeder Klasse eine ID zuweisen. Ansonsten mach ich alles auch noch auf Englisch

0
MrAmazing2  16.04.2024, 14:30
@Hangover2229

Kann man so machen, ja 👍

In meinen Augen beschreibt ein Klassendiagramm den Aufbau der Datenbank (oder es ist zumindest dazu gedacht, die Datenbank und die darin vorhandenen relationalen Beziehungen zu planen), heißt ich würde die ID da überall manuell mit dazu packen, anstatt eine extra Klasse nur mit ID darzustellen. Weil in Datenbanken gibt es keine Vererbung.

Aber vlt. checkt dein Prof was gemeint ist oder ihr dürft das so machen oder ich hab's falsch in Erinnerung, dann egal :D

Ich glaub bei uns war das ok, aber man musste beim entsprechenden Klassennamen "extends BusinessClassObject" mit dazu schreiben.

1
MrAmazing2  16.04.2024, 14:34
@MrAmazing2

Ok nevermind hab glaub ich Quatsch erzählt, passt schon so.

Aber ich glaub die Vererbung musst du trotzdem iwie kennzeichnen :D

Pfeil mit <extends> oder so :D

1
Hangover2229 
Fragesteller
 16.04.2024, 14:42

Ja ich werde die Klasse BO noch hinzufügen und des aufzeigen. Noch eine Frage: Beim erstellen/editieren eines Rezeptes könnte ich ja genauso vorgehe. Also ein Rezept stellt eine Liste dar, dass aus den Lebensmittel-IDs und den Mengenangaben besteht, oder wie würdest du das handhaben?

0
MrAmazing2  16.04.2024, 14:48
@Hangover2229

Genau, ja.

Ich denke da kannst du die Listen wiederverwenden.

Jedes Rezept hat eine Lebensmittelliste (1 -> 1)
Jeder Kühlschrank hat eine Lebensmittelliste (1 -> 1)

Achja was mir grad noch aufgefallen ist: Lebensmittel zu Maßeinheit ist natürlich n:1 nicht 1:1. Eine Maßeinheit kann ja bei mehreren Lebensmitteln verwendet werden. Stück -> Brot, Stück -> Eier.

1
Hangover2229 
Fragesteller
 16.04.2024, 14:54
@MrAmazing2

Alles klar, danke :) Zum Glück hast du das nochmal mit der Multiplizität zwischen Maßeinheit und Lebensmittel gesagt, ich war nämlich grad beim erstellen etwas verwirrt und habe dann alles bezüglich der Mulitplizitäten in Frage gestellt xD

1
MrAmazing2  16.04.2024, 14:56
@Hangover2229

Haha ja, is mir zum Glück noch aufgefallen grad xD

Das muss man immer schön in beide Richtungen durchdenken :D

1