-
Mengubah kumpulan nilai dalam ENUM memerlukan
ALTER TABLE
yang mungkin menyebabkan restrukturisasi tabel -- operasi yang sangat mahal (restrukturisasi tabel tidak terjadi jika Anda hanya menambahkan satu nilai baru ke akhir definisi ENUM, tetapi jika Anda menghapusnya, atau mengubah urutannya, itu akan menjadi tabel restrukturisasi). Sedangkan Mengubah kumpulan nilai dalam tabel pencarian semudah INSERT atau DELETE. -
Tidak ada cara untuk mengaitkan atribut lain dengan nilai dalam ENUM, seperti mana yang dihentikan, dan mana yang memenuhi syarat untuk dimasukkan ke dalam daftar tarik-turun di antarmuka pengguna Anda. Namun, tabel pencarian dapat menyertakan kolom tambahan untuk atribut tersebut.
-
Sangat sulit untuk menanyakan ENUM untuk mendapatkan daftar nilai yang berbeda, pada dasarnya mengharuskan Anda untuk menanyakan definisi tipe data dari
INFORMATION_SCHEMA
, dan mem-parsing daftar dari BLOB kembali. Anda dapat mencobaSELECT DISTINCT status
dari tabel Anda, tetapi itu hanya mendapatkan nilai status yang sedang digunakan, yang mungkin tidak semua nilai dalam ENUM. Namun, jika Anda menyimpan nilai dalam tabel pencarian, akan mudah untuk melakukan kueri, pengurutan, dll.
Saya bukan penggemar berat ENUM, seperti yang Anda tahu. :-)
Hal yang sama berlaku untuk batasan CHECK yang hanya membandingkan kolom dengan kumpulan nilai yang tetap. Meskipun MySQL tidak mendukung batasan CHECK.
Pembaruan:MySQL 8.0.16 sekarang mengimplementasikan PERIKSA kendala .