Daniel: Datenbankstruktur

Hallo zusammen!

Ich möchte Hardware-Produkte in einer Datenbank "unterbringen". Jedes Hardware Produkt kann bestimmte Optionale Komponenten haben. Beispiel: Für ein Notebook XY gibt es die Optionen DVD-Laufwerk, Akku, Sicherheitsschloss usw.

Zusätzlich sollte auch eine History ersichtlich sein, dh. wenn das Nachfolgeprodukt des aktuellen Notebooks kommt, sollte der alte Datensatz nicht einfach überschrieben werden.

Bis jetzt hab ich das folgendermassen aufgebaut (MS SQL DB).

tbl_products
------------
id
product_id
name
description
...
option1_id
option2_id
option3_id
option4_id
option5_id
date

tbl_options
-------------
id
option_id
name
descripion
...
date

Die History mache ich also, indem ich alle Datensätze mit der selben 'product_id' Suche. Anhand von 'Date' wird dann die Version unterschieden. Es kann also mehrere Datensätze mit der selben 'product_id' geben.

Was mir daran nicht so gefällt ist, dass die Anzahl Optionen beschränkt ist. Zweitens find ich die Lösung für die History mit der 'product_id' und 'date' auch nicht überzeugend. Hat jemand eine bessere Idee wie man das ganze aufbauen könnte?

Für eure Hilfe & Erfahrung danke ich euch im Voraus.

Gruss Daniel

  1. Hallo Daniel!

    tbl_products

    id
    product_id

    tbl_options

    id
    option_id

    Also, du kannst eine zusätzliche Tabelle machen, die product_id's option_id's zuordnet.

    Warum hast du eigentlich in beiden Tabellen 2 id-Felder?
    (tbl_products.id und tbl_product.product_id bzw. dasselbe bei tbl_options)

    Ansonsten, wenn Du 2 identische "id's" (?! ;) hast, dann mußt Du, um einen Datensatz eindeutig zu beschreiben, noch ein weiteres Feld prüfen - logisch.
    Ob Du dafür allerdings das Datumsfeld nimmst, oder in Deinem jetzigen Modell z.B. die id, die ja beim neueren Produkt wohl höher sein sollte als bei einem älteren, ist Deine Entscheidung.

    MfG
    Götz

    --
    Losung und Lehrtext für Sonntag, 25. Januar 2004
    Vernichten wird er den Tod auf ewig. (Jesaja 25,8)
    Es wird gesät verweslich und wird auferstehen unverweslich. (1.Korinther 15,42)
    (http://www.losungen.de/heute.php3)
    1. Hallo Götz

      Also, du kannst eine zusätzliche Tabelle machen, die product_id's option_id's zuordnet.

      Mal schauen...

      Warum hast du eigentlich in beiden Tabellen 2 id-Felder?
      (tbl_products.id und tbl_product.product_id bzw. dasselbe bei tbl_options)

      Damit ich trotzdem die Möglichkeit habe, jeden Datensatz eindeutig zu identifizieren...aber wenn ich ne zusätzliche Tabelle mache könnte das überflüssig werden.

      Gruss Daniel

      1. Hallo Goetz

        Also, ich hab das jetzt so gemacht:

        eine zusätzliche Tabelle

        tb_prodOpt
        -----------
        id
        product_id
        option_id

        Das kann dann so aussehen:

        id    product_id     option_id
        -------------------------------
        1     23             11
        2     23             15
        3     22             11

        Hast du das so gemeint?

        Gruss Daniel

        1. Hello,

          Hallo Goetz

          Also, ich hab das jetzt so gemacht:

          eine zusätzliche Tabelle

          tb_prodOpt

          id
          product_id
          option_id       <-- ist hier überflüssig

          Das kann dann so aussehen:

          id    product_id     option_id

          1     23             11
          2     23             15
          3     22             11

          id  optiontext
          -----------------------
          11  Dockingstation
          15  Zusatzacku mit Atombetrieb
          22  Festplatteninnenbeleuchtung
          99  eingebauter Servicetechniker

          Die Tabelle mit den Options fehlte.

          Liebe Grüße aus http://www.braunschweig.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          1. tb_prodOpt

            id product_id option_id       <-- ist hier überflüssig

            Warum soll das überflüssig sein? Ich muss dem Produkt die Optionen zuordnen...! Es kann letztendlich dann auch vorkommen, dass mehrere Produkte die selbe Option haben...

            Die Tabelle mit den Options fehlte.

            Warum, sie ist im vorherigen Thread...?

            Gruss Daniel

            1. Hello,

              tb_prodOpt

              id product_id option_id       <-- ist hier überflüssig

              Warum soll das überflüssig sein? Ich muss dem Produkt die Optionen zuordnen...! Es kann letztendlich dann auch vorkommen, dass mehrere Produkte die selbe Option haben...

              Jetzt hatte ich Dir so eine hübsche "Grafik" gemalt und dann Escape gedrückt... Ich bin vi-geschädigt

              produkt              prod_opt                option -----------          ------------            ------------ id        ----+      id               +----> id prod-bez      +----> id_produkt       |      option-text                      id_option  ------+

              Die ID in prod_opt ist im ersten Augenblick "verbotene" Redundanz, da ip_produkt-id_option bereits einen primären Kombinationsschlüssel geben. Wenn Du dann aber später eine Historie haben möchtest, kann es durchaus sein, dass es mehrrere Einträge id_produkt-id_option in der Tabelle gibt, die zu verschiedenen Daten Gültigkeit haben. Dann ist die ID wieder berechtigt. Ich würde sie also mitführen und dafür sorgen, dass ihr Wertebereich groß genug ist und sie immer garantiert invrementiert wird. Das ist bei MySQL-Autoincrement angeblcih nicht gewährleistet / nicht zu gewährleisten. (?)

              Die Schlüssel in der jeweils rechten Tabelle müssen Indiziert sein. Die "rechte Tabelle" muss in der Grafik nicht unbedingt rechts abgebildet sein, sondern kennzeichnet die "geführte" Tabelle, die den passenden Schlüssel zum gerade aktuellen Schlüssel der führenden Tabelle liefern muss.

              Liebe Grüße aus http://www.braunschweig.de

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              1. Hallo Tom

                Danke für deine ausführliche Antwort...aber ich denke das ist genau das was ich bereits hatte?

                Gruss Daniel

                1. Hello Daniel,

                  Danke für deine ausführliche Antwort...aber ich denke das ist genau das was ich bereits hatte?

                  Mmmh, dann habe ich dich wohl verkehrt verstanden. Sorry,

                  Aber doppelt genäht hält besser, als gar nicht ;-)

                  Liebe Grüße aus http://www.braunschweig.de

                  Tom

                  --
                  Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                  1. Hallo Tom!

                    Aber doppelt genäht hält besser, als gar nicht ;-)

                    In diesem Sinne melde ich mich auch nochmal kurz zu Wort: Genau so irgendwie habe ich es auch gemeint ;)

                    Und mit Tom's "Bildchen" sind auch die Zusammenhänge zwischen den Tabellen nochmal deutlich geworden :)

                    MfG Götz

                    --
                    Losung und Lehrtext für Montag, 26. Januar 2004 Sein Zorn währet einen Augenblick und lebenslang seine Gnade. Den Abend lang währet das Weinen, aber des Morgens ist Freude. (Psalm 30,6) Der Gott aller Gnade aber, der euch berufen hat zu seiner ewigen Herrlichkeit in Christus Jesus, der wird euch, die ihr eine kleine Zeit leidet, aufrichten, stärken, kräftigen, gründen. (1.Petrus 5,10) (http://www.losungen.de/heute.php3)
                    1. Vielen Dank für eure Hilfe!

    2. Nocheinmal Hallo!

      Also, du kannst eine zusätzliche Tabelle machen, die product_id's option_id's zuordnet.

      Wie würde die dann deiner Meinung nach aussehen?

      Gruss