Powiedzmy, że w jakiejś losowej tabeli masz kolumnę o nazwie status . To rzeczywiste wartości byłyby włączone lub wyłączone .
Czy lepiej jest, jeśli typem danych tej kolumny jest int / bool (1 lub zero), czy użycie ENUM
wartości o wartościach 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?
mysql
database-design
datatypes
Jake Wilson
źródło
źródło
Odpowiedzi:
Znalazłem bardzo dziwny, ale pouczający artykuł na temat 8 powodów, dla których nie należy używać ENUM.
Nawet bez tego artykułu wiem
źródło
units
model sklepu zawiera przedmioty, w których każdy rekord powinien mieć właściwość dla powiązanych jednostekcomposition
. tj. Ton, Kg, gmPo pierwsze, mamy wymagania dotyczące przechowywania . Zakładam, że miałeś na myśli tinyint (zamiast int).
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ć
ENUM
. Zwłaszcza jeśli dodasz wartości po tym, jak tabela jest już w użyciu, ponieważ musisz zmienić strukturę tabeli, aby ją dostosować.Jaka jest zaleta korzystania z
ENUM
? Ciąg znaków reprezentujący wartość. To wszystko, o ile mi chodzi. Jak cenna jest to zależy od twojej aplikacji.źródło
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:
źródło