1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Produkt braucht Produkt - sinnvoll abbilden

Dieses Thema im Forum "Datenmodellierung, Datenbank-Design" wurde erstellt von TheChange, 31 Juli 2011.

  1. TheChange

    TheChange Neuer Benutzer

    Hallo,

    ich denke ich habe ein ähnliches Problem wie der Beitrag unter mir: http://www.datenbankforum.com/threads/beziehungen-zwischen-relationen-beziehung-auf-sich-selbst.393/

    Folgendes Szenario:
    Ich habe eine Tabelle mit Produkten. (id, name, kosten, menge, ..)
    Jetzt muss abgebildet werden, in wie fern diese Produkte miteinander zu tun haben.
    Ein Produkt kann dabei eindeutig von (höchstens 5) festgelegten Produkten erzeugt werden.
    Jedes dieser speziellen Produkte wird dabei in einer gewissen Anzahl benötigt.

    Beispiel: Ein Buch benötigt 40 Stück Papier, 10g Tinte und 10€

    Wie kann ich das jetzt vernünftig abbilden? Am liebsten wäre es mir, das Mapping in einer "Zwischentabelle" durchzuführen. Ich habe mich an einer Produkt braucht Produkt-Tabelle versucht, aber irgendwie klappt es nicht so richtig. Mich verwirrt, dass die Tabelle eine Zwischentabelle zwischen ein und derselben Tabelle sein muss....

    Mir reicht möglicherweise auch das richtige Thema, damit ich Google verwenden kann.

    Gruß
    TheChange
     
  2. Walter

    Walter Administrator Mitarbeiter

    Was Du brauchst, ist eine Stückliste...
     
    ukulele gefällt das.
  3. ukulele

    ukulele Datenbank-Guru

    Joa - Deine max 5 Beziehungen sind ja eine selbst festgelegte Grenze, theoretisch könnten auch mal 6 Beziehungen notwendig werden. Daher würde ich genauso vorgehen wie in dem verlinkten Thread, was einer Stückliste entspricht wenn ich mich nicht irre.
     
  4. TheChange

    TheChange Neuer Benutzer

    Wenn ich das richtig verstehe müsste ich das in meinem Fall folgendermaßen modellieren:

    Produkte
    P_ID | P_Name | ...

    Stückliste
    S_ID | P_ID(FS) | S_Menge <-- edit: habe hier mal P_ID(FS) richtig gestellt. Sollte eigentlich ein Fremdschlüssel sein, kein Primärschlüssel oO

    [Mit der Bedingung, dass S_ID immer das jeweilig zu Produzierende Produkt identifiziert, d.h. = Produkte.P_ID ist?]

    Produkte
    1 | Buch
    2 | Papier
    3 | Tinte
    4 | Geld

    Stückliste
    1 | 2 | 40
    1 | 3 | 10
    1 | 4 | 10
    (Beispiel von oben: Stückliste Buch = 40 Stück Papier, 10g Tinte und 10€)

    Ist das richtig? Geht das besser?

    Vielen Dank schonmal bis hier hin!
     
  5. ukulele

    ukulele Datenbank-Guru

    Korrekt - vieleicht ist eine Spalte Einheit noch sinnvoll für g, €, etc.
     
  6. TheChange

    TheChange Neuer Benutzer

    Da sind noch einige weitere Spalten drin, allerdings waren die für mein Verständnis nicht relevant..

    Mich stört ein bisschen, dass ich die Bedingung stellen muss.. Eigentlich möchte ich, dass die Datenbank zumindest das Grundproblem alleine modellieren kann. Dazu gehört meiner Meinung nach auch, dass sie automatisch weiß, dass die S_ID immer einer P_ID zugeordnet sein muss. Aber ich darf wahrscheinlich nicht P_ID | P_ID | S_Menge in der Tabelle Stückliste eintragen oder?

    edit: oder denke ich einfach falsch?
     
  7. ukulele

    ukulele Datenbank-Guru

    Du denkst falsch, natürlich darfst du 2 Fremdschlüssel auch in der DB abbilden, so das du Konsistenz erzwingst. Lediglich die beiden Spalten und die beiden Constraints müssen unterschiedliche Namen haben, können aber auf den selben Schlüssel zeigen.

    irgendwie so:
    Code:
    ALTER TABLE stückliste ADD FOREIGN KEY tollerfk1(S_ID) REFERENCES produkte(P_ID);
    ALTER TABLE stückliste ADD FOREIGN KEY tollerfk2(F_ID) REFERENCES produkte(P_ID);
     
  8. TheChange

    TheChange Neuer Benutzer

    Hallo,

    okay ich verstehe worauf die hinaus willst..
    Meine Frage war es, ob ich die beiden P_ID als Primärschlüssel verwenden kann - nach deiner Lösung würde ich folgendes machen:

    S_ID(PK/PS) | P_ID_Produkt (FK/FS) | P_ID_Stueck (FK/FS) | S_Menge

    Damit hätte ich die beiden Fremdschlüssel bezogen auf Produkt. Ich hätte mir gerne den Primärschlüssel vorne gespart und die Tabelle eindeutig mit den zwei - jetzt Fremd- Schlüsseln abzubilden.

    Aber das macht nichts, die ID Spalte macht den Braten jetzt auch nicht mehr fett, salop gesagt ;)

    Vielen Dank für die Hilfe, das bringt mich tatsächlich um einiges weiter und bereitet mir jetzt keine Kopfschmerzen mehr :))
     
  9. ukulele

    ukulele Datenbank-Guru

    Das geht auch (wie gesagt ich kenne es nur in MS SQL), damit kommt nur nicht jede Anwendung zurecht (also meine leider nicht).

    irgendwie so:
    Code:
    ALTER TABLE stückliste ADD CONSTRAINT pk PRIMARY KEY (S_ID,P_ID);
     
Die Seite wird geladen...

Diese Seite empfehlen