ProgrammerZamanNow / qna

Q&A Bareng Programmer Zaman Now, Orang Ganteng dan Intelek
273 stars 7 forks source link

Relational Database - Desain yang sesuai terkait Riwayat Transaksi #191

Open sooluh opened 2 years ago

sooluh commented 2 years ago

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 seperti users (siapa yang melakukan transaksi) dan items (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 table items 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 pada histories (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!

biobii commented 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 😃

sooluh commented 2 years ago

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.

Tambahan

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: