System wspomagania decyzji - schemat DB

0

Witam,
Myślę o napisaniu aplikacji, która na podstawie wybranych przez użytkownika parametrów (lista pobierana z DB, SQLite) poda wcześniej zdefiniowany wynik. Przykład, niekoniecznie związany z rzeczywistością.
Mam tabele opcji:

  1. Fruit [id, fruit]
  2. Taste [id, taste]
  3. Color [id, color]

Tych tabel opcji może być wiele. Na bazie tych tabel admin będzie tworzył zestawy opcji i przypisywał im oceny :
apple-sweet-red : mark_1
apple-sour-red-yellow : mark_2
pear-yellow : mark_3

Każdy zestaw może mieć zero, jeden lub kilka opcji z każdej tabeli. Użytkownik wybierze np. parametr "yellow" i w efekcie otrzyma mark_2 i mark_3. Dla "yellow" i "sour" tylko mark_2.
Jak przechowywać te zestawy biorąc pod uwagę to, że będę musiał je przeszukiwać po parametrach?
Myślałem o tabeli:
Mark [id, set, mark], gdzie "set" będzie konkatenacją wybranych parametrów ( "apple-sweet-red").
Czy mogę prosić o sugestie dotyczące optymalnego rozwiązania mojego problemu?
Pozdrawiam,

Ogrodnik_1

0

Zakładając, że mark jest wyrażalne liczbowo, to:
sets[set_id, mark]
fruits_to_sets[fruit_id, set_id]
tastes_to_sets[taste_id, set_id]
clors_to_sets[color_id, set_id]

Jeśli nie byłoby wyrażalne liczbowo, to zamiast sets[set_id, mark] zrobiłbym sets[set_id, mark_id] i marks[set_id, mark].
Oczywiście z odpowiednimi kluczami.

0

Jeżeli rozważamy jedynie model relacyjny i w nim chcesz pozostać (nie bierzemy pod uwagę żadnych baz NoSQL) to nie lepiej pójść w taką strukturę:
Tabele:
Marks - przechowującą informacje o ocenach (dane liczbowe, opisowe jakie chcesz).
Types - przechowujące informacje o typach (fruits, tastes etc.)
Values - przechowująca klucz obcy do tabeli Types oraz informacje o wartości (yellow, sweet, sour etc.)
Związki:
Marks N:M Values
Types 1:N Values

Przy założeniu, że tabele dotyczące typów (fruits etc.) nie potrzebują jakichś specjalnych atrybutów, które są w jakimś celu istotne. W ten sposób możesz stworzyć wiele typów takich jak kolor, smak, owoce etc. Nie musisz tworzyć nowej tabeli z każdym typem. Natomiast dzięki powiązaniu Marks i Values w związku wiele do wielu możesz precyzyjnie wybrać zapytaniem wszystkie wartości wpływające na ocene.

1 użytkowników online, w tym zalogowanych: 0, gości: 1