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.
12
Jawaban:
Martin Fowler memberikan deskripsi yang bagus bagaimana memodelkan properti dinamis (yang pada dasarnya adalah apa yang Anda minta) dalam bukunya "Pattern Analysis" . Sebagian besar konten tersedia online secara gratis sebagai artikel PDF, yang Anda cari adalah yang ini:
http://martinfowler.com/apsupp/properties.pdf
sumber
The
EAV
Model 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.
sumber
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.
sumber
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.
sumber