Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL ENUM-Typ vs. Join-Tabellen

  • Das Ändern der Wertemenge in einem ENUM erfordert ein ALTER TABLE was zu einer Tabellenumstrukturierung führen könnte - eine unglaublich teure Operation (die Tabellenumstrukturierung findet nicht statt, wenn Sie einfach einen neuen Wert am Ende der ENUM-Definition hinzufügen, aber wenn Sie einen löschen oder die Reihenfolge ändern, wird eine Tabelle erstellt umstrukturieren). Während das Ändern des Wertesatzes in einer Nachschlagetabelle so einfach ist wie EINFÜGEN oder LÖSCHEN.

  • Es gibt keine Möglichkeit, andere Attribute mit den Werten in einer ENUM zu verknüpfen, z. B. welche zurückgezogen werden und welche in eine Dropdown-Liste in Ihrer Benutzeroberfläche aufgenommen werden können. Eine Nachschlagetabelle kann jedoch zusätzliche Spalten für solche Attribute enthalten.

  • Es ist sehr schwierig, eine ENUM abzufragen, um eine Liste unterschiedlicher Werte zu erhalten, was im Grunde erfordert, dass Sie die Datentypdefinition von INFORMATION_SCHEMA abfragen , und Analysieren der Liste aus dem zurückgegebenen BLOB. Sie könnten es mit SELECT DISTINCT status versuchen aus Ihrer Tabelle, aber das erhält nur aktuell verwendete Statuswerte, die möglicherweise nicht alle Werte in der ENUM sind. Wenn Sie Werte jedoch in einer Nachschlagetabelle aufbewahren, ist es einfach, sie abzufragen, zu sortieren usw.

Ich bin kein großer Fan von ENUM, wie man merkt. :-)

Dasselbe gilt für CHECK-Einschränkungen, die einfach eine Spalte mit einem festen Satz von Werten vergleichen. Obwohl MySQL sowieso keine CHECK-Einschränkungen unterstützt.

Update:MySQL 8.0.16 implementiert jetzt CHECK Einschränkungen .