Pola Desain / Strategi Untuk Bidang Kustom & Jenis Data

12

Apakah ada strategi umum atau pola desain untuk merancang aplikasi yang memiliki kemampuan untuk menambahkan bidang khusus ke objek data, atau untuk membuat definisi objek kustom Anda sendiri. Sebagai contoh, saya sedang memikirkan produk seperti SalesForce, di mana Anda dapat memiliki jenis informasi sendiri, kerangka kerja seperti Mesin Ekspresi dan cara menangani saluran dan grup bidang saluran (Contoh) , atau Bagaimana CMSes Like wordpress memiliki kemampuan untuk tambahkan bidang ke jenis posting khusus.

GSto
sumber
6
Anda mungkin tertarik membaca beberapa tanggapan terhadap pertanyaan ini tentang mendesain database untuk bidang yang ditentukan pengguna
Rachel
Dari catatan: Oracle berkeliling menuntut semua orang yang mengimplementasikan ini dengan cara tertentu (dari apa yang saya mengerti, umum). Saya akan mengintip itu juga.
Steven Evers

Jawaban:

4

The EAVModel biasanya digunakan untuk skema terstruktur seperti yang disebutkan.

Itu menderita dalam kinerja dan kemampuan untuk menanyakan sifat dinamis seperti itu secara ad-hoc ... dan oleh karenanya dianggap oleh banyak orang sebagai anti-pola.

Pendekatan lain adalah menggunakan format dinamis seperti XML atau Json untuk menyimpan properti tersebut, mungkin dengan penyimpanan khusus untuk setiap properti untuk membantu pencarian.

Oded
sumber
Saya juga pernah mendengar orang menggunakan database berorientasi dokumen sebagai alternatif untuk EAV, tetapi tidak memiliki pengalaman pribadi dengan pendekatan seperti itu.
FrustratedWithFormsDesigner
@FrustratedWithFormsDesigner - Itulah yang saya maksudkan, tetapi sebagai diri Anda sendiri, tidak ada pengalaman pribadi.
Oded
4

Selain tabel EAV yang dijelaskan oleh @Oded, orang menggunakan basis data nosql untuk jenis informasi ini. Ingat tidak ada alasan mengapa aplikasi Anda tidak dapat menggunakan database relasional untuk bagian-bagian yang masuk akal dengan model relasional dan database nosql untuk informasi yang tidak.

Kemungkinan ketiga adalah menambahkan beberapa kolom untuk bidang yang ditambahkan pelanggan (Customerfield1, customerfield2, dll) dan kemudian meminta pelanggan menentukan apa artinya. Ini hanya berfungsi untuk jumlah bidang comnfiguarble pelanggan yang Anda tambahkan, jadi tidak masalah jika Anda hanya berharap mereka akan membutuhkan dua atau tiga tetapi tidak akan berfungsi sama sekali jika Anda akan membutuhkan ratusan.

HLGEM
sumber
1

Anda tidak akan memiliki aplikasi pertama yang memiliki tabel dengan: UDF1, UDF2, UDF3 ... Saran lain (EVA atau NoSQL) jauh lebih baik.

Bergantung pada RDBMS ( SQL Server menawarkan ini ), Anda bisa keluar dari normalisasi dan memiliki bidang yang menyimpan data dalam format XML atau hanya teks biasa. Anda harus mengandalkan kode untuk mengelola ini.

JeffO
sumber