Baik EAV atau memilih kolom JSON adalah pendekatan yang buruk dalam kasus Anda, tetapi mana yang benar-benar lebih baik untuk Anda tergantung pada apa yang ingin Anda lakukan dengan data setelah itu disimpan dalam database.
Jika semua yang Anda inginkan adalah memiliki produk dengan atribut yang ditentukan pengguna dan Anda ingin membaca produk secara keseluruhan, cara JSON akan memberikan kinerja yang lebih baik untuk Anda, karena seluruh produk akan berada dalam satu tabel, Anda cukup dengan mendekode JSON yang diambil dari database dan lakukan sesuai keinginan Anda di frontend.
Namun jika Anda ingin tidak hanya membaca produk secara keseluruhan tetapi, dengan wawasan masa depan, mungkin memperkenalkan kemampuan untuk menyaring produk dengan atribut tertentu (katakanlah warna), menggunakan pendekatan EAV akan meningkatkan kinerja operasi ini, karena Anda dapat menyaring produk yang nama atributnya langsung cocok dengan yang Anda cari.
SELECT
pa.ProductId
FROM
product_attributes pa
WHERE
pa.`Name` = "color"
Jika Anda memiliki fitur ini dengan kolom JSON, melalui model atribut JSON membutuhkan lebih banyak sumber daya daripada perbandingan string langsung.
Sebagai pengembang backend REST API untuk aplikasi seluler, contoh yang sering saya kerjakan adalah memberikan kepada pengguna ikhtisar pemberitahuan push yang telah mereka terima melalui beberapa pusat notifikasi dalam klien seluler.
Karena saya tidak berencana untuk melakukan query berat pada data secara berkala, kolom JSON benar-benar baik-baik saja. Saya hanya ingin memberikan data yang ada dalam format yang berbeda kepada pengguna ketika mereka menanyakannya, jadi saya mengambil data dari database dan membuangnya ke pengguna. Ini bahkan lebih baik karena permukaan REST APIs adalah JSON, jadi saya bahkan tidak diharuskan untuk melakukan pemformatan tambahan karena saya akan diharuskan melakukan dalam hal model EAV.