Fabienne: dynamische Preisliste mit Versionsnummer

Hallo zusammen,

ich will eine Preisliste erstellen, die im Prinzip wie eine (echte) Tabelle aussieht. Dabei soll in den Spalten die "Breite" und in den Zeilen die "Höhe" der Produkte erscheinen. Als weiteres Merkmal wird diese Tabelle aber mehrmals durch eine zentrale Instanz (Chef!!)aktualisiert, wobei evtl. einige Spalten oder Höhen herausfallen können, sprich aus dem Sortiment genommen werden. ABER: Die bestehenden Preislisten für die Kunden sind immer auf ein Jahr festgelegt => d.h. die man darf auf keinen Fall aus der Datenbank die HÖHE x rauslöschen.

Meine Idee:
in ner DB:

  • Tabelle breite mit den Breiten-Angaben und einem Feld aktiv/inaktiv und einer autoinkrement id

  • Tabelle hoehe mit den Höhen-Angaben und einem Feld aktiv/inaktiv und einer autoinkrement id

  • Tabelle preise mit Bezug auf breite.id und hoehe.id, wobei bei der erstellung der jeweiligen Preisliste die jeweils gültigen/aktiven Elemente zur Auswahl stehen und einer autoinkrement id.

Soweit so gut.

Warum legt man in relationalen Datenbanken immer ein "Zwischentabelle" an?
In meinem Beispiel würde dann nicht der Bezug auf breite.id und hoehe.id in der preise tabelle stehen, sondern in einer verbindungstabelle:

verbindungstabelle:  autoinkrement id | preis.id | breite.id  | hoehe.id

Warum ist das so? Ich finde das umständlich, lasse mich aber gerne eines besseren belehren!

Danke!

  1. Hallo zusammen,

    Mal sehen, ob ich dich richtig verstanden habe...

    ich will eine Preisliste erstellen, die im Prinzip wie eine (echte) Tabelle aussieht. Dabei soll in den Spalten die "Breite" und in den Zeilen die "Höhe" der Produkte erscheinen.

    Es gibt also eine festgelegte Anzahl Werte für "Breite" und für "Höhe". Sprich: Eine Tabelle mit x Breiten und eine mit y Höhen. Diese Werte betrachten wir der Einfachkeit halber erst einmal als unveränderlich, das heißt es kommen keine hinzu oder fallen weg.
    Tabelle: breite - Felder: id, wert
    Tabelle: hoehe - Felder: id, wert

    Warum legt man in relationalen Datenbanken immer ein "Zwischentabelle" an?

    Nun gibt es eine Verknüpfung zwischen einzelnen Breiten und Höhen. Dafür brauchst du eine weitere Tabelle. In einer "echten" Tabelle gibt es quasi für jedes x und jedes y einen Schnittpunkt (ein Feld). Eine Datenbank ist da flexibler, da es nur für die interessierenden Schnittpunkte Datensätze gibt.

    In meinem Beispiel würde dann nicht der Bezug auf breite.id und hoehe.id in der preise tabelle stehen, sondern in einer verbindungstabelle:

    Im Falle von Preisen würde ich die gleich in die Verknüpfungstabelle schreiben.

    Tabelle: preise - Felder: id, id_breite, id_hoehe, preis

    Abstrakter ausgedrückt: Wenn die Schnittpunkt-Werte untereinander keine grundsätzlichen Gemeinsamkeiten haben (zufällig gleiche Werte zählen nicht dazu), können die gleich in die Tabelle rein.

    Würde es sich um Objekte mit weiteren Eigenschaften handeln, wo ein und das selbe Objekt (mit den gleichen Eigenschaftswerten) mehrfach im Kreuzgitter auftreten kann, dann würde ich das in eine weitere Tabelle schreiben und stattdessen nur einen Verweis (dessen ID) in die Verknüpfungstabelle eintragen.

    1. Hi

      Mal sehen, ob ich dich richtig verstanden habe...

      Ja, hast Du.

      Es gibt also eine festgelegte Anzahl Werte für "Breite" und für "Höhe". Sprich: Eine Tabelle mit x Breiten und eine mit y Höhen. Diese Werte betrachten wir der Einfachkeit halber erst einmal als unveränderlich, das heißt es kommen keine hinzu oder fallen weg.

      Neine, nicht ganz. Es gibt unterschiedliche Anzahlen von Höhen und Breiten, sprich, es könnte sein, dass heute 5mx5m angeboten werden, morgen wird aber genau diese Größe rausgelöscht, dafür kommen 5,2mx4,8m und 4,8mx5,5m dazu, also unterschiedliche Anzahlen in allen Tabellen.

      Aber, dieses Problem habe ich (glaube ich) schon durch meine aktiv/inaktiv-Spalte erledigt.

      Grüßle

      1. Aber, dieses Problem habe ich (glaube ich) schon durch meine aktiv/inaktiv-Spalte erledigt.

        Eben. Deswegen bin ich da auch nicht weiter drauf eingegangen. Du hast ja nur nach dem Sinn der Verknüpfungstabelle gefragt.

        Sind da jetzt alle Klarheiten beseitigt? :-)