Ich habe eine Tabelle Produkte wie folgt:Speichern Filterkriterien auf einer SQL-Datenbank
create table dbo.Product (
Id int not null
Name nvarchar (80) not null,
Price decimal not null
)
I Baskets (Listen von Produkten) erschaffe wie folgt:
create table dbo.Baskets (
Id int not null
Name nvarchar (80) not null
)
create table dbo.BasketProducts (
BasketId int not null,
ProductId int not null,
)
Ein Korb erstellt basiert auf a Suchkriterien unter Verwendung von Parametern:
- MinimumPrice;
- MaximumPreis;
- Kategorien (können null bis viele sein);
- MinimumWarrantyPeriod
Ich brauche so um diese Parameter zu speichern und später weiß ich, wie der Korb erstellt wurde.
In Zukunft werde ich mehr Parameter hat, damit ich 2 Optionen:
hinzufügen Minimum, MaximumPrice und MinimumWarrantyPeriod als Spalt zum Warenkorb Tisch und eine BasketCategories und Kategorien Tabellen in dem Korb zu Kategorien beziehen.
erstellen flexibler Entwurf, der einen Parameter Tabelle:
Tabelle dbo.BasketParameters erstellen ( BasketId int not null, ParameterTypeId int not null, Wert nvarchar (400) nicht null )
Tabelle dbo.ParameterType ( Id int not null Namen nvarchar (80) nicht null )
Parametertypen sind Minimum, MaximumPrice, Kategorien, MinimumWarrantyPeriod usw.
Also für jeden Korb Ich habe eine Liste von BasketParameters, die alle verschieden sind, jeweils auf Wert. Später, wenn ich für Parametertypen brauche, füge ich sie der ParameterType-Tabelle hinzu ...
Die Anwendung wird verantwortlich sein für die Verwendung jedes Basket-Parameters, um den Warenkorb zu erstellen ... Ich werde zum Beispiel eine Tabelle Kategorien haben, aber von den BasketParametern entkoppelt sein.
Macht das Sinn? Welchen Ansatz würden Sie verwenden?
Eigentlich ist EAV eine unglaublich leistungsstarke Lösung, wenn es richtig gemacht wird. Ich habe es oft als Erweiterung zu mehr standardmäßigen relationalen Daten mit großem Erfolg verwendet. Das heißt, EAV kann falsch verwendet werden und es ist wirklich schrecklich. –
@SeanLange In der Tat kann es in bestimmten Szenarien sehr nützlich sein, aber es klingt wie OPs Daten sind ziemlich gut strukturiert, statische und nicht zu ändern 'zu viel', daher würde ich sehr bevorzugen, erste Lösung – Milney
Ich mag wirklich nicht die erste Lösung von Hinzufügen neuer Spalten für jeden Filtertyp. Vor allem angesichts der Tatsache, dass das OP angibt, dass sich die Filter ändern werden. Das würde das Hinzufügen/Entfernen von Spalten aus der Tabelle und alle Abfragen erfordern, die es jedes Mal berühren, wenn sich die Filteroptionen ändern. Irgendwie besiegt der Punkt der relationalen Daten. –