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.
- 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 existierenCategory_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ändertLang_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 NameProduct_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