Jak przechowywać zakresy wartości?

0

Mam kilka atrybutów typu:

  • wiek (18 - 25, 26 - 35, 36 - 45)
  • doświadczenie (poniżej 2 lat, 2 - 6 lat, powyżej 6 lat)
  • dostępność (do 20 godzin/tyg, 20 - 40 godzin/tyg, powyżej 40 godzin/tyg)

i jeszcze kilka się znajdzie.

W sumie, to widzę dwa główne rozwiązania:

  1. Trzymamy te wartości w dokładnie takim formacie, jako jakiś varchar, albo coś. Wariacją na temat tego rozwiązania jest użycie enuma.
  2. Trzymamy te wartości w jakieś dodatkowej tabelce. Tutaj są dwie wariacje:
    a) Jedna zbiorowa tableka https://softwareengineering.stackexchange.com/a/228022/243011
    b) Tabelka per typ danych. Dla wieku osobna, dla doświadczenia osobna itd.

Mi najbardziej się podoba rozwiązanie drugie w wersji a), bo nie wiem, czy chcę mieć potencjalnie kilka tabelek zawierających po dwa, trzy wiersze. Minusem tego rozwiązania jest brak constrainów, czyli ktoś może do wieku przypisać poniżej 2 lat :)

Co myślicie? Jest jakieś lepsze rozwiązanie?

1

2b
ewentualnie ten enum jeśli nie planujesz dodawać nowych wartości
reszta robi bajzel w bazie

2

W postgres masz dedykowane typy do przechowywania zakresów. https://www.postgresql.org/docs/current/static/rangetypes.html

Co prawda nie będzie to przenośne na inne silniki.

0

Dzięki, domyślałem się, że postgres może mieć taki typ, ale nie mogłem znaleźć.

W takim razie chyba zostane przy 2b :) Łatwiej też będzie generować opcje w do pola wyboru.

0

Pomysł 2a jest perspektywiczny o tyle, że na wdrożeniu można sobie powołać nowe zestawy danych (listy wyboru, enumeracje, słowniki, mniejsza o nazwę). Do 2a warto mieć rodzica nadrzędnego w stosunku do listy wartości (nazwa słownika/wyboru, pewne jego cechy). Czyli tabele dwie i zawsze dwie, przy rozszerzalnym wdrożeniu

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