Bagi saya, apakah Anda menggunakan satu baris atau EAV tergantung pada bagaimana Anda ingin mengkonsumsinya.
Kekuatan EAV adalah bahwa data baru dapat ditambahkan tanpa perubahan struktur. Ini berarti bahwa jika Anda menginginkan nilai konfigurasi baru, Anda cukup menambahkannya ke tabel dan menariknya ke tempat yang Anda inginkan dalam kode, dan Anda tidak perlu menambahkan bidang baru ke domain, skema, pemetaan, permintaan DAL , dll.
Kekurangannya adalah bahwa ia hanya memiliki struktur paling sederhana, yang mengharuskan Anda untuk berurusan dengan data secara pesimistis. Setiap penggunaan nilai konfigurasi apa pun harus mengharapkan nilai tidak ada, atau tidak dalam format yang tepat, dan berperilaku sesuai ketika tidak. Nilai konfigurasi mungkin tidak dapat diuraikan menjadi ganda, atau int, atau char. Mungkin nol. mungkin tidak ada baris untuk nilai sama sekali. Cara-cara di sekitar ini biasanya memerlukan satu nilai "default" yang valid untuk ada untuk semua nilai konfigurasi dari jenis kode tertentu ( sangat jarang; lebih sering nilai default sama bermasalah untuk mengkonsumsi kode seperti tidak ada sama sekali), atau untuk menyimpan kamus hardcoded dari nilai-nilai default (yang harus berubah setiap kali kolom baru ditambahkan, membuat keunggulan utama penyimpanan EAV cukup diperdebatkan).
Satu baris lebar adalah kebalikannya. Anda memetakannya ke satu instance objek Konfigurasi dengan bidang / properti untuk setiap nilai konfigurasi yang ada. Anda tahu persis apa tipe nilai-nilai itu harus pada waktu kompilasi, dan Anda "gagal cepat" di DAL jika kolom konfigurasi tidak ada atau tidak memiliki nilai tipe yang tepat, memberi Anda satu tempat untuk menangkap pengecualian berdasarkan pada masalah pengambilan konfigurasi / hidrasi.
Kerugian utama adalah bahwa perubahan struktural diperlukan untuk setiap nilai baru; kolom DB baru, kolom baru di DAL (baik pemetaan atau kueri SQL / SP), kolom domain baru, semua yang diperlukan untuk menguji penggunaan dengan benar.
Situasi yang tepat untuk menggunakan salah satu dari ini adalah situasi di mana kerugian dikurangi. Bagi saya, sebagian besar situasi untuk pengkodean konfigurasi telah menyerukan implementasi baris tunggal. Ini terutama karena jika Anda memperkenalkan nilai konfigurasi yang sama sekali baru yang mengatur perilaku beberapa bagian dari program Anda, Anda harus mengubah kode untuk menggunakan nilai konfigurasi baru; mengapa tidak mampir ke objek konfigurasi dan menambahkan nilai yang akan digunakan?
Singkatnya, skema EAV untuk menyimpan konfigurasi benar-benar tidak menyelesaikan masalah yang ingin diselesaikan, dan sebagian besar solusi untuk masalah yang dihadapinya melanggar KERING.