Saya pikir pertanyaannya adalah tentang tanggung jawab atas kualitas data.
Jawabannya tergantung pada bagaimana Anda melihat sistem.
Jika Anda melihat database sebagai layanan independen, berbeda, dan otonom terpisah dari aplikasi, maka database bertanggung jawab untuk memastikan konsistensi dan kualitas data yang dikandungnya. Pada dasarnya karena database tersebut dapat digunakan oleh aplikasi yang berbeda, sehingga tidak dapat bergantung pada aplikasi kedua yang memiliki perilaku dan kualitas yang sama. Dalam keadaan ini, basis data perlu dirancang untuk mengekspos API dan perilaku otonom. Dalam pandangan ini setidaknya ada dua aplikasi, salah satunya adalah database dan yang lainnya adalah aplikasi yang menggunakannya.
Sebaliknya, basis data dapat dianggap sebagai bentuk file yang rumit yang berada di bawah kendali langsung dan total aplikasi. Dalam hal ini database berubah menjadi serialisasi murni dan alat navigasi dokumen. Ini mungkin menyediakan beberapa perilaku lanjut untuk mendukung permintaan, dan pemeliharaan dokumen (seperti JSON, atau alat XML lakukan) tetapi sekali lagi tidak harus (seperti kebanyakan aliran file lakukan). Dalam hal ini murni tanggung jawab program untuk mempertahankan format dan konten yang benar dalam file. Dalam tampilan ini ada satu aplikasi.
Dalam kedua tampilan, pertanyaan selanjutnya adalah bagaimana mendukung penggunaan database sebagai file mewah, atau layanan terpisah. Anda dapat mencapai ini dengan:
- menggunakan alat-alat yang disediakan platform database dalam bentuk tabel / tampilan / prosedur tersimpan / pemicu / dll ...
- membungkus basis data itu sendiri dalam suatu layanan yang harus digunakan semua klien untuk mengakses basis data
- membungkus basis data di perpustakaan yang harus digunakan oleh semua klien untuk mengakses data.
Masing-masing dilengkapi dengan pro / kontra sendiri dan akan bergantung pada kendala arsitektur lingkungan di mana sistem beroperasi.
Apa pun tampilan yang Anda ambil, selalu terbayar untuk memvalidasi data pada batas.
- Validasikan bidang pada UI yang dimasukkan pengguna
- Validasi permintaan jaringan / API sebelum meninggalkan klien
- Validasi permintaan jaringan / API di server sebelum melakukan apa pun
- Validasi data yang dimasukkan ke dalam aturan bisnis
- Validasikan data sebelum bertahan
- Validasikan data setelah diambil dari ketekunan
- seterusnya dan seterusnya
Berapa banyak validasi dijamin pada setiap batas tergantung pada seberapa berisiko itu untuk tidak memvalidasinya.
- mengalikan dua angka bersamaan?
- Anda mendapatkan nomor yang salah apakah itu masalah?
- menjalankan prosedur pada lokasi memori yang diberikan?
- Apa yang ada di lokasi memori itu?
- Apa yang terjadi jika objek tidak ada, atau dalam kondisi buruk?
- menggunakan regex pada string yang berisi kanji?
- Bisakah modul regex menangani unicode?
- Bisakah regex menangani unicode?
However, why not perform validation of data on the application side before storing them into the database?
nah, keduanya tidak saling eksklusif. Kemungkinan Anda akan memvalidasi hal-hal yang berbeda di kedua sisi. Sementara validasi di sisi aplikasi adalah bisnis-sentris, validasi pada database lebih banyak data-sentris. Pikirkan dalam basis data yang diumpankan oleh beberapa aplikasi dan berbeda.