Anda telah menggunakan tabel Entity-Attribute-Value untuk mencatat atribut Anda.
Ini adalah berlawanan normalisasi.
Sebutkan aturan normalisasi yang memandu Anda untuk memasukkan atribut yang berbeda ke dalam kolom yang sama. Tidak bisa, karena ini bukan praktik normalisasi.
Untuk menyelesaikan kueri Anda dengan desain EAV Anda saat ini, Anda perlu memutar hasil sehingga Anda mendapatkan sesuatu seolah-olah Anda memiliki tabel asli Anda.
SELECT * FROM (
SELECT
a.article_id,
a.title,
MAX(CASE attr_group WHEN 'ref_id' THEN attribute END) AS ref_id,
MAX(CASE attr_group WHEN 'dial_c_id' THEN attribute END) AS dial_c_id
-- ...others...
FROM test.articles_test a
INNER JOIN attributes attr ON a.article_id = attr.article_id
GROUP BY a.article_id, a.title) AS pivot
WHERE pivot.ref_id = '127712'
AND pivot.dial_c_id = 51
Sementara kueri di atas dapat menghasilkan hasil yang Anda inginkan, kinerjanya akan buruk. Itu harus membuat tabel temp untuk subquery, yang berisi semua data dari kedua tabel , lalu terapkan klausa WHERE pada tabel sementara.
Anda benar-benar lebih baik dengan setiap atribut di kolomnya sendiri di tabel asli Anda.
Saya mengerti bahwa Anda mencoba mengizinkan banyak atribut di masa mendatang. Ini adalah masalah umum.
Lihat jawaban saya untukCara mendesain tabel produk untuk berbagai jenis produk di mana setiap produk memiliki banyak parameter
Tetapi Anda tidak boleh menyebutnya "dinormalisasi", karena memang tidak demikian. Itu bahkan tidak didenormalisasi . Ini derelasi .
Anda tidak bisa hanya menggunakan kata-kata untuk menggambarkan apa pun yang Anda inginkan — terutama bukan kebalikan dari arti kata tersebut. Saya tidak bisa membiarkan udara keluar dari ban sepeda saya dan berkata, "Saya akan memompanya."
Anda berkomentar bahwa Anda mencoba untuk membuat database Anda "scalable." Anda juga salah paham apa arti kata "scalable". Dengan menggunakan EAV, Anda membuat struktur di mana kueri yang dibutuhkan sulit untuk ditulis dan tidak efisien untuk dieksekusi, dan data membutuhkan ruang 10x. Ini kebalikan dari terukur.
Maksud Anda adalah Anda mencoba membuat sistem yang dapat dikembangkan . Ini rumit untuk diterapkan dalam SQL, tetapi saya menjelaskan beberapa solusi dalam jawaban Stack Overflow lain yang saya tautkan. Anda mungkin juga menyukai presentasi saya Pemodelan Data yang Dapat Diperluas dengan MySQL .