Adam Woźniak

Adam Woźniak software architect
and developer

Temat: Oracle enums - czy są?

Cześć

Internet twierdzi, że w MySQL są dostępne enums. Np. to znalazłem:
http://stackoverflow.com/questions/203469/how-to-use-e...

Czy w Oracle jest podobny mechanizm (enums)?
Jeśli tak, to jak tego mechanizmu można użyć (z poziomu Java w szczególności)?
Oraz, co nie mniej dla mnie istotne, jak później rozszerzać taki enum o kolejne wartości?

Pozdrawiam, Adam

PS.
Wiem, że np. w JPA/Hibernate mam dostępny podobny mechanizm, ale tam, w przypadku uzycia stringów, tracę niepotrzebnie przestrzeń dyskową (stringi trochę zajmują), a w przypadku użycia enum.ordinal, takie liczby w tabeli wyglądają dosyć enigmatycznie (siebie same nie opisują).

konto usunięte

Temat: Oracle enums - czy są?

Nie ma takiego mechanizmu. Zależnie od potrzeb należy taki mechanizm zaimplementować z pomocą więzów CHECK, tabel słownikowych (tzn. przyporządkowujących kod elementu do jego opisu) i/lub wyzwalaczy.

Można też pobawić się obiektami (user-defined types), ale to "ciężki" mechanizm.

Pozdrawiam,
SergiuszSergiusz W. edytował(a) ten post dnia 08.12.09 o godzinie 18:42
Maciej W.

Maciej W. Oracle developer

Temat: Oracle enums - czy są?

Niestety nie ma. Nie ma także zaimplementowanego typu boolean.
Chyba najlepszym rozwiązaniem jest stworzenie kolumny z np. typem CHAR(1) oraz dorzuconym ograniczeniem (constraint typu check) na dozwolone wartości, np. KOLUMNA IN ('Y','N').
Typy użytkownika to fajna rzecz ale dość toporna w obsłudze, wolniejsza niż taki CHAR(1) no i zajmująca więcej miejsca na dysku. Dereferencja z obiektu na coś innego (jakby rzutowanie) zajmuje dodatkowy czas.
Również teoria baz danych niezbyt rozwiązuje problem enuma - bo jak tu zrobić typ który ma np. 3 bity i optymalnie go czytać/zapisywać? Najlepiej zrobić align'a...
Osobiście stosuję słowniki gdy ilość wartości w enumie się zwiększa, np. powyżej 5. Tworzę oddzielną tabelę słownikową zwierającą ID oraz przyporządkowaną wartość (np. ((1,'small'),(2,'madium'),(3,'large')) ) i ustawiam na tym klucz obcy.



Wyślij zaproszenie do