it-swarm.asia

Keuntungan dan Kerugian menggunakan ENUM vs tipe Integer?

Katakanlah dalam beberapa tabel acak, Anda memiliki kolom bernama status. Nilai dunia nyata akan berupa diaktifkan atau dinonaktifkan.

Apakah lebih baik untuk tipe data kolom ini menjadi int/bool (1 atau nol) atau menggunakan ENUM dengan nilainya menjadi enabled dan disabled? Apa kelebihan atau kekurangannya?

Katakanlah alih-alih hanya dua status yang valid, Anda memiliki 4 atau 10 atau bahkan lebih? Apakah keuntungan dan kerugian bergoyang ke satu sisi atau yang lain karena jumlah nilai yang dibutuhkan meningkat?

117
Jake Wilson

Saya menemukan artikel yang sangat aneh tapi informatif tentang 8 alasan mengapa seseorang tidak boleh menggunakan ENUM.

Bahkan tanpa artikel itu, saya tahu

73
RolandoMySQLDBA

Baiklah, pertama-tama kita memiliki persyaratan penyimpanan . Saya akan menganggap Anda berarti tinyint (bukan int).

  • ENUM membutuhkan 1 byte (jika di bawah 255 nilai) atau 2 byte (hingga maksimum 65.535)
  • TinyInt membutuhkan 1 byte (maksimum 255 nilai)
  • Boolean adalah sinonim untuk TinyInt

Jadi, di permukaan, semuanya sama saja. ENUM memang mengambil beberapa metadata untuk nilai string yang terkait dengannya ( src lebih tua )

Saya akan mengatakan ketika Anda menambahkan nilai lebih, setiap keuntungan mulai berayun jauh dari ENUM. Terutama jika Anda menambahkan nilai setelah tabel sudah digunakan, karena Anda harus mengubah struktur tabel untuk mengakomodasi.

Apa keuntungan menggunakan ENUM? Representasi string tentang apa artinya nilai. Itu saja, sejauh yang saya ketahui. Betapa berharganya itu tergantung pada aplikasi Anda.

39
Derek Downey

Saya menemukan ENUM adalah definisi bentuk pendek dari tabel kode. Keuntungan utamanya adalah menghindari kode yang diperlukan untuk bergabung dan menunjukkan deskripsi kode. Ini juga memudahkan pengaturan nilai jika mereka tiba dalam bentuk string.

Saya merasa memiliki kelemahan sebagai berikut:

  • Tidak ada kemampuan untuk metadata tambahan tentang kode.
  • Sulit untuk menambah atau menonaktifkan nilai. (Menonaktifkan kode dapat dilakukan dengan bidang pemicu dan kedaluwarsa.)
  • I18n dalam database tidak dapat dilakukan.
  • Tidak dapat digunakan kembali di seluruh tabel.
20
BillThor