Dari pengalaman saya, menghapus data itu TIDAK diperbolehkan baik itu data Master maupun data Transaksi, kenapa? alasannya? Baiklah saya beri contoh kasus seperti ini : Master data yang sudah digunakan di table lain (ber-relasi) tidak boleh dihapus karena akan berpengaruh pada data di table lain. Contoh :
Master_Supplier
Master_Supplier
Kode_Supplier | Name |
S01 | SupplierA |
S02 | SupplierB |
Nama_Barang | Varchar(50) |
Transaksi_Head_Beli
Kode_Beli | Kode_Supplier | Tanggal |
B120101-001 | S01 | 01/01/2012 |
B120101-002 | S02 | 01/02/2012 |
Jika ada menghapus data supplier (misalnya dari form master supplier), maka effect nya adalah :
1.Report Transaksi Pembelian tidak akan muncul semua jika anda menggunakan query :
"SELECT A.*, B.Name FROM Transaksi_Head_Beli AS A JOIN Master_Supplier AS B ON A.Kode_Supplier = B.Kode_Supplier"
dengan query diatas maka yang muncul hanya transaksi "B120101-002" saja
2.Report Transaksi Pembelian Akan muncul semua tetapi sebagian data Supplier akan kosong (NULL), jika
anda menggunakan query :
anda menggunakan query :
"SELECT A.*, B.Name FROM Transaksi_Head_Beli AS A LEFT JOIN Master_Supplier AS B ON A.Kode_Supplier = B.Kode_Supplier"
Lalu bagaimana dengan "Tombol Hapus" pada form? terus bagaimana jika ada supplier yang sudah tidak
dipakai? Jawabannya adalah dengan mengganti perintah "DELETE" dengan "UPDATE" dan menambahkan (1 field/column "rec_status") dengan (DataType = Bit) di setiap table, yang artinya jika (0 = deleted) dan (1 = active) jadi struktur table nya menjadi seperti ini :
dipakai? Jawabannya adalah dengan mengganti perintah "DELETE" dengan "UPDATE" dan menambahkan (1 field/column "rec_status") dengan (DataType = Bit) di setiap table, yang artinya jika (0 = deleted) dan (1 = active) jadi struktur table nya menjadi seperti ini :
Master_Supplier
Transaksi_Head_Beli Kode_Supplier | Name | Rec_Status |
S01 | SupplierA | 0 |
S02 | SupplierB | 1 |
Kode_Beli | Kode_Supplier | Tanggal | Rec_Status |
B120101-001 | S01 | 01/01/2012 | 1 |
B120101-002 | S02 | 01/02/2012 | 1 |
Sehingga anda akan lebih leluasa lagi membuat Jenis Reportnya, contoh :
1.Jika anda ingin menampilkan semua Report Transaksi Pembelian, baik itu data supplier/ data transaksi yang active dan terhapus:
"SELECT A.*, B.Name FROM Transaksi_Head_Beli AS A JOIN Master_Supplier AS B ON A.Kode_Supplier = B.Kode_Supplier"
2.Jika anda hanya ingin menampilkan Report yang suppliernya active saja, maka hasilnya akan menampilkan "B120101-002" :
"SELECT A.*, B.Name FROM Transaksi_Head_Beli AS A JOIN Master_Supplier AS B ON A.Kode_Supplier = B.Kode_Supplier WHERE A.REC_STATUS=1"
Ubah A.Rec_Status=0 jika anda ingin menampilkan Report sebaliknya
Selain itu salah satu keuntungan menggunakan UPDATE+Rec_Status ini adalah memperkecil penurunan performance database, karena jika menghapus data (DELETE) itu akan mengubah susunan index recordset/row pada table, maka semakin lama susunan nya akan semakin rumit/acak dan harus di Shrink Database (jika di windows itu adalah Defragment Hardisk).
Penjelasan tambahan untuk sintak pata tombol HAPUS di form anda dapat menggantinya seperti ini:
"UPDATE Master_Supplier SET Rec_Status=0 WHERE Kode_Supplier='S01'"
Penjelasan tambahan untuk sintak pencarian data supplier (pilih supplier) di form transaksi pembelian :
"SELECT * FROM Master_Supplier WHERE Rec_Status=1"
Jadi intinya ubah paradigma DELETE menjadi UPDATE dan selalu ikut sertakan field Rec_Status pada setiap SELECT data. Apa yang saya tulis ini bukanlah sebuah kewajiban atau aturan yang harus dilakukan, semua orang mempunyai persepsi dan logika tersendiri dalam berkarya.
Tags:
cara hapus data yang benar, cara delete data yang baik, sintak untuk delete data, berapa lama tahun data perusahaan,
0 komentar:
Posting Komentar