Lompat ke konten Lompat ke sidebar Lompat ke footer

DELETE OR UPDATE (Cara/Metode/Logika/Teknik Hapus Data Dari Table/Database)

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
Kode_SupplierName
S01SupplierA
S02SupplierB
Nama_BarangVarchar(50)

Transaksi_Head_Beli
Kode_BeliKode_SupplierTanggal
B120101-001S0101/01/2012
B120101-002S0201/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 :
"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 :
Master_Supplier
Kode_SupplierNameRec_Status
S01SupplierA0
S02SupplierB1

Transaksi_Head_Beli
Kode_BeliKode_SupplierTanggalRec_Status
B120101-001S0101/01/20121
B120101-002S0201/02/20121

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,

Posting Komentar untuk "DELETE OR UPDATE (Cara/Metode/Logika/Teknik Hapus Data Dari Table/Database)"