online 1
gast (50)

/ Forum / Datenbanken

DatenbankenDatenbanken

Fragevon Mel vom 29.06.2019, 00:34 Options

1:n Beziehung oder n:1 Beziehung?!

Hallo,

vielleicht kennt der eine oder andere die Bücher vom Fachautor Matthias Kannengiesser. Nein, ich will hier keine Werbung machen, sondern ich werd aus einem seiner ER-Modelle für einen Onlineshop nicht ganz schlau. Ich hab mal das entsprechende Modell auf die 4 wesentlichen Tabellen reduziert:

PRODUKT
-produktnummer (primary key)
-bezeichnung
-preis


WARENKORB
-warenkorbnummer (primary key)
-produktnummer (foreign key)
- preiseinesartikels
-mengeeinesartikels



BESTELLTE PRODUKTE
-bestelldetailnummer (primary key)
-produktnummer (foreign key)
-preiseinesartikels
-mengeeinesartikels
-bestellnummer (foreign key)


BESTELLUNGEN
-bestellnummer (primary key)
-kundennummer (foreign key)
-gesamtbetragallerartikelplusversandkosten



Kannengiesser schreibt, dass die TABELLE WARENKORB MIT DER TABELLE BESTELLTE PRODUKTE nahezu identisch ist. Der einzige Unterschied ist, dass WARENKORB temporal ist und nach entgütliger Bestellung aufgelóest wird.


Die Beziehungen sieht Kannengiesser wie folgt:

Eine Bestellung besteht aus meheren bestellten Produkten:
BESTELLTE PRODUKTE : BESTELLUNGEN N:1


Bestellte Waren werden aus Warenkorb übernommen:
WARENKORB : BESTELLTE PRODUKTE 1:1

Ein Warenkorb besteht aus mehreren Produkten, daher
PRODUKTE : WARENKORB 1:N



Meine Frage bezieht sich auf das letzte Verhältnis:
Warum ist das Verhältnis von PRODUKTE zu WARENKORB 1:N?
Jedes Produkt kann doch mehrmals als bestelltes Produkt vorkommen, und es wäre eine N:1 Beziehung, oder nicht?


--> Hat der Autor sich hier mit der 1:n Beziehung geirrt?

Vielen Dank für Eure Ideen im voraus
Gruss Mel


Antwort schreiben

Antwort 21 von disco vom 09.07.2019, 09:42 Options

also mit php kann ich dir nich viel helfen, aber normalerweise hast du ja sowieso ein objekt, das die jeweilige DB-tabelle abbildet.

vereinfacht:

Objekt: BESTELLTE_PRODUKTE_TEMP
{
String produktnummer;
int mengeeinesartikels;
...
}

Für jedes Produkt (produktnummer), das in den warenkorb gelegt werden soll, erzeugst du eine neue instanz des objekts und packst es in ein arrayähnliches gebilde (je nach dem was es da so in php gibt). in java würd ich vielleicht ne hashtable mit der produknummer als key nehmen...

Zitat:
Mit einer Session, und ohne Datenbanktabelle, wird es dann doch etwas aufwendiger mit der Programation oder nicht?

mit tabelle ist es aufwändiger weil du ja noch DB-arbeiten zwischendurch hast.

Zitat:
Wenn man an die typische Seite eines Onlineshops denkt, in der der Kunde ide Möglichkeit hat, die Anzahl eines eingekauften Produkts zu erhöhen oder es sogar aus dem Warenkorb zu streichen, dann steckt da sicherlich eine temporale Tabelle dahinter oder ?


nein. du kannst die angabe ja genau so gut im session-objekt ändern, bzw. das objekt löschen.

Antwort 22 von Mel vom 09.07.2019, 10:41 Options

Zitat:
Für jedes Produkt (produktnummer), das in den warenkorb gelegt werden soll, erzeugst du eine neue instanz des objekts und packst es in ein arrayähnliches gebilde (je nach dem was es da so in php gibt). in java würd ich vielleicht ne hashtable mit der produknummer als key nehmen...


jupp, so werd ich´s dann mal mit der Session probieren.

vielen vielen Dank, dank Deiner Hilfe beginnt die Woche hervorragend!

Bis bald
Mel

Antwort 23 von Mel vom 02.08.2019, 10:59 Options

@Fabian.

Vielen , vielen herzlichen Dank für die Antwort und sorry für mein verspätetes Feedback.


Zitat:
ich weiss ja nicht wofür du das machst, ob das ein echter Shop werden soll oder "nur" ein Übungsobjekt ist.

Ich würde gern einen echten Shop basteln. Obwohl leider nicht alles geht wie man möchte, würde ich doch gern die reale Seite eines Onlineshops (ferner der Büchertheorie) kennenlernen...

Zitat:

Meiner Meinung nach sollte man aber den temporären Warenkorb von Kunden speichern und per Cookie wiederauffindbar machen.

Ja, inzwischen hab ich mich auch dafür entschieden. Ein Cookie ja, aber aus Sicherheitsgründen ist es besser, wenn der Cookie nach ner halben Stunde nicht merh gueltig ist (normale einstellungen eines sessioncookies soweit ich weiss). Wenn Deine "Sessionverbindung" die ganze nacht über aktiv bleiben soll, gábe es doch das Risiko, dass jemand Deine Session übernimmt, oder nicht?

Oder beziehst Du Dich auf ein "normales "Cokie, das Deine Einkaufsdaten speichern soll?

Bis danni und vielen Dank noch einmal für den Beitrag
Mel

Antwort 24 von Mel vom 03.08.2019, 15:29 Options

Hi "halfstone"

Zitat:
Wie gesagt es gibt meiner Meinung nach nichts ärgerliches wie dieser dämliche Satz: "Ihre Session ist abgelaufen, begeben Sie sich auf die Sartseite und machen sich die ganze Mühe noch einmal..."
Der Benutzer weiss doch gar nicht was eine Session ist und er versteht auch nicht warum die abläuft, er will nur bequem etwas kaufen.


Ja, das ist wohl war. Der Normalkunde wird entweder Cookie aktivieren oder deaktivieren, und wahrscheinlich nicht darauf achten, ob es sich um ein Sessioncookie handelt oder nicht.

Zitat:

daher würde ich es auch nicht in einer Session oder einem Sessioncookie speichern sondern den Warenkorb und die Angaben des Usern in der Datenbank speichern und ihm ein Cookie setzen über das man ihn wieder identifizieren kann wenn er nach Ablauf der Session in ein paar Tagen x oder Stunden y wieder vorbei schaut.


--> Würdest Du dann ganz ohne Session arbeiten, richtig?
--> Aber was ist, wenn der Kunde in einem Internetcafe sitzt und die Bestellung nicht beendet und der nächste user mit seinem Cookie locker weiter bestellt?

Ein weiterer Aspekt, der mir einfällt,ist, dass Du, wenn Du wirklich ALLE eingegebenen Daten vom Kunden temporal in der DB speichern willst ist (anstelle in der Session), dass Du die Tabelle ziemlich oft aufrufen musst, um Daten zu ändern, einzufügen, usw. (Ich denke da nur an Anschrift, Versandart. Bezahlungsform, usw.) Das könnte, glaube ich, nicht nur das Sicherheitsrisiko erhöhen sondern auch mehr Zeit zum Laden der Seite benötigen und bedeutet zudem einen zusätzlichen Programmieraufwand, denn da sind ja dann einige zusätzliche temporale Tabellen fällig, oder nicht?

Bin gespannt auf Deine Antwort
Einen angenehmen Nachmittag
Gruss Mel

Antwort 25 von Mel vom 09.08.2019, 19:38 Options

@Fabian,

vielen Dank für Deine Tipps. Ich werde mal alle Möglichkeiten ausprobieren:

Mit Warenkorb temporär speichern oder gleich alles in Session usw.

Es scheint, als wenn man einen Warenkorb auf hunderte von verschiedenen Arten programmieren kann, nicht wahr?

Na, ich versuch mich dann zumindestens mal an den zwei o.g. Varianten und meld mich dann wieder.

Einen schönen Abend noch udn vielen vielen Dank für die vielen Mitteilungen

Gruss Mel

Ähnliche Themen

Löschen der "1"-Seite einer 1:n Beziehung
roland.stork  24.08.2007 - 26 Hits - 2 Antworten

Kann man eine über Internet versendete sms zurückverfolgen??????
eintracht  19.11.2007 - 280 Hits - 1 Antwort

Google + Lego
Gloria  28.01.2008 - 37 Hits - 2 Antworten

änderung in tabelle
geritt  12.02.2008 - 41 Hits - 3 Antworten

Suchen im Hauptformular + Unterformular
maxim66  27.05.2008 - 65 Hits -

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Mon Jan 26 09:21:55 2026