Saya baru mengenal database dan mencoba memahami konsep dasar. Saya telah belajar cara menghapus data dalam database. Tetapi salah satu teman saya mengatakan kepada saya bahwa Anda seharusnya tidak pernah menghapus data dalam database. Sebaliknya, ketika itu tidak lagi diperlukan, lebih baik hanya menandainya atau menandai sebagai 'tidak digunakan'.
Benarkah? Jika demikian, bagaimana perusahaan besar seperti IBM menangani data mereka selama seratus tahun atau lebih?
database
maintenance
fuddin
sumber
sumber
Jawaban:
Seperti semua hal ini, jawabannya adalah "itu tergantung".
Jika pengguna cenderung menginginkan data kembali maka teman Anda benar - Anda tidak benar-benar menghapus cukup tandai catatan sebagai "dihapus". Dengan cara ini ketika pengguna berubah pikiran Anda dapat memulihkan data.
Namun, jika data yang dihapus lebih dari periode waktu tertentu (misalnya satu tahun), Anda mungkin memutuskan untuk benar-benar menghapusnya dari tabel langsung tetapi menyimpannya dalam tabel arsip atau bahkan hanya cadangan jika pengguna ingin kembali. Dengan cara ini Anda dapat menjaga jumlah data (hidup dan yang baru-baru ini dihapus) ke minimum.
Namun, jika datanya fana atau mudah dibuat ulang, Anda mungkin memutuskan untuk benar-benar menghapus data.
Ada satu kelas data yang harus Anda hapus - dan itu adalah data pribadi yang pengguna tidak ingin Anda pegang lagi. Mungkin ada undang-undang setempat (misalnya di UE) yang menjadikan ini persyaratan wajib (terima kasih Gavin )
Sama halnya mungkin ada aturan yang mengharuskan Anda untuk tidak menghapus data, jadi sebelum memutuskan apa pun periksa dengan otoritas regulasi apa pun yang perlu Anda lakukan untuk mematuhi hukum.
sumber
Ini sebenarnya masalah besar bagi banyak perusahaan. Tidak ada cara untuk secara jelas menentukan data apa yang sebenarnya digunakan, jadi ia hanya berada di database. Penghapusan dan pengarsipan data harus menjadi bagian dari setiap desain sistem besar, tetapi jarang terjadi. Sebagian besar perusahaan hanya hidup dengan itu, membeli disk yang lebih besar dan mengutak-atik permintaan dan indeks mereka untuk mempertahankan kinerja, sampai mereka mengubah sistem dan kemudian mereka melalui sejumlah besar upaya untuk mengidentifikasi data saat ini dan kemudian hanya memindahkan catatan tersebut ke sistem baru mereka.
Ya, Anda harus menghapus data dari basis data Anda, tetapi seringkali tidak mudah untuk mengatakan apa dan kapan.
sumber
Sudah ada banyak jawaban bagus untuk ini yang cukup banyak bermuara pada "Tergantung pada keadaan", dan saya tidak dapat menambahkan apa pun untuk itu.
Satu hal yang belum disebutkan, yang saya pikir perlu disebutkan, adalah bahwa Anda tidak boleh menggunakan kembali kunci primer yang dihasilkan oleh urutan atau sistem AUTO_INCREMENT.
Ketika Anda menghapus item yang telah diberikan kunci utama oleh sistem seperti itu, akan ada celah di kolom kunci utama, ditinggalkan oleh data yang dihapus. Ada godaan besar untuk menetapkan kembali kesenjangan tersebut ke item baru saat mereka ditambahkan, atau lebih buruk lagi, untuk mengocok data yang ada untuk memberikannya ID baru untuk menghilangkan kesenjangan, tetapi melakukan hal itu akan menimbulkan masalah yang Anda inginkan. tidak pernah harus berurusan dengan jika Anda meninggalkan kunci sendirian.
Katakanlah Anda menyimpan basis data printer untuk mengelola pemesanan ulang bahan habis pakai. Printer 13, sebuah printer laser tua, rusak melebihi perbaikan ekonomi sehingga Anda membuangnya. Sementara itu, untuk alasan yang tidak terkait, seseorang memesan printer termal baru untuk melakukan pencetakan barcode di gudang, dan printer itu tiba sebelum penggantian untuk printer 13. Administrator mencatat printer baru itu ke dalam database dan, karena 13 sekarang bebas dan Anda mendaur ulang ID, printer termal baru akan dialokasikan 13 sebagai ID-nya.
Sekarang seseorang memberi tahu Anda bahwa printer 13 hampir kehabisan tinta. Anda ingat bahwa printer 13 adalah printer laser sehingga Anda tidak perlu repot mencarinya di basis data, dan Anda memesan kartrid toner. Hanya Anda yang benar-benar perlu memesan paket tinta termal karena printer 13 bukan printer laser lagi. Ketika kartrid toner tiba, Anda tidak dapat menggunakannya karena ini adalah isi ulang tinta yang salah untuk printer, Anda tidak dapat mencetak lagi kode batang dan Anda tidak dapat mengirimkan pesanan yang menunggu untuk dikirim.
Lebih buruk lagi, apa yang terjadi jika Anda menghapus printer 13 dan mengacak semua printer yang datang untuk mengisi celah? Printer 14 (beberapa dot matrix tua jompo) menjadi printer 13, printer 15 menjadi printer 14 dan seterusnya.
Semua printer memiliki label pada mereka sehingga mereka dapat direferensikan silang dengan database, tetapi sekarang semua label sudah ketinggalan zaman. Anda harus berputar, mencari setiap printer dalam bisnis (yang bisa mencapai ratusan!) Dan memberi label baru. Itu bukan penggunaan waktu yang efektif. Dan ini juga merupakan proses yang rawan kesalahan, dan apa yang terjadi jika tidak pernah dilakukan? Seseorang memanggil untuk mengatakan printer 14 telah rusak dan perlu segera diperbaiki, sehingga Anda mencarinya dan menemukan bahwa printer 14 adalah printer inkjet di Penerimaan. Hanya karena Anda telah mengocok ID di sekitar, itu sebenarnya printer dot matrix yang perlu diperbaiki segera. Orang yang memanggil masalah dibiarkan menggantung, sementara resepsionis memiliki orang dukungan teknis yang dia tidak pernah panggil untuk memperbaiki printer yang tidak rusak.
Anda harus menganggap ID yang ditetapkan oleh sistem kenaikan otomatis sebagai permanen, tidak dapat diubah dan tidak dapat digunakan kembali, bahkan jika hal yang merujuk pada ID tidak ada lagi. Beberapa orang mengklaim bahwa mereka tidak ingin khawatir tentang kehabisan ID, tetapi bahkan dengan sistem 32 bit dan ID yang ditandatangani, masih ada sekitar 2 miliar ID yang tersedia. Jika Anda dapat membuat kolom ID tidak ditandatangani maka ini berlipat ganda menjadi 4 miliar, dan pada sistem 64 bit jumlah ID yang tersedia secara harfiah lebih besar dari jumlah bintang di langit. Anda tidak akan kehabisan ID.
sumber
Sudah banyak jawaban bagus di sini. Saya hanya ingin menambahkan satu situasi yang belum ada yang disebutkan:
Data sensitif . Jika pengguna menghapusnya, lebih baik Anda menghapusnya!
Satu situasi yang sangat umum yang muncul di pikiran adalah perubahan / reset kata sandi. Anda tidak ingin menyimpan kata sandi lama (meskipun kata sandi itu hash, asin, dll.) Di basis data Anda. Pengguna mungkin menggunakan kata sandi lama (dan buruk) di situs lain.
Juga, ketika datang ke undang-undang tentang berapa lama Anda diizinkan untuk menyimpan jenis data tertentu maka tentu saja penghapusan lunak tidak akan dilakukan. Anda harus benar-benar menghapusnya.
Jadi saya akan bertanya pada diri sendiri: apakah pengguna (atau orang lain, pemerintah misalnya) akan marah jika saya membuat mereka percaya data telah dihapus, tetapi sebenarnya saya masih mendapatkannya dan dapat memulihkannya kapan saja?
sumber
Saya biasanya tidak menghapus data pengguna di database saya. Saya menandai mereka untuk disembunyikan. Seringkali seorang pengguna menghapus sesuatu secara tidak sengaja dan perlu diganti dengan mudah. Ini juga membantu mempertahankan integritas referensial untuk data terkait. Ini berfungsi untuk database ukuran kecil hingga sedang. Dalam sistem di mana kinerja sangat dipengaruhi oleh keputusan ini ditangani dengan cara khusus, misalnya tabel arsip, cadangan otomatis, dll.
Kami membuang data backend seperlunya, misalnya data sesi situs web kedaluwarsa dan informasi log lama. Tidak ada gunanya menjaga mereka selamanya.
Namun, seperti biasa, jawaban pastinya sangat tergantung pada situasi spesifik.
sumber
Saya telah mengerjakan aplikasi Valuta Asing selama beberapa tahun di mana ini muncul. Data yang dikumpulkan aplikasi selama bertahun-tahun berdampak pada kinerja (katakanlah eksponensial).
Setelah kami melakukan apa yang kami bisa dalam hal kode, kami mengusulkan kepada manajemen untuk mengarsipkan data yang lebih tua dari satu tahun. Mereka memverifikasi konsep (masalah hukum) dan untungnya kami bisa melakukannya. Jadi kami menghapus tetapi kami juga mengarsipkan data sehingga bisnis masih bisa menjalankan laporan mereka dll.
sumber
Dalam sebagian besar kasus, Anda harus menyimpan data untuk berjaga-jaga jika diperlukan di masa depan. Bisnis tempat Anda bekerja mungkin ingin melihat data historis untuk mendasarkan keputusan mereka yang akan mengarahkan perusahaan ke arah tertentu.
Anda harus menambahkan kolom 'Date_Time_Removed' ke setiap tabel dan bukannya menghapus secara fisik baris yang Anda atur, tentukan tanggal dan waktu bahwa baris tersebut telah dihapus secara virtual. Kemudian dalam prosedur tersimpan atau sql Anda akan memperhitungkan kolom 'Date_Time_Removed' misalnya pilih bla dari table1 di mana date_time_removed adalah nol
Tentu saja baris yang telah ditambahkan secara tidak sengaja ke database harus dihapus secara permanen, terutama data uji.
Dengan menyimpan semua data yang sah, Anda juga harus menggunakan basis data Anda untuk penyimpanan di masa mendatang.
sumber
Situasi lain selain yang disajikan adalah ketika data dihapus, tetapi log operasi yang dilakukan dalam database (termasuk penghapusan) disimpan dalam arsip untuk jangka waktu yang lama. Ruang lingkup utama ini adalah menerapkan sistem rollback ke tanggal yang lalu, tetapi juga dapat digunakan untuk menyimpan data yang terhapus dengan cara tertentu (yang dihapus dari basis data, tetapi disimpan dalam arsip).
Menyimpan arsip data yang dihapus tidak akan menjadi masalah besar. Perusahaan besar juga dapat menyimpan versi kode dan banyak informasi lainnya (tidak untuk membicarakan hal-hal terkait non-teknis) sehingga pada akhirnya menyimpan data besar adalah sesuatu yang biasa bagi mereka.
sumber