Witam.
Obecnie w pracy projektujemy aplikację webową, która pomaga w obsłudze hurtowni sprzętu sanitarnego. Jesteśmy na etapie projektowania bazy danych i napotkaliśmy pewien problem, który nam nieco pokomplikował sprawę. Może macie podobne doświadczenia z zagadnieniem tego typu i moglibyście doradzić coś ciekawego?
Mamy produkt katalogowy P i związaną z nim tabelę Produkt.
Każdy produkt posiada pewne cechy wspólne, np. kolor, wysokość, szerokość itp. Posiada także cenę.
Niestety jak to zazwyczaj bywa takie produkty mogą być sprzedawane w różnych konfiguracjach. Np. kabina prysznicowa może mieć różne rodzaje szyby (zwykła, falowana, przyciemniana itp.). Takie zmiany wpływają najczęściej na cenę. Niestety nie możemy tego rozwiązać na zasadzie: "Dodaj ekstra koszt za każdy bajer z konfiguracji", gdyż czasami szczególna konfiguracja może mieć inną cenę niż wynikałoby to z sumay poszczególnych bajerów w niej zawartej.
Przykład: wanna może być w konfiguracji z nóżkami i kranem.
wanna = 100 Euro
2 nóżki = +20 Euro
4 nóżki = +30 Euro
Kran złoty = +30 Euro
Kran srebrny = +20 Euro
Jeśli jedna z wybranych konfiguracji będzie przykładowo taka:
Wanna + 2 nóżki + złoty kran to zapłacimy za nią 150 Euro (ta cena jest wpisana w Systemie na stałe dla takiej konfiguracji!)
Ale firma sprzedająca wanny chce np. sprzedawać jak najwięcej nóżek więc robi super konfigurację
Wanna + 4 nóżki + Kran złoty = 140 Euro, a nie 160 Euro.... Stwarza nam to nie lada problemy.
Tak więc chcemy uzyskać rozwiązanie gwarantujące dużą elastyczność i gwarantujące mało zbędnych danych przechowywanych w bazie oraz uniknięcie redundancji. Wymagania można streścić następująco:
- Niektóre produkty (nie wszystkie) mogą posiadać kilka opcji/konfiguracji
- Ilość cech w konfiguracji nie jest ustalona na stałe i zależy od rodzaju produktu
- Ilość wartości cech zależy od produktu i cechy (np. kran może być w konfiguracji KOLOR={złoty, srebrny}, ale wanna może być w konfiguracji KOLOR={Czerwony, biały})
- Musimy unikać błędnego wpisywania konfiguracji (czyli opisywanie ręcznie konfiguracji nie wchodzi w grę)
- Konfiguracja wpływa na cenę, ale nie rządzi się to żadnymi ustalonymi prawami. Może być np. tak, że wybór koloru nie wpływa na cenę (ale np. zakup koloru METALIC może już mieć znaczenie :P)
- Z punktu widzenia osoby wybierającej konfigurację najlepszym wyjściem jest prezentacja wszystkich cech konfiguracji z możliwością wybrania ich wartości z jakichś ComboBoxów.
- Jak za rok dany produkt nie będzie dostępny w takiej konfiguracji to nie może to mieć wpływu na produkty, które zostały już w takiej konf. zakupione
Hhhhhmm to chyba tyle. Może macie jakieś pomysły bo my przeprowadziliśmy dzisiaj burzę mózgów i każde z naszych rozwiązań miało spore wady. Czasami takie spojrzenie z zewnątrz + doświadczenie może sprawić, że dla Was rozwiązanie jest trywialne :-) Mam nadzieję, że ktoś taki się znajdzie :P Naszych rozwiązań celowo nie zamieszczam, aby się nikt nie sugerował. Mam nadzieję, że to rozumiecie.
Z góry dzięki za poświęcony czas!
P.S. To naprawdę dla mnie ważne bo jestem mocno odpowiedzialny za ten projekt, a już nie mam pomysłów :-)