Wie modelliere ich einen Warenkorb (in der Praxis)

Hi!

Ich hab vor einen Warenkorb für eine mySQL-DB zu planen. Das blöde ist, mit meinem ER bin ich nicht so wirklich zufrieden.

Das heikle daran ist: es sind verschiedene „Produkte“ die man sich in den Korb legen kann. Einerseits stinknormale wie z.b.: Bücher, Skripten, Software, … aus dem eigentlichen online-shop, aber auch Kurse, Seminare, … die natürlich ganz andere Attribute aufweisen.

Nun die Frage: Wie verbinde ich die beiden „Produkte“-Tabellen mit meiner User-Tabelle? Ein ternäres Relationship „Warenkorb“, eine „Warenkorb“-Tabelle mit Relationships zu allen anderen drei Entities, überhaupt keinen Warenkorb (= alles aus den Relationships die von „Kunde“ weggehen auslesen), Warenkorb mit Textfiles, …

Wie macht man sowas in der Praxis? Wie kommen da die Session_id’s ins Spiel? Es gibt da draussen ja Milliarden von Seiten mit Warenkörben, und ich finde einfach nirgends Informationen wie sowas gemacht wird! … Hat jemand ein paar Tipps/Links?

– Danke

Hi,
mir erscheint auf dem ersten Blick die Lösung eines ‚Warenkorbs‘
als Entity, die die relation zwischen User und Produkten herstellt am besten.
In den Warenkorb kannst du auch die Session-ID’s festhalten.

VORSCHLAG WARENKORB:

ID USERID PRODID PRODCOUNT SESSIONID SOLD

Hat jemand bessere Vorschläge? Ich finde das thema sehr interressant. (ER-Modelle, rel. Datenbanken usw.)

Gruss CO

Hallöchen :o)

Schaut ganz fein aus. So ähnlich sah auch mein zukunftsträchtigster Versuch aus. Man scheint wirklich alles speichern zu können. Nur weiss ich jetzt dann nicht, ob man die Beziehungen Kunde-Produkt eigentlich noch braucht. Schon oder?

VORSCHLAG WARENKORB

> ID USERID PRODID PRODCOUNT SESSIONID SOLD

Wie ich das verstanden habe sollts so ausschauen:

|Seminar|------|Warenkorb|------|Artikel|
 | | |
 ?? ??
 | | |
 ------------------|Kunde|------------------

Ich hab bisher was Datenbanken angeht leider nur Uni-Wissen. Aber das wird sich nun hoffentlich bald ändern :wink:

lg regenfeld

nachtrag
ach ja,

fast vergessen: Das „Kunde“ Entity war als Tabelle für registrierte Kunden geplantt. Somit könnte in obigem Diagramm ein nicht registrierter Kunde keine Produkte bestellen ?!? Oder doch ? Da steh ich noch ein bissl daneben - ist mir zu hoch, da zuwenig Erfahrung :frowning:

wo gehört die Session_id rein? In die Beziehung zw. Kunde-Warenkorb oder in alle Beziehungen die zum Warenkorb gehen? Oder gar nur in den Warenkorb? … ganz schön kompliziert :wink:

lg regenfeld

zu 1)
die relationen links und rechts mit Fragezeichen
kannst du dir sparen. Sie werden über die Entität
Warenkorb abgedeckt.

zu 2)
Doch. Wenn du die USERID solange auf 0 setzt bis eine
Id vergeben ist. Zur identifizierung reicht die Session-ID.
Ist vielleicht ein bischen kompliziert seiten der DB-Programmierung, aber möglich, wenn kein foreign-key constraint
angelegt wird.

CO

Hi.

Das heikle daran ist: es sind verschiedene „Produkte“ die man
sich in den Korb legen kann. Einerseits stinknormale wie z.b.:
Bücher, Skripten, Software, … aus dem eigentlichen
online-shop, aber auch Kurse, Seminare, … die natürlich ganz
andere Attribute aufweisen.

Eine eindeutige Produkt-ID sollte aber schon vorhanden sein.
Du kannst es ja mal mit einer Abstrahierung der Handelsware probieren. Die Trennung von Art eines Produkts von seinen Attributen. Ich spinne jetzt einfach mal:

HANDELSWARE\_TYPE
---------------------------------------------------
ID NAME DESCRIPTION
1 Buch Ein Buch
2 Seminar Ein Seminar
3 Software Ein Softwarepaket

HANDELSWARE\_ATTR
---------------------------------------------------
ID FIELDNAME DESCRIPTION
1 Seitenanzahl bla
2 Autor bla
3 Erscheinungsdatum bla
4 Anfangsdatum bla
5 Enddatum bla
6 Hersteller bla
7 Hardwarevorraussetzungen bla

HANDELSWARE\_TYPE\_HANDELSWARE\_ATTR
--------------------------------------
HANDELSWARE\_TYPE\_ID HANDELSWARE\_ATTR\_ID
1 1
1 2
1 3
2 4
2 5
3 6
3 7

HANDELSWARE
--------------------------------------------------------------
ID TITLE DESCRIPTION HANDELSWARE\_TYPE\_ID
1 Web-Design Das Trainingsbuch 1
2 Operation Rainbow Thriller 1
3 Basteln für jeden Der ultimative Kurs 2
4 Frontpage 98 Web Site Creation... 3

HANDELSWARE\_VALUES
----------------------------------------
ID HANDELSWARE\_ID HANDELSWARE\_ATTR\_ID VALUE
 1 1 1 551
 2 1 2 Mathias Nolden
 3 1 3 1997
 4 2 1 887
 5 2 2 Tom Clancy
 6 2 3 1998
 7 3 4 10.01.2002
 8 3 5 14.01.2002
 9 4 6 Microsoft
10 4 7 Pentium8 1THz, 900GB HDD

Mit so einer Abstrahierung kannst du jetzt jedes beliebige Produkt darstellen und in die DB einpflegen. Diese Struktur kann aber keine verschiedenen Datentypen abspeichern. (Aber man kann ja exzellent Strings parsen :smile:

Vielleicht kommen ja Verbesserungsvorschläge…

Nun die Frage: Wie verbinde ich die beiden „Produkte“-Tabellen
mit meiner User-Tabelle? Ein ternäres Relationship
„Warenkorb“, eine „Warenkorb“-Tabelle mit Relationships zu
allen anderen drei Entities, überhaupt keinen Warenkorb (=
alles aus den Relationships die von „Kunde“ weggehen
auslesen), Warenkorb mit Textfiles, …

Mit zwei Tabellen geht das relativ sauber:

HTTP\_SESSION
-----------------------------
ID SESSION\_ID
1 xhds87sadlhj2khjdnb
2 owe2kjlöwqdj9asdkjl
3 eiu990asdjas12asd21
4 93lasüio23ljksd902j

HTTP\_SESSION\_HANDELSWARE
--------------------------------
ID HTTP\_SESSION\_ID HANDELSWARE\_ID
1 1 1
2 1 2
3 1 3
4 2 2
5 3 2
6 4 4

Wie macht man sowas in der Praxis? Wie kommen da die
Session_id’s ins Spiel? Es gibt da draussen ja Milliarden von
Seiten mit Warenkörben, und ich finde einfach nirgends
Informationen wie sowas gemacht wird! … Hat jemand ein paar
Tipps/Links?

Session ID’s kannst du austeilen (Cookie’s) oder holen (JavaScript).

Du brauchst einfach ein initiales Erkennungsmerkmal eines Users, um seine Session verfolgen zu können. Cookies sind eh einfach zu setzten und abzufragen. Schwierig wird es bloß, wenn der User keine Cookies zuläßt. Da ist dann z.B. die Funktion

trans_id = new Date().getTime();

sehr angenehm. Diese Funktin liefert die Systemzeit des Users als Anzahl der seit 1.1.1970 24:00 vergangenen Milisekunden zurück. Diese dürfte ziemlich unique sein. Die Wahrscheinlichkeit, das jemand in der gleichen Milisekunde die Seite des Kaufhauses im Browser angezeigt bekommt, ist ziemlich gering.

Immer für weitere Fragen offen,

J.P.Jarolim