Dalam pendidikan saya, saya telah diberitahu bahwa itu adalah ide yang salah untuk mengekspos kunci primer yang sebenarnya (tidak hanya kunci DB, tetapi semua aksesor utama) kepada pengguna.
Saya selalu menganggapnya sebagai masalah keamanan (karena penyerang dapat mencoba membaca barang bukan milik mereka).
Sekarang saya harus memeriksa apakah pengguna diperbolehkan mengakses, jadi apakah ada alasan berbeda di balik itu?
Juga, karena pengguna saya harus mengakses data, saya harus memiliki kunci publik untuk dunia luar di antara keduanya. Sekarang kunci publik memiliki masalah yang sama dengan kunci primer, bukan?
Sudah ada permintaan contoh tentang mengapa melakukan itu, jadi di sini ada satu. Ingatlah bahwa pertanyaan yang dimaksudkan adalah tentang prinsip itu sendiri tidak hanya jika itu berlaku dalam contoh ini. Jawaban yang membahas situasi lain disambut secara eksplisit.
Aplikasi (Web, Mobile) yang menangani aktivitas, memiliki banyak UI dan setidaknya satu API otomatis untuk komunikasi antar sistem (mis. Departemen akuntansi ingin tahu berapa besar biaya pelanggan berdasarkan apa yang telah dilakukan). Aplikasi memiliki banyak pelanggan sehingga pemisahan data mereka (secara logis, data disimpan dalam DB yang sama) harus dimiliki oleh sistem. Setiap permintaan akan diperiksa validitasnya, apa pun yang terjadi.
Aktivitas granular sangat halus sehingga bersama-sama di beberapa objek kontainer, sebut saja "Tugas".
Tiga usecases:
- Pengguna A ingin mengirim Pengguna B ke beberapa Tugas sehingga ia mengiriminya tautan (HTTP) untuk menyelesaikan Aktivitas di sana.
- Pengguna B harus pergi ke luar gedung sehingga ia membuka Tugas di perangkat selulernya.
- Akuntansi ingin menagih pelanggan untuk Tugas, tetapi menggunakan sistem akuntansi pihak ketiga yang secara otomatis memuat Tugas / Kegiatan dengan beberapa kode yang merujuk pada REST - API Aplikasi
Setiap usecases membutuhkan (atau semakin mudah jika) agen untuk memiliki beberapa pengidentifikasi yang dapat dialamatkan untuk Tugas dan Aktivitas.
ON UPDATE CASCADE
dibuat untuk itu (spesifik mysql?), walaupun jika masalahnya adalah keamanan maka pemeriksaan akses harus di backend dan tidak mempercayai pengguna