Sven Rautenberg: Abbildung von Webhosting-Angeboten

Beitrag lesen

Moin!

Ich entwickle gerade eine Datenbankstruktur zur Wiederspiegelung von
Webhostingverträgen, die sich aus verschiedenen Teilen zusammensetzen.
Der Kunde soll die Teile einzeln bestellen können.

Klingt kompliziert, ist es aber nicht.

domains:
id tld fee
1 de 0.99
2 com 1.29

webspace:
id MB fee
1 100 0.99
2 200 1.49

bundles_hosting:
id domains webspace fee
1 1       1           1.49
2 1       2           1.99

bundles_hosting:
id domains webspace fee
3 1 1 2       1           3.49

Das erscheint mir der falsche Ansatz zu sein.

Im Prinzip kannst du deine Produktsammlung runterbrechen auf folgenden Zusammenhang:

Du hast eine Tabelle mit Komponenten drin. Also Domains, Speicherplatz, Traffic, Subdomains, Mailadressen etc., alles das, was man so zusammensetzen kann, um einen Webhosting-Vertrag mit Leben zu füllen.

Dann hast du noch eine weitere Tabelle, welche die Bundles enthält. Name, ID, Preis, sonstige Daten.

Und mit einer dritten Tabelle verknüpfst du diese n:m-Beziehung zwischen Komponenten und Bundles. Denn es gilt: Eine Komponente kann Bestandteil mehrerer Bundles sein, und ein Bundle kann mehrere Komponenten enthalten.

Also als Tabellen ausgedrückt:

artikel:
art_id  name            einzelpreis
1       domain de        0,49
2       domain com       0,99
3       webspace 100 MB  0,99
4       webspace 200 MB  1,49

(An dieser Stelle ist natürlich blöd, dass du alle unterschiedlichen Artikeltypen in einer Tabelle hast. Das Problem läßt sich über eine weitere Spalte "Typ" lösen, die n:1 verknüpft ist mit einer Tabelle "Artikeltypen", in der einer Artikeltyp-ID eine Artikeltypbezeichnung zugeordnet ist - ist aber für die Betrachtung hier irrelevant, sondern eigentlich nur interessant für die GUI).

bundles:
bund_id  name              preis
1        Superhosting 100  0,99
2        Superhosting 200  1,49
3        Hosting 3x100     ...

Und als Zusammensetzung die Liste der Pakete:

bundles_artikel:
bund_id    art_id
1          1        -> Bundle 1 mit 1 .de
1          3        -> Bundle 1 mit 100 MB
2          1        -> Bundle 2 mit 1 .de
2          4        -> Bundle 2 mit 200 MB
3          1        -> Bundle 3 mit 1 .de
3          1        -> Bundle 3 mit 1 .de
3          2        -> Bundle 3 mit 1 .com
3          4        -> Bundle 3 mit 200 MB

Wahlweise kannst du die Stückzahl natürlich auch noch in diese Tabelle packen, um gewisse Redundanzen zu vermeiden, aber das könnten dir auch Aggregatfunktionen zusammenzählen.

So weit, so gut. Allerdings brauche ich die Möglichkeit, dass der
Kunde zwischen DE- und COM-Domains wählen kann. Wie kann man das in
der Datenbank abbilden?

Wahlmöglichkeit bewerben, aber zwei verschiedene Bundles verwenden. Oder den Domaintyp ".de oder .com" wählen.

Mir macht viel mehr Sorgen, wie du die ganzen Preise zusammenrechnen willst. Dein Beispiel legt jedenfalls für die Einzelkomponenten Preise fest, die als im Bundle nicht summiert sind - sondern teurer! Zwar nur ein Cent, aber immerhin. Der schlaue Kunde wird sich also kein Bundle nehmen, sondern Einzeleinkauf machen. :)

- Sven Rautenberg

--
"Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
(fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)