Open sooluh opened 2 years ago
Saya punya case yg sama mas. Yang saya lakukan seperti ide di atas, saya buat kolom json
untuk menyimpan atribut data item/product yg dibeli. Kolom tsb hanya saya select saat dibutuhkan.
Ikutan nyimak, siapa tahu ada best practice yang bisa diimplementasikan 😃
Sejauh ini saya tanya ke temen-temen yang lain, sebagian besar menyarankan demikian. Tapi ada seseorang yang menyarankan untuk membuat table baru dengan struktur yang kurang lebih sama dengan table items
yang asli, namun disitu terdapat kolom yang mereferensikan (relasi) dengan id pada table items
yang asli.
Tapi masalah baru muncul ketika ada detail lain ditable items
yang mengharuskan kita merelasikan dengan table lainnya, sebagai contoh "varian produk", dimana kemungkinan besar disitu ada nama varian, warna, gambar preview, dan lain sebagainya. Otomatis kita perlu bikin clone buat variants
lagi?
Jika begitu, bukankah akan merasa terbebani ketika dimasa depan ada penambahan kolom untuk table-table tersebut? berarti kita harus alter table table utama dan juga table-table yang terkait.
:crying_cat_face:
Halo pak Eko, izin bertanya :)
Langsung ke inti permasalahannya, sebut saja aplikasi e-commerce, disitu terdapat table
histories
untuk menyimpan data riwayat transaksi pengguna. Kemudian di table tersebut mempunyai relasi dengan table yang lain sepertiusers
(siapa yang melakukan transaksi) danitems
(barang apa yang dibeli).Di table
items
tentu memiliki kolom seperti nama barang, harga satuan, dan detail yang lainnya. Itu akan baik-baik saja ketika data pada tableitems
tidak ada yang mengubah. Namun akan bermasalah ketika data tersebut diubah, otomatis semuanya (baik harga maupun nama barang) akan ikut terubah, yang mengakibatkan semua data padahistories
(riwayat transaksi) pun menjadi tidak sesuai dengan apa yang dibeli sebelumnya.Nah untuk menghindari hal seperti itu, kira-kira saya harus mendesain table seperti apa ya? Saya mempunyai solusi sementara yaitu dengan membuat kolom bertipe data JSON kemudian semua detail
items
yang dibeli akan dimasukkan ke kolom tersebut dengan bentuk JSON. Tapi sepertinya itu sedikit berat dan akan menghilangkan fungsi "relational database" itu sendiri.Mohon pencerahannya pak, terimakasih!