it-swarm.dev

Zalety i wady korzystania z typów ENUM vs Integer?

Powiedzmy, że w jakiejś losowej tabeli masz kolumnę o nazwie status. Rzeczywiste wartości to włączone lub wyłączone.

Czy lepiej jest, jeśli typem danych tej kolumny jest int/bool (1 lub zero), czy też użyć ENUM z wartościami enabled i disabled? Jakie są zalety lub wady?

Powiedzmy, że zamiast tylko dwóch ważnych statusów, masz 4 lub 10, a nawet więcej? Czy zalety i wady kołyszą się z jednej lub drugiej strony, gdy rośnie liczba wymaganych wartości?

117
Jake Wilson

Znalazłem bardzo dziwny, ale pouczający artykuł około 8 powodów, dla których nie należy używać ENUM.

Nawet bez tego artykułu wiem

73
RolandoMySQLDBA

Cóż, po pierwsze mamy wymagania dotyczące pamięci . Zakładam, że miałeś na myśli tinyint (zamiast int).

  • ENUM zajmuje 1 bajt (jeśli poniżej 255 wartości) lub 2 bajty (maksymalnie 65 535)
  • TinyInt zajmuje 1 bajt (maksymalnie 255 wartości)
  • Boolean jest synonimem TinyInt

Na powierzchni wszystkie są takie same. ENUM pobiera jednak pewne metadane dla powiązanej z nim wartości ciągu ( starszy src )

Powiedziałbym, że kiedy dodajesz więcej wartości, wszelkie korzyści zaczynają odchodzić od ENUM. Zwłaszcza jeśli dodasz wartości po tym, jak tabela jest już w użyciu, ponieważ musisz zmienić strukturę tabeli, aby ją uwzględnić.

Jaka jest zaleta używania ENUM? Ciąg reprezentujący wartość. O ile mi chodzi. Jak cenna jest to zależy od twojej aplikacji.

39
Derek Downey

Uważam, że ENUM jest krótką definicją tabeli kodów. Jego główną zaletą jest to, że unika kodu wymaganego do dołączenia i wyświetlenia opisu kodu. Ułatwia także ustawianie wartości, jeśli zostaną dostarczone w postaci ciągu.

Uważam, że ma następujące wady:

  • Brak możliwości uzyskania dodatkowych metadanych dotyczących kodu.
  • Trudno jest dodać lub wyłączyć wartości. (Wyłączenie kodów można wykonać za pomocą pola wyzwalacza i wygaśnięcia).
  • I18n w bazie danych nie można zrobić.
  • Nie można używać ponownie w różnych tabelach.
20
BillThor