Produkt braucht Produkt - sinnvoll abbilden

TheChange

Neuer Benutzer
Beiträge
4
Hallo,

ich denke ich habe ein ähnliches Problem wie der Beitrag unter mir: https://www.datenbankforum.com/thre...hen-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
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.394
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.
 

TheChange

Neuer Benutzer
Beiträge
4
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!
 

TheChange

Neuer Benutzer
Beiträge
4
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?
 

ukulele

Datenbank-Guru
Beiträge
4.394
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);
 

TheChange

Neuer Benutzer
Beiträge
4
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 :))
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.394
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);
 
Oben