Jika Anda pernah berencana mencari atribut tertentu, adalah ide yang buruk untuk membuat cerita bersambung ke dalam satu kolom, karena Anda harus menggunakan fungsi per baris untuk mengeluarkan informasi - ini jarang berskala baik.
Saya akan memilih pilihan kedua Anda. Memiliki daftar atribut dalam tabel atribut, objek dalam tabelnya sendiri, dan tabel hubungan banyak ke banyak yang disebut atribut objek.
Misalnya:
objects:
object_id integer
object_name varchar(20)
primary key (object_id)
attributes:
attr_id integer
attr_name varchar(20)
primary key (attr_id)
object_attributes:
object_id integer references (objects.object_id)
attr_id integer references (attributes.attr_id)
oa_value varchar(20)
primary key (object_id,attr_id)
Kekhawatiran Anda tentang kinerja dicatat tetapi, menurut pengalaman saya, selalu lebih mahal untuk membagi kolom daripada menggabungkan beberapa kolom. Jika ternyata ada masalah kinerja, sangat dapat diterima untuk memecahkan 3NF karena alasan kinerja.
Dalam hal ini saya akan menyimpannya dengan cara yang sama tetapi juga memiliki kolom dengan data serial mentah. Asalkan Anda menggunakan pemicu penyisipan/pembaruan untuk menjaga agar data kolom dan gabungan tetap sinkron, Anda tidak akan mengalami masalah. Tapi Anda tidak perlu khawatir tentang itu sampai masalah yang sebenarnya muncul.
Dengan menggunakan pemicu tersebut, Anda meminimalkan pekerjaan yang diperlukan untuk hanya ketika data berubah. Dengan mencoba mengekstrak informasi sub-kolom, Anda melakukan pekerjaan yang tidak perlu pada setiap pilih.