Shop Projekt - Dokumentation

Shop LDM

Teil 04.1: Trading, Produkte & Sets

Dieses Modul bildet die Trading-Struktur für Produkte und Sets ab. Es ist eine Erweiterung des Produktmoduls mit Fokus auf den Handel von Sammelobjekten und verwandten Produkten.

Die Struktur unterstützt mehrsprachige Produktinformationen, verschiedene Seltenheitsstufen (Rarity) sowie die Gruppierung von Produktvarianten in Sets und Setvarianten.

🗺️ Stufe 0 | 📚 Aktuell | 📟 2026 06 15 | 📍 Datenbank - Trading, Produkte & Sets

  • Produkte: Enthält alle Produkte (Basisentität).
  • Category_product: Verknüpft Kategorien mit Produkten (n:m).
  • Sets: Erweiterungen / Sets (z. B. Booster-Sets).
  • Setvarianten: Varianten eines Sets (z. B. 1st Edition, Unlimited).
  • Setvariantennamen: Mehrsprachige Namen für Setvarianten.
  • Produktinformationen: Mehrsprachige Produktinformationen.
  • Seltenheitsstufen: Definiert Seltenheitsstufen (Common, Rare, Secret Rare, etc.).
  • Produktvarianten: Varianten eines Produkts (z. B. verschiedene Auflagen).
  • Svar_pvar: Verknüpft Setvarianten mit Produktvarianten (n:m).
  • Product_variant_info: Verknüpft Produktvarianten mit mehrsprachigen Informationen.
  • v_product_full: View für Produkte mit Topic- und Set-Informationen.

Dieses Modul ist die Grundlage für den Handel und die Verwaltung von Sammelkartenprodukten im Shop.

Produkt (Vorlage)

Zweck: Dient als Grundlage für Produktvarianten und -informationen und zusammen dienen sie als Vorlage um Artikel schnell zu erstellen.

Felder:
    - pro_ID          (PK)
    - cat_ID          (FK → tb_category)           -- Topic-Kategorie Verbindung
    - pro_number      VARCHAR(50)                  -- Produktnummer
    - pro_status      CHAR(1)                      -- Status (A=Active, I=Inactive, D=Deleted)

Hinweis: Mindestens eine product_info + eine product_variant MÜSSEN existieren

Category_product (Verknüpfung)

Zweck: Ermöglicht flexible Kategorisierung von Produkten. (n:n Beziehung).

Felder:
    - pro_ID          (PK → tb_product)
    - cat_ID          (PK → tb_category)

Set (Gruppierung)

Zweck: Erstellt ein Produkt-Bundle wie ein Spielset oder einen Baukasten. Während das Set im klassischen Laden meist nur als Ganzes verkauft wird, 
       bietet dieses System maximale Flexibilität: Jeder Bestandteil lässt sich darin individuell verkaufen.

Felder:
    - set_ID           (PK)
    - cat_ID           (FK → tb_category)
    - cun_ID           (FK → country)
    - set_name         VARCHAR(150) NOT NULL       -- Set-Name
    - set_code         VARCHAR(50) UNIQUE          -- Set-Code (z. B. 'LOB', 'MRD')
    - set_year         INT                         -- 1. Erscheinungsjahr des Sets
    - set_status       CHAR(1) NOT NULL DEFAULT 'A' -- Status

Indexe:
    - idx_set_year (set_year)
    - idx_set_cat_year (cat_ID, set_year)

Hinweis: Wird automatisch aus den Setvarianten befüllt (Trigger).

Set_variant (Produktionsabweichung)

Zweck: Enthält Varianten eines Sets (z. B. Europäische Ausgabe).

Felder:
    - stv_ID            (PK)
    - set_ID            (FK → tb_set)
    - stv_name          VARCHAR(150)
    - stv_count         INT                        -- Zähler für anzahl Objekte
    - stv_release       DATE                       -- Veröffentlichungsdatum
    - stv_type          VARCHAR(50)                -- Variantentyp
    - stv_pro_types     JSON                       -- Produkttypen als JSON
    - stv_status        CHAR(1)

Indexe:
    - idx_stv_release (stv_release)

Hinweis: Bei Insert wird tb_set.set_year automatisch aktualisiert.

trg_set_year_from_variant Trigger

Zweck: Pflegt tb_set.set_year automatisch aus stv_release beim Insert einer Setvariante.

Auslöser: AFTER INSERT ON tb_set_variant

Logik:
    - Wenn stv_release NULL → kein Update
    - Wenn YEAR(stv_release) <= 0 → kein Update
    - Wenn set_year NULL → auf Jahreszahl setzen
    - Wenn YEAR(stv_release) < set_year → auf früheres Jahr setzen
    - Sonst → set_year bleibt unverändert

Lang_setvariant (Mehrsprachigkeit)

Zweck: Verknüpft Sprachen mit Setvarianten für mehrsprachige Namen (optional nutzbar).

Felder:
    - lan_ID           (PK → tb_language)
    - stv_ID           (PK → tb_set_variant)
    - stv_code         VARCHAR(50)                 -- Sprachspezifischer Code
    - stv_name         VARCHAR(150)                -- Sprachspezifischer Name

Product_info (Sprachvariante)

Felder:
    - pin_ID            (PK)
    - pro_ID            (FK → tb_product)
    - lan_ID            (FK → tb_language)
    - pin_name          VARCHAR(150) NOT NULL       -- Produktname
    - pin_description   TEXT                        -- Produktbeschreibung
    - pin_priority      INT NOT NULL DEFAULT 0      -- Priorität
    - pin_status        CHAR(1) NOT NULL            -- Status
    - UNIQUE KEY unique_product_language (pro_ID, lan_ID)

Rarity (Seltenheitsstufen)

Felder:
    - rar_ID            (PK)
    - cat_ID            (FK → tb_category)
    - rar_level         INT NOT NULL               -- Numerische Seltenheitsstufe (1-10)
    - rar_key           VARCHAR(50) UNIQUE NOT NULL -- Eindeutiger Schlüssel
    - rar_name          VARCHAR(150) NOT NULL      -- Name (immer Englisch)
    - rar_status        CHAR(1) NOT NULL DEFAULT 'A'

Product_variant (Je nach Ausgabe)

Felder:
    - var_ID            (PK)
    - pro_ID            (FK → tb_product)
    - cat_ID            (FK → tb_category)
    - rar_ID            (FK → tb_rarity)
    - var_number        VARCHAR(50) NOT NULL       -- Variantennummer
    - var_image         VARCHAR(255) NULL          -- Bild-URL/Dateiname
    - var_priority      INT NOT NULL DEFAULT 0     -- Anzeige Priorität
    - var_status        CHAR(1) NOT NULL           -- Status

Hinweis: Mindestens eine product_info + eine product_variant MUSS existieren.

Svar_pvar (Verknüpfung)

Zweck: Verknüpft Setvarianten mit Produktvarianten (n:n Beziehung).

Felder:
    - stv_ID            (PK → tb_set_variant)
    - var_ID            (PK → tb_product_variant)
    - svp_status        CHAR(1)

Product_variant_info (Verknüpfung)

Zweck: Verknüpft Produktvarianten mit mehrsprachigen Informationen.

Felder:
    - pin_ID            (PK → tb_product_info)
    - var_ID            (PK → tb_product_variant)

Index:
    - idx_svarpvar_var (var_ID)

v_product_full View

Zweck: Liefert Produkte mit Topic- und Set-Informationen.

Felder:
    - pro_ID            -- Produkt-ID
    - pro_number        -- Produktnummer
    - pro_status        -- Produktstatus
    - set_ID            -- Set-ID (falls zugeordnet)
    - set_name          -- Set-Name (falls zugeordnet)
    - set_code          -- Set-Code (falls zugeordnet)

Quelle:
    - FROM tb_product p
    - LEFT JOIN tb_product_variant pv ON p.pro_ID = pv.pro_ID
    - LEFT JOIN tb_svar_pvar svp ON pv.var_ID = svp.var_ID
    - LEFT JOIN tb_set_variant stv ON svp.stv_ID = stv.stv_ID
    - LEFT JOIN tb_set s ON stv.set_ID = s.set_ID