Artikelvarianten aus zentraler Farbtabelle erstellen (Schleife?!)

CharlyOli

Aktiver Benutzer
Beiträge
31
Guten Morgen zusammen,

ich bin gerade dabei eine Masterdatenbank für Fensterprofile zu erstellen und stehe jetzt vor folgender Herausforderung:

Für Artikel müssen Artikelvarianten in allen möglichen Kombinationen generiert werden.

Meine Daten liegen in 2 Tabellen
(Auszug)

Tabelle 1 - Artikel

ArtikelnummerArtikelbezeichnungVariantengruppe
1234Fensterrahmen 76Profile

Tabelle 2 - Farben / Oberflächen

FarbcodeFarbbezeichnungDichtungsfarbeCodeGrundkörperCode bei Typ2Variantenmöglichkeiten
00unfoliert (weiß)4000Typ 1
1CBergkiefer1005Typ 2, Typ 3


Beispiel:
"Fensterrahmen 76" mit der Artikelnummer "1234"
kann in folgenden Artikelvarianten geliefert werden.

Folgende Kombinationen wären möglich und müssten mit einem Regelwerk generiert werden.
unfoliert (weiß) (Typ 1)
außen foliert / innen unfoliert(weiß) (Typ 2)
beidseitig gleich foliert (Typ 3)

Ergebnis müsste dann für den o. g. Beispielartikel folgendermaßen aussehen:

Tabelle: Artikelvarianten

ArtikelArtikelvarianteVariantentypFarbeAußenFarbeInnenGrundkörperDichtung
123400-00-00-40Typ 100000040
12341C-00-00-10Typ 21C000010
12341C-1C-05-10Typ 31C1C0510

Regelwerke:
Die Artikelvarianten setzten sich als 4 gliedrige Elemente zusammen.
Beispiel:
00 (Farbe außen, Stelle 1+2)
00 (Farbe innen, Stelle 4+5)
00 (Grundkörper, Stelle 7+8)
40 (Dichtung, Stelle 10+11)

Varianten Typ 1 = unfoliert, Grundköper ist immer "00"
Varianten Typ 2 = 1-seitig foliert außen, Grundkörper immer "00"
Varianten Typ 3 = beidseitig foliert, Grundkörper lt. Angabe aus Tabelle 2 - Farben / Oberflächen Feld [GrundkörperCode bei Typ2]


Wir haben zwar SAP als möglichen Datenlieferanten im Hintergrund, aber hier werden die Artikelvarianten auch erst angelegt, wenn Sie bestellt werden.
Mein Problem ist aber, dass ich diese in der Branchensoftware vorab in allen möglichen Variationen anlegen muss.

Könnt ihr mir wieder mal helfen? Würde mich riesig freuen.

Viele Grüße

CharlyOli
 
Werbung:
prinzipiell suchst Du einen CROSS JOIN aus Deinen Artikeln und den möglichen Varianten. Allerdings kommt das mit Deinen Beispielen nicht hin, und wenn die Varianten auch noch offenbar Komma-separiert (Typ2, Typ3) in einem Feld stehen wird es noch mehr Grütze.
 
Danke für die Antwort. Komma-separiert ist als Beispiel zu sehen.
Wenn es einen besseren Weg gibt, damit es keine Grütze wird, bin ich für alles offen.
 
Wenn es einen besseren Weg gibt, damit es keine Grütze wird, bin ich für alles offen.
Dafür scheint es ja schon zu spät zu sein, wenn ihr das so habt. Ansonsten wäre es trivial:

Code:
postgres=# create table produkte(name text);
CREATE TABLE
postgres=# create table varianten(variante text);
CREATE TABLE
postgres=# insert into produkte values ('produkt 1');
INSERT 0 1
postgres=# insert into produkte values ('produkt 2');
INSERT 0 1
postgres=# insert into varianten values ('variante 1');
INSERT 0 1
postgres=# insert into varianten values ('variante 2');
INSERT 0 1
postgres=# insert into varianten values ('variante 3');
INSERT 0 1
postgres=# select *, p.name || ' ' || v.variante as angebote from produkte p, varianten v;
   name    |  variante  |       angebote       
-----------+------------+----------------------
 produkt 1 | variante 1 | produkt 1 variante 1
 produkt 1 | variante 2 | produkt 1 variante 2
 produkt 1 | variante 3 | produkt 1 variante 3
 produkt 2 | variante 1 | produkt 2 variante 1
 produkt 2 | variante 2 | produkt 2 variante 2
 produkt 2 | variante 3 | produkt 2 variante 3
(6 rows)

postgres=#
 
Danke nochmal für deine Antwort. Cross Join ist eine Lösung.

Letzte Frage:
Gibt es noch eine andere Möglichkeit? Z. B. über eine Schleife?

Idee:
Jeder Datensatz der Tabelle Artikel wird nacheinander durgegangen.
Im Verarbeitungsschritt wird dann für jede Farbe ein Datensatz in Tabelle Artikelvariantengeschrieben.
Es müsste dann aber möglich sein, dass eine "Wenn" Funktion greift.

Beispiel
Artikel 1234 wird in der Schleife bearbeitet.
Jetzt soll für jede Farbe eine Artikelvariante erstellt werden. In der Tabelle "Farben/Oberflächen" sind alle verfügbaren Farben enthalten.
Jeder Farb/Oberflächendatensatz hat ein Feld, dass für die Wenn-klausel die Regel vorgibt.

Wie im ersten Post schon mal gefragt.
Regelwerke:
Die Artikelvarianten setzten sich als 4 gliedrige Elemente zusammen.
Beispiel:
00 (Farbe außen, Stelle 1+2)
00 (Farbe innen, Stelle 4+5)
00 (Grundkörper, Stelle 7+8)
40 (Dichtung, Stelle 10+11)

Varianten Typ 1 = unfoliert, Grundköper ist immer "00"
Varianten Typ 2 = 1-seitig foliert außen, Grundkörper immer "00"
Varianten Typ 3 = beidseitig foliert, Grundkörper lt. Angabe aus Tabelle 2 - Farben / Oberflächen Feld [GrundkörperCode bei Typ2]

Gibt es so eine Möglichkeit auch?!
Die Komma Trennung kann ich noch überarbeiten.

Hast du nochmal einen Tip? :)

CharlyOli
 
Sorry aber das ist alles ziemlich durcheinander und verwirrend wenn man den process nicht kennt.

mach doch erstmal ein komplettes design sheet wo man sieht was es genau für Daten gibt und wie diese zusammen hängen.
 
Hallo Thallius,
ich hab mit dem folgenden Bild einmal versucht es zu verdeutlichen.
Es gibt die Tabelle Artikel und die Tabelle Farben/Oberflächen.

Ergebnis soll jetzt sein, dass ich jeden Artikel nach einem Regelwerk auspräge.
Wenn du dich an einem Fenster orientierst, gibt es

- weiße (unfolierte) Fenster (00)
- außen folierte und innen weiße Fenster (z. B. 1C bergkiefer - weiß 00)
- außen und innen gleich folierte Fenster (z. B. mahagoni 12 - mahagoni 12)
- außen und innen unterschiedlich foliert Fenster (z. b. mahagoni 12 - bergkiefer 1C)
Grundkörper und Dichtung können dann eben auch noch variieren, sind aber bei der jeweiligen Farbe festgelegt.

Farbkombinationen.jpg


Mit ist durchaus bewusst, dass es nicht einfach ist. Kann an den Tabellen auch noch etwas ändern.

Kann man sowas umsetzen?!!?

CharlyOli
 
Ich verstehe das auch noch nicht ganz.

Du hast in einer Tabelle Artikel und in einer Zweiten Varianten, soweit so klar. Mit einem Cross Join ließen sich jetzt alle Artikel mit allen Varianten kombinieren, kein Problem. Aber welche Funktion hat überhaupt die Spalte "Variantenmöglichkeiten"? Wenn Nicht alle Varianten mit allen Artikeln möglich sind ist eine Zwischentabelle erforderlich mit FK auf beide Haupttabellen die fest legt welche Varianten erlaubt oder aber welche nicht erlaubt sind (eher untypisch).

Am Rande: "GrundkörperCode bei Typ2" ist natürlich auch nicht normalisiert aber das ist jetzt mal nebensächlich.

Du kannst auch bei einem Cross Join weitere Einschränkungen machen. Wenn du eine Zwischentabelle anlegst dann wird das alles damit definiert. Die Einträge in der Zwischentabelle lassen sich auch einmalig für alle Kombinationen anlegen oder mit einem Script erzeugen, man würde hier dann auf einen Cross Join zurück greifen.

Alternativ kann man auch beim Cross Join mit WHERE einschränken. Dann sind die nicht erlaubten Kombinationen oder Regeln dazu aber im Query hardcoded, das ist nicht so schön wenn es nicht wirklich simpel gehalten ist.

Schleifen sind in dieser Sache möglich aber aufwendig und voller Nachteile, alles was du brauchst lässt sich mit Cross Join oder Zwischentabelle lösen.
 
Mit Zwischentabelle brauchst du keinen Cross Join mehr sondern Inner Join, aber ich denke grundsätzlich ist das klar.
 
Werbung:
"Artikelvariante" in "Farben / Oberflächen" ist quasi dein Primärschlüssel. Du erstellst also eine Tabelle "Zuordnungen" mit mindestens den Spalten "Artikelnummer" und "Artikelvariante", gerne auch mit einem Präfix das jeder erkennt das es sich um Schlüssel handelt (z.B. ArtikelvarianteID). Die Namensgebung ist ausbaufähig ;-)

Einen PK braucht die Tabelle zunächst mal nicht bzw. es kann ein zusammen gesetzter PK angelegt werden. Ich empfehle das saubere definieren der Fremdschlüssel in SQL auf der Zwischentabelle.

Dann wird die Tabelle befüllt, in etwa:
Code:
INSERT INTO zwischentabelle(artikelnummer,artikelvariantennummer)
SELECT a.Artikelnummer,f.Artikelvariante
FROM Artikel a
CROSS JOIN [Farben / Oberflächen] f
--ggf. WHERE ...
Im WHERE Teil können wir schon einmal die Regeln einbauen wann eine Kombination zulässig ist oder wann nicht. Allerdings verstehe ich die Materie nicht. Das mit "einseitig" bezieht sich nicht auf den Artikel sondern auf die Variante oder? Ich erkenne da jedenfalls so erstmal keine Einschränkung welcher Artikel nicht alle Varianten haben kann die ich zu einer Regel formulieren könnte.

Du kannst einzelne Zuordnungen auch später gezielt aus der Zuordnungstabelle schmeißen aber das Beste wäre natürlich eine Regel. Vielleicht gehört noch eine Spalte Typ in die Artikeltabelle?
 
Zurück
Oben