Contoh pembuatan struktur table yang umum dilakukan adalah seperti ini:
Master_Barang
Transaksi_Beli_Detail
Transaksi_Beli_Detail
Dengan seperti ini maka query Report Detail Pembelian-nya berubah menjadi :
"SELECT A.*, B.Nama_Barang FROM Transaksi_Beli_Detail AS A JOIN Master_Barang AS B ON A.ID_Barang=B.ID_Barang"
Lalu apa bedanya? cuma memindahkan link field/column nya saja? nah, perbedaannya adalah performa/kecepatannya karena JOIN dengan antar data numeric lebih cepat dari pada sorted character maupun unsorted character. Lihatlah contoh data berikut ini :
Transaksi_Beli_Detail
Tetapi jika menggunakan model lama maka datanya akan seperti ini :
Transaksi_Beli_Detail
Master_Barang
Field Name | Data Type | PrimaryKey |
Kode_Barang | Varchar(10) | Yes |
Nama_Barang | Varchar(50) | No |
Transaksi_Beli_Detail
Field Name | Data Type | PrimaryKey |
Kode_Beli | Varchar(20) | Yes |
Kode_Barang | Varchar(10) | Yes |
Qty | Float | No |
Dan biasanya jika anda ingin menampikan Report Detail Pembelian menggunakan query seperti ini :
"SELECT A.*, B.Nama_Barang FROM Transaksi_Beli_Detail AS A JOIN Master_Barang AS B ON A.Kode_Barang=B.Kode_Barang"
Memang tidak ada yang salah dengan struktur seperti itu dan ini sudah mengikuti aturan NORMALISASI. Tapi baru baru ini saya menemukan konsep baru yaitu dengan tujuan agar performance table/database dalam melakukan proses SELECT data menjadi lebih cepat dan stabil. Caranya adalah dengan menambahkan ID pada setiap table, apa itu ID ?
ID dapat dikatakan No_Urut untuk setiap record/row pada table, anda bisa setting ID ini sebagai Auto-Increment maupun manual. jangan lupa ID ini harus anda setting menjadi PrimaryKey. Sehingga struktur tablenya menjadi sepeti ini :
Master_BarangID dapat dikatakan No_Urut untuk setiap record/row pada table, anda bisa setting ID ini sebagai Auto-Increment maupun manual. jangan lupa ID ini harus anda setting menjadi PrimaryKey. Sehingga struktur tablenya menjadi sepeti ini :
Field Name | Data Type | PrimaryKey |
ID_Barang | BigInt | Yes |
Kode_Barang | Varchar(10) | Yes |
Nama_Barang | Varchar(50) | No |
Transaksi_Beli_Detail
Field Name | Data Type | PrimaryKey |
ID_Beli | BigInt | Yes |
ID_Barang | BigInt | Yes |
Qty | Float | No |
Dengan seperti ini maka query Report Detail Pembelian-nya berubah menjadi :
"SELECT A.*, B.Nama_Barang FROM Transaksi_Beli_Detail AS A JOIN Master_Barang AS B ON A.ID_Barang=B.ID_Barang"
Lalu apa bedanya? cuma memindahkan link field/column nya saja? nah, perbedaannya adalah performa/kecepatannya karena JOIN dengan antar data numeric lebih cepat dari pada sorted character maupun unsorted character. Lihatlah contoh data berikut ini :
Transaksi_Beli_Detail
ID_Beli | ID_Barang | QTY |
1 | 1 | 100 |
1 | 3 | 50 |
2 | 1 | 500 |
3 | 4 | 49 |
Tetapi jika menggunakan model lama maka datanya akan seperti ini :
Transaksi_Beli_Detail
Kode_Trans | ID_Barang | QTY |
B120102-001 | BJU-XL001 | 100 |
B120102-001 | KRU-M010 | 50 |
B120102-002 | BJU-2L015 | 500 |
B120102-003 | CLP-L048 | 49 |
Nah disini kita bisa lihat, semakin simple data yang akan di JOIN maka akan semakin mudah dan cepat sql server engine dalam mem-proses-nya. Intinya perbedaan dari field ID dan KODE adalah :
1. ID hanya kita gunakan untuk proses JOIN dan proses pemrogramman2. KODE hanya digunakan untuk simbolitas (untuk user)
Memang jika yang belum terbiasa akan sedikit kaku/aneh, ini bukanlah sebuah keharusan maupun tehnik yang 100% benar, masing masing orang mempunyai gaya dan ciri khas dalam bekerja, semoga ilmu kita dapat lebih berambah luas lagi dengan saling berbagi. Terimakasih
Tags:
cara select data, contoh inner join di sql, perbedaan left outer join dan inner join biasa, cara membuat table yang baik, normalisasi pada table,cara agar loading select data cepat