Shop Projekt - Dokumentation
Shop LDM
Teil 04: Kategorien & Artikel
Dieses Modul bildet die Kategorie- und Artikelverwaltung des Shops ab.
Hier werden auch viele Verbindungen, Attribute und Bilder der Artikel verwaltet, mit Fokus auf den Marktplatz.
- Kategorie: Hierarchisches Knoten-Kategoriensystem mit Knotentyp, Stammbaum und Seitenverknüpfung.
- Cat_hierarchy: Ermöglicht es, dass eine Kategorie mehrere Eltern oder Kinder hat.
- Condition: Zustandsdefinitionen pro Kategorie mit JSON-Übersetzungen und optionaler Icon-Funktion.
- Packaging: Verpackungseinheiten zur automatischen Versandkostenberechnung.
- Artikel: Das konkrete Handelsstück, das tatsächlich verkauft oder inseriert wird. Kann direkt an ein Produkt oder nur an eine Kategorie gebunden sein (z. B. für Kleinanzeigen).
- Art_image: Verwaltet Bilder der Artikel.
- Art_storage & art_manager: Zusatzstrukturen für Lagerorte und Mengen-/Reservierungsverwaltung.
- Attribute & att_content: Flexible Möglichkeit, Produkten, Varianten oder Artikeln zusätzliche Merkmale (z. B. Größe, Material, technische Daten) zuzuweisen.
Für die Produkte gibt es noch ein 2. Teil. Hier werden aber die Grundlagen geschaffen und das Nötige für den Marktplatz gelegt.
Category (Kategorien)
Zweck: Orchestriert was wo wie zusammen gehört
Felder:
- cat_ID (PK)
- pag_ID (FK → page.pag_ID, NULL)
- cat_key VARCHAR(100)
- cat_node_type VARCHAR(100) -- N = normal, S = specialisation, L = list type und weitere
- cat_level INT NOT NULL -- 0 = Hauptkategorie, 1 = Subkategorie …
- cat_tree_num INT NOT NULL, -- Primär-Stamm (System-Stamm)
- cat_status CHAR(1) -- C=Created, O=On_check, A=ActiveCat_Hierarchy (Kategorien)
Zweck: Definiert die Hierarchie (n:n Mapping) und Verbindungsart der Kategorien
Felder:
- parent_cat_ID (PK → category.cat\_ID, NULL)
- child_cat_ID (PK → category.cat\_ID, NULL)
- relation_type ENUM('tree', 'ref', 'special') NOT NULL
- rel_tree_num INT NOT NULL
- sort_order INT NOT NULL
INSERT Trigger: Synchronisation von tb_category.cat_key mit tb_page.pag_key
UPDATE Trigger: Synchronisation von tb_category.cat_key mit tb_page.pag_keytr_sync_cat_key_insert Trigger
Auslöser: Vor dem Einfügen in tb_category Prozess: 1. Synchronisiert den Kategroien Key mit der den Seiten fals zutreffend Ausgabe:
tr_sync_cat_key_update Trigger
Auslöser: Vor dem Aktualisieren in tb_category Prozess: 1. Synchronisiert den Kategorien Key mit der den Seiten fals zutreffend Ausgabe:
Condition (Zustände)
Felder:
- con_ID (PK)
- cat_ID (FK → category.cat\_ID) -- ermöglicht spezialisierte Zustandslisten je Kategorie
- con_key VARCHAR(100) -- für vergleiche und system interne nutzen
- con_name JSON NOT NULL -- für dirrekt übersetzung, verhinder label überlastung
Format: {"DE":"Neu", "EN":"New"}
- con_icon VARCHAR(50) -- Name der PHP Funktion (z.B. place_newIcon)
- con_status CHAR(1) -- C=Created, O=On_check, A=Active, I=InactivePackaging (Verpackungseinheiten)
Zweck: Definiert Verpackungseinheiten für Versand.
Felder:
- pac_ID (PK)
- pac_name VARCHAR(100)
- pac_weight DECIMAL(12)
- pac_in_length DECIMAL(12)
- pac_in_width DECIMAL(12)
- pac_in_height DECIMAL(12)
- pac_out_length DECIMAL(12)
- pac_out_width DECIMAL(12)
- pac_out_height DECIMAL(12)
- pac_status CHAR(1) -- C=Created, O=On\_check, A=Active, I=InactiveArtikel (Verkaufsobjekt)
Zweck: Definiert Verkaufsobjekte.
Felder:
- art_ID (PK)
- u_ID (FK → user.u_ID)
- var_ID (FK → product_variant.var_ID, NULL)
- cat_ID (FK → category.cat_ID, NULL)
- pac_ID (FK → packaging.pac_ID, NULL)
- con_ID (FK → condition.con_ID)
- art_name VARCHAR(250)
- art_description TEXT
- art_quantity INT
- art_open_quan INT
- art_price DECIMAL(12,2)
- art_host_status CHAR(1) -- C=Created, O=On Check, A=Active, I=Inactive, B=Blocked
Hinweis: Die exklusive Prüfung zwischen var\_ID und cat\_ID ist im SQL vorbereitet, aktuell aber auskommentiert.
Hinweis: Verkaufsstatus wird durch den Artikel-Manager definiert nicht zu verwächseln mit dem host Status.Art_image (Marktplatz)
Zweck: Bilder für Kleinanzeige oder extrabilder
Felder:
- img_ID (PK)
- art_ID (FK → article.art_ID)
- img_name VARCHAR(255)
- img_priority INT -- 0 = Hauptbild, 1+ = Galerie
- img_status CHAR(1) -- 'A' = Aktiv, 'O' = On Check (Virenscan/Moderation)
Art_storage (Lagerung)
Zweck: Definiert Lagerorte für Artikel
Felder:
- ast_ID (PK)
- u_ID (FK → user.u_ID)
- ast_name VARCHAR(100) -- z. B. 'Main Warehouse', 'Set Box 12'
- ast_is_a_set CHAR(1) -- Y/N: Wird es als Set/Sammlung behandelt
- ast_location VARCHAR(100)
- ast_description TEXT NULL -- optional: weitere Infos (z. B. Standortbeschreibung)
Art_manager (Fulfillment)
Zweck: Verknüpft Artikel mit Lagerorten, Bestellungen und verfügbaren Mengen
Felder:
- ama_ID (PK)
- art_ID (FK → article.art_ID)
- ast_ID (FK → art_storage.ast_ID, NULL) -- Lagerort oder Set-Zuordnung
- pur_ID (FK → purchase.pur_ID, NULL) -- Wenn Teil einer Bestellung, sonst NULL
- ama_quantity INT
- ama_status CHAR(1) -- R=Reserviert, P=Privat, S=Sold, C=Cancelled, A=Active
- ama_stor_locat VARCHAR(100) NULL -- z. B. Regalnummer, Fach, Schublade
Trigger: SUM(ama_quantity) <= article.art_quantity
-- Stelle sicher, dass die Gesamtmenge in art_manager die verfügbare Menge im Artikel nicht überschreitettr_sync_cat_key_insert Trigger
Zweck: Stellt sicher, dass die Gesamtmenge in tb_art_manager die verfügbare Menge nicht überschreitet Auslöser: Vor dem Einfügen in tb_art_manager Prozess: 1. Überprüft die Gesamtmenge in tb_art_manager für den entsprechenden Artikel Ausgabe: - Fehlermeldung, wenn die Gesamtmenge die verfügbare Menge überschreitet
Attribute (generell)
Felder:
- att_ID (PK)
- att_name VARCHAR(100)
- att_type ENUM ('numeric', 'string', 'text', 'bool', 'size')
- att_status CHAR(1) -- C=Created, O=On_check, A=Active, I=Inactive
Att_content (Attribute-Zieltabellen)
Zweck: Speichert Attributwerte für verschiedene Zieltabellen
Felder:
- atc_ID (PK)
- att_ID (FK → attribute.att_ID)
- cat_ID (FK → category.cat_ID)
- art_ID (FK → article.art_ID)
- pro_ID (FK → product.pro_ID)
- pin_ID (FK → product_info.pin_ID)
- var_ID (FK → product_variant.var_ID)
- atc_value_n DECIMAL(12,4) NULL
- atc_value_n2 DECIMAL(12,4) NULL
- atc_value_n3 DECIMAL(12,4) NULL
- atc_value_s VARCHAR(255) NULL
- atc_value_t TEXT NULL
- atc_value_b BOOLEAN NULL
Trigger: genau eine Entity-FK muss/darf gesetzt sein
trg_attcontent_single_entity Trigger
Auslöser: Vor dem Einfügen in tb_att_content Prozess: 1. Prüft dass genau eine Entity-ID gesetzt ist Ausgabe: - Fehlermeldung, wenn nicht genau eine Entity-ID gesetzt ist
Views Kategorie Navigation & Artikel
v_navigation_base View
Zweck: Kombiniert Kategorien mit Seiten-Keys und Hierarchie-Daten für den PHP-Baumbau.
Felder:
- cat_ID Kategorie
- pag_ID Seite
- cat_node_type Kategorie -- Typ des Knotens
- cat_type Kategorie -- Typ der Kategorie
- cat_key Kategorie -- Eindeutiger Schlüssel der Kategorie
- cat_level Kategorie -- Ebene der Kategorie
- cat_tree_num Kategorie -- Nummer des Baums
- cat_status Kategorie -- Status der Kategorie
- cat_P_ID Kategorie -- ID der übergeordneten Kategorie
- cat_r_type Kategorie -- Beziehungstyp
- cat_sort Kategorie -- Sortierreihenfolge
Hinweis: Diese View ist 2-teilig aufgebaut. Der erste Teil enthält alle tatsächlichen Hierarchie-Verknüpfungen (Trees, Refs, Specials),
während der zweite Teil alle Level-0 Kategorien als eigenständige 'Wurzeln' darstellt. Dadurch wird sichergestellt, dass 'Level 0' Kategorien, die nicht referenziert wurden, auch wirklich als 'Wurzeln' erscheinen.v_node_children View
Zweck: Liefert eine flache Liste aller Kind-Beziehungen basierend auf der tb_cat_hierarchy
Felder:
- parent_cat_ID ID der übergeordneten Kategorie
- child_id ID der Kind-Kategorie
- child_key Key der Kind-Kategorie
- child_pag_id Seiten-ID der Kind-Kategorie (NULL, wenn keine Seite zugeordnet)
- cat_node_type Node-Typ der Kind-Kategorie
- cat_type Kategorie-Typ der Kind-Kategorie
- relation_type Beziehungstyp (tree, ref, special)
- sort_order Sortierreihenfolge der Kinder unter dem gleichen Elternteilv_category_path View
Zweck: Liefert den Parent-Pfad einer Kategorie (für Vererbungen)
Felder:
- start_cat_ID ID der Ausgangskategorie
- current_cat_ID ID der aktuellen Kategorie im Pfad
- depth Tiefe im Pfad (0 = Ausgangskategorie, 1 = Elternteil, ...)
Hinweis: Diese View verwendet eine rekursive CTE, um alle übergeordneten Kategorien einer gegebenen Kategorie zu ermitteln. Es werden nur Beziehungen des Typs 'tree' berücksichtigt, um die eigentliche Hierarchie abzubilden.v_category_condition View
Zweck: Liefert Conditions der ersten gültigen Kategorie-Ebene
Felder:
- cat_ID ID der Kategorie
- con_ID ID des Zustands
- con_name Name des Zustands
- con_icon Icon des Zustands
- con_status Status des Zustands
Hinweis: Diese View liefert die Conditions der ersten gültigen Kategorie-Ebene für jede Kategorie.
Es wird zuerst geprüft, ob die Kategorie selbst Conditions hat. Wenn nicht, wird die nächstgelegene übergeordnete Kategorie mit Conditions ermittelt und deren Conditions zurückgegeben.
Dadurch wird eine Art Vererbung von Conditions entlang der Kategorienhierarchie ermöglicht.v_cat_descendants View
Zweck: Liefert für jede Kategorie alle Kind-Kategorien (tree + ref) rekursiv
Felder:
- start_cat_ID ID der Ausgangskategorie
- current_cat_ID ID der aktuellen Kind-Kategorie
- depth Tiefe der Beziehung (0 = Ausgangskategorie, 1 = direkte Kinder, ...)
Hinweis: Diese View verwendet eine rekursive CTE, um alle Kind-Kategorien einer gegebenen Kategorie zu ermitteln.
Es werden Beziehungen des Typs 'tree' und 'ref' berücksichtigt, um sowohl echte Hierarchie-Kinder als auch Referenz-Kinder einzubeziehen.v_article_by_category View
Zweck: Liefert alle Artikel einer Kategorie inkl. Children + Hauptbild + Zustände
Felder:
- cat_ID ID der Kategorie
- found_cat_ID ID der Kategorie, in der der Artikel gefunden wurde (kann von cat_ID abweichen, wenn Artikel in Child-Kategorie liegt)
- art_ID ID des Artikels
- u_ID ID des Benutzers (Verkäufers)
- art_name Name des Artikels
- art_open_quan Verfügbare Menge des Artikels
- art_price Preis des Artikels
- art_host_status Host-Status des Artikels (C=Created, O=On Check, A=Active, I=Inactive, B=Blocked)
- con_name JSON mit den übersetzten Namen des Zustands (z.B. {"DE": "Neu", "EN": "New"})
- con_icon Name der PHP-Funktion für das Zustandssymbol (z.B. getConditionIcon)
- art_main_image Dateiname des Hauptbilds (img_priority = 0) oder NULL, wenn kein Bild vorhanden
- art_main_img_status Status des Hauptbilds (C=Created, O=On Check, A=Active, I=Inactive) oder NULL
Hinweis: Diese View basiert auf v_cat_descendants und liefert alle Artikel, die direkt in der Kategorie oder in einer beliebigen Unterkategorie liegen.
Es werden auch Informationen zum Zustand und zum Hauptbild des Artikels bereitgestellt, um die Anzeige in der Galerie zu erleichtern.