Mam taki problem który się ciągnie latami i jeszcze nie spotkałem zadowalającego rozwiązania.
Często w dużych systemach jest tak że mamy jakiś enum i chcemy go trzymać w bazie. Powiedzmy że np jest klasa Kot i enumem jest rasa.
Pod uwagę trzeba wziąć że system jest duży, do bazy podpiętych jest kilka aplikacji klienckich i serwerowych a możliwe jest dalsze rozwijanie.
W jaki sposób to rozwiązać? Widzę 3 podstawowe możliwości.
- Robimy w kodzie enum i do bazy zapisujemy jego intową wartość.
Zalety:
-Proste
- Ładna obsługa z poziomu kodu
Wady: - Baza jest bezużyteczna w oderwaniu od kodu.
- Robimy tabelkę zawierającą definicję wszystkich enumów w systemie, przypisujemy im wartości liczbowe. (Ewentualnie dwie tabelki w relacji 1 do n, jedna dla definicji enuma a druga dla konkretnych jego wartości). Przy tabelce używającej enuma wpisujemy wartości liczbowe ale bez tworzenia relacji między tabelami.
Zalety:
- Baza jest samowystarczalna tzn można odczytać enumy bez kodu aplikacji
Wady: - Nie wiem jak sprytnie zrobić obsługę tego z poziomu kodu żeby było to faktycznie elastyczne tzn bez posługiwania się stringami (etykiety enuma).
- Robimy dla każdego enuma tabelkę i łączymy z daną - zainteresowaną tabelką relacją n do n.
Zalety:
- Baza samowystarczalna
Wady: - Też niezbyt piękna obsługa z poziomu kodu
- Bardzo dużo małych tabelek w bazie.
Żadne rozwiązanie nie jest ok. Jak wy to robicie? Bo jestem pewien że jest to częsty problem.