Ich bin ein bisschen festgefahren, wie man eine effiziente Abfrage erstellt, die die Daten der folgenden EAV-Struktur zurückgibt.
Heute existiert bereits eine Produkttabelle mit 4 festen Feldern. Wir möchten das System aktualisieren und so unendlich viele zusätzliche Produktfelder zulassen, die vom Hersteller jedes Produkts definiert werden. Wir nennen diese zusätzlichen Felder "Parameter".
Ein Parameter kann vom folgenden Datentyp sein:
- Text
- Datumsbereich)
- Boolescher Wert
- Dropdown-Wert (einzeln)
- Dropdown-Werte (mehrfach)
Darauf aufbauend habe ich folgendes Datenbankmodell erstellt:
::
- Produkt : Die ursprüngliche Produkttabelle mit den festen Feldern.
- Parameter : Diese Tabelle definiert alle Arten von Parametern. Derzeit 5: Text, Datum, Boolescher Wert, Dropdown-Wert (einzeln), Dropdown-Wert (mehrfach)
- Herstellerparameter : In dieser Tabelle wird gespeichert, welche Parameter vom Produkthersteller (Herstellertabelle nicht im Bild enthalten) für alle seine Produkte definiert werden.
- ProductParameter : Hier werden die tatsächlichen Produktdaten aller definierten Parameter gespeichert. Ein Parameter vom Typ 'Text' speichert seine Informationen in den Feldern 'Text', 'Datum' in 'DatumBegin' und 'DatumEnd', Bit / Boolean in 'Boolean'.
- ParameterValueListItem : Diese Tabelle enthält die vordefinierten Werte der Dropdown-Listenwerte für die Einzel- und Mehrfachkopplung. Dies sind die Werte, die Sie in der Dropdown-Liste sehen, wenn Sie ein Produkt erstellen oder ändern.
- ProductParameterValueListItem : Hier werden die tatsächlichen Produktdaten für die Dropdown-Listenwerte gespeichert.
Ich muss eine Webseite in ASP.NET C # erstellen, die eine Liste aller Produktdaten einschließlich aller definierten Parameter mit ihrem Wert für dieses Produkt anzeigt. Ich muss in der Lage sein, die Liste zu filtern, indem ich nach einem beliebigen Feld / Parameter suche. Diese Liste muss auch für jedes Feld / jeden Parameter sortierbar sein.
Ich habe versucht, die Liste durch äußere Verknüpfung von Produkt - ProductParameter - ProductParametervalueListItem - ParameterValueListItem zu filtern, um ein Tabellenergebnis mit allen Daten zu erhalten, und diese Liste dann mithilfe einer dynamischen where-Klausel zu filtern, die von der Web-App erstellt und übergeben wurde. Dies funktioniert, wenn Sie nach einem Parameter suchen. Wenn Sie jedoch nach mehreren Parametern suchen, erhalten Sie falsche Ergebnisse, da jeder Parameter eine andere Zeile im Tabellenergebnis ist und es einfach keine UND-Übereinstimmung zwischen Parameter A und B gibt, da diese existieren nicht im selben Datensatz (Zeile).
Kann mir jemand raten, wie dies erreicht werden kann? Die perfekteste Lösung wäre 1 Tabellenergebnis, das alle Daten und alle Parameter enthält, die als Spalte in derselben Produktzeile angezeigt werden. Ist dies zu komplex, um auf Datenbankebene behandelt zu werden?
Danke, dass Sie so weit gelesen haben. Jeder Rat ist willkommen.