it-swarm.com.de

Vor- und Nachteile bei der Verwendung von ENUM vs Integer-Typen?

Nehmen wir an, Sie haben in einer zufälligen Tabelle eine Spalte mit dem Namen status. Die realen Werte wären entweder aktiviert oder deaktiviert.

Ist es besser, wenn der Datentyp dieser Spalte ein int/bool (1 oder Null) ist oder ENUM mit den Werten enabled und disabled verwendet? Was sind die Vor- oder Nachteile?

Nehmen wir an, Sie haben statt nur zwei gültigen Status 4 oder 10 oder sogar mehr? Schwanken die Vor- und Nachteile mit zunehmender Anzahl der erforderlichen Werte auf die eine oder andere Seite?

117
Jake Wilson

Ich fand einen sehr bizarren, aber informativen Artikel ungefähr 8 Gründe, warum man ENUM nicht verwenden sollte.

Auch ohne den Artikel weiß ich

73
RolandoMySQLDBA

Nun, zuerst haben wir die Speicheranforderungen . Ich gehe davon aus, dass Sie einen winzigen Punkt gemeint haben (anstelle von int).

  • ENUM benötigt 1 Byte (wenn weniger als 255 Werte vorliegen) oder 2 Byte (maximal 65.535)
  • TinyInt benötigt 1 Byte (maximal 255 Werte)
  • Boolean ist ein Synonym für TinyInt

An der Oberfläche sind sie also alle gleich. ENUM nimmt jedoch einige Metadaten für den damit verbundenen Zeichenfolgenwert auf ( älteres src )

Ich würde sagen, wenn Sie mehr Werte hinzufügen, beginnt jeder Vorteil von ENUM wegzuschwingen. Insbesondere, wenn Sie die Werte hinzufügen, nachdem die Tabelle bereits verwendet wird, da Sie die Tabellenstruktur ändern müssen, um sie zu berücksichtigen.

Was ist der Vorteil der Verwendung eines ENUM? Eine Zeichenfolgendarstellung dessen, was der Wert bedeutet. Das war's, soweit es mich betrifft. Wie wertvoll das ist, hängt von Ihrer Anwendung ab.

39
Derek Downey

Ich finde, ENUM ist eine Kurzformdefinition einer Codetabelle. Der Hauptvorteil besteht darin, dass der Code vermieden wird, der zum Verbinden und Anzeigen der Codebeschreibung erforderlich ist. Es erleichtert auch das Festlegen der Werte, wenn sie in Zeichenfolgenform eintreffen.

Ich finde, es hat die folgenden Nachteile:

  • Keine Möglichkeit für zusätzliche Metadaten zum Code.
  • Es ist schwierig, Werte hinzuzufügen oder zu deaktivieren. (Das Deaktivieren von Codes kann mit einem Trigger- und Ablauffeld erfolgen.)
  • I18n in der Datenbank kann nicht durchgeführt werden.
  • Nicht über Tabellen hinweg wiederverwendbar.
20
BillThor