Pertama catatan, saya pikir mungkin pertanyaan ini termasuk dalam pertukaran database, tapi saya pikir ini lebih luas terkait dengan solusi pemrograman secara keseluruhan daripada ke database. Akan pindah ke pertukaran basis data jika orang berpikir itu yang terbaik.
Saya bertanya-tanya kapan tabel database harus memiliki cap waktu yang dibuat dan diperbarui ditambahkan?
Jawaban pertama yang jelas adalah bahwa jika ada logika bisnis perlu tahu kapan sesuatu diperbarui (seperti tanggal penyelesaian transaksi dll) maka harus masuk.
Tetapi bagaimana dengan kasus-kasus logika bisnis non? Sebagai contoh, saya dapat memikirkan skenario di mana akan sangat berguna untuk mengetahui waktu tanggal dimana baris diubah untuk membantu menemukan kesalahan misalnya beberapa logika bisnis gagal dan melihat pada baris database terkait mungkin untuk mengidentifikasi bahwa satu baris sedang diperbarui sebelum baris lain yang menyebabkan kesalahan.
Dengan use case ini, masuk akal untuk memberi setiap tabel pembaruan dan membuat stempel waktu (kecuali mungkin tabel enum paling sepele yang tidak akan diperbarui oleh bagian mana pun dari aplikasi).
Memberi setiap tabel stempel waktu pasti merupakan cara yang bagus untuk dengan cepat menurunkan basis data (meskipun mungkin salah).
Jadi kapan seharusnya tabel database menggunakan buat dan perbarui cap waktu?
Jawaban:
Untuk manajemen basis data yang lebih baik dan lebih komprehensif dan praktik paling bijak adalah melakukannya.
Pertama, lebih mungkin sebagai pengembang, Anda ingin melacak transaksi basis data dan / atau kegiatan untuk pengembangan dan kemudahan melacak bug dan kesalahan pada kode Anda setiap kali melibatkan basis data Anda.
Juga, setiap kali Anda perlu melacak aktivitas yang dilakukan pada basis data Anda untuk keperluan statistik .
Lain, sering terjadi bahwa mungkin untuk saat ini Anda tidak perlu melacak kegiatan basis data Anda, tetapi kemungkinan besar Anda akan melakukannya di masa depan. Ini akan membutuhkan waktu Anda hari ini, tetapi membeli Anda lebih banyak di masa depan .
sumber
Sebagai seseorang yang telah menjadi pemburu liar (pengembang) dan pengawas binatang peliharaan (DBA), saya terkejut banyak orang masih tidak melihat nilai dalam hal ini dan menganggapnya gembung.
Sederhananya:
Saya telah bekerja di banyak tempat di mana DATE_CREATED dan DATE_UPDATED dimasukkan dalam setiap tabel secara default sebagai bagian dari desain.
Untuk basis data yang lebih besar dengan jutaan / miliaran baris di mana pembaruan basis data berlangsung selama beberapa hari, kami juga menambahkan kolom SUMBER untuk beberapa tabel yang melacak pot data mana yang menyebabkan pembaruan misalnya umpan pihak ke-3, pembaruan pengguna, modifikasi DBA, membersihkan data dll.
sumber
Cara pertanyaannya adalah kata, Anda meminta daftar hal-hal. Saya akan mengambil risiko tidak langsung menjawab pertanyaan Anda, tetapi menjawab kapan Anda harus menggunakan solusi alternatif.
Apakah akan lebih bermanfaat untuk memiliki log semua pembaruan untuk catatan yang diberikan? Hanya mengetahui pembaruan terakhir, mungkin tidak cukup informasi. Log ini dapat dimasukkan ke dalam tabel terpisah. Akan lebih mudah untuk melacak perubahan dari beberapa tabel dalam file log yang sama (tidak harus berupa tabel). Ini mencegah beberapa permintaan gabungan besar-besaran dari semua tabel change_date untuk mendapatkan agregat. Ini juga akan bermanfaat untuk pemecahan masalah dengan membantu Anda melihat rekaman lebih banyak peristiwa di sistem Anda.
Selain itu: Anda harus mempertimbangkan pengguna juga. Mereka mungkin tidak menjadikannya sebagai kasus bisnis, tetapi ketika Anda memiliki pengguna yang tidak berpengalaman atau yang berada dalam budaya perusahaan di mana mereka tidak pernah membuat kesalahan pengguna dan ingin selalu menyalahkannya di komputer, segala jenis pencatatan akan membantu termasuk memperbarui tanggal pada tabel. Dalam hal ini, Anda mungkin ingin memiliki bidang Update_UserID juga.
sumber
Tabel database harus menyertakan template kreasi dan modifikasi ketika salah satu dari berikut ini benar:
Table_X
danTable_Y
yang merupakan anak satu-ke-banyakTable_X
,Table_Y
bukan catatan primer dan karenanya tidak memerlukan bidang tambahan.Table_Y
hanya diperbarui ketikaTable_X
diperbarui, bidang pelacakan tambahan dapat membantu.Perhatikan bahwa keduanya tidak eksklusif; Anda dapat melanjutkan dan menambahkannya di mana saja secara default, dan mengabaikannya hanya saat diperlukan untuk penyetelan kinerja.
sumber
Opini pribadi:
Saya tidak melihat nilai di
modified
kolom.created
, tentu saja, harus ditambahkan ke setiap tabel database kecuali ada justifikasi luar biasa untuk tidak melakukannya. Ada begitu banyak nilai untuk memilikinya di sana.Namun,
updated
sepertinya sia-sia. Mengapa tidak pergi saja ke seluruh babi, buat dua tabel basis data, satu yang menentukan ID dokumen dan satu lagi versi dokumen. Dalam kasus yang sangat sederhanaKemudian pilih yang terbaru
version
yangdocument
Anda inginkan. Dengan cara ini, Anda tidak hanya menyimpan setiap tanggal modifikasi - bukan hanya yang terakhir - tetapi Anda juga menyimpan setiap versi dokumen itu. Satu-satunya argumen yang menentangnya adalah ruang hard drive, tetapi tentu saja ketika Anda sampai pada titik ketika Anda terganggu tentang ruang hard drive yang digunakannya - dalam kebanyakan kasus Anda bahkan akan lebih terganggu dengan mengversi data.sumber