Ketika saya awalnya belajar tentang SQL saya selalu diberitahu, hanya menggunakan pemicu jika Anda benar-benar perlu dan memilih untuk menggunakan prosedur tersimpan sebagai gantinya jika mungkin.
Sayangnya, pada saat itu (beberapa tahun yang lalu) saya tidak terlalu penasaran dan peduli dengan fundamental seperti saya sekarang jadi tidak pernah menanyakan alasannya.
Apa pendapat komunitas dalam hal ini? Apakah itu hanya preferensi pribadi seseorang, atau pemicunya harus dihindari (seperti kursor) kecuali ada alasan bagus untuknya.
Jawaban:
The artikel Wikipedia pada database pemicu hadiah gambaran yang baik dari apa yang pemicu yang dan kapan harus menggunakannya dalam database yang berbeda.
Diskusi berikut ini hanya didasarkan pada SQL Server.
Menggunakan pemicu cukup valid ketika penggunaannya dibenarkan. Sebagai contoh, mereka memiliki nilai bagus dalam audit (menjaga riwayat data) tanpa memerlukan kode prosedural eksplisit dengan setiap perintah CRUD di setiap tabel.
Pemicu memberi Anda kontrol tepat sebelum data diubah dan tepat setelah data diubah. Ini memungkinkan untuk:
Mungkin beberapa alasan untuk ini adalah:
Beberapa perbedaan antara pemicu dan prosedur tersimpan non-pemicu antara lain:
sumber
Pemicu adalah persyaratan untuk aturan integritas data yang kompleks. Ini tidak dapat diberlakukan di mana pun kecuali database atau Anda akan memiliki masalah integritas data.
Mereka juga merupakan tempat terbaik untuk audit kecuali Anda tidak ingin menangkap semua perubahan pada database (yang merupakan masalah audit dari aplikasi).
Pemicu dapat menyebabkan masalah kinerja jika tidak ditulis dengan hati-hati dan tidak cukup banyak pengembang yang memiliki pengetahuan untuk menulisnya dengan baik. Ini adalah bagian dari tempat mereka mendapatkan rap buruk.
Pemicu sering kali lebih lambat daripada cara lain untuk menjaga integritas data, jadi jika Anda dapat menggunakan batasan pemeriksaan, gunakan itu alih-alih pemicu.
Sangat mudah untuk menulis pemicu buruk yang melakukan hal-hal bodoh seperti mencoba mengirim email. Apakah Anda benar-benar ingin tidak dapat mengubah catatan di db jika server email turun?
Di SQL server, pemicu beroperasi pada kumpulan catatan. Terlalu sering pengembang berpikir mereka hanya perlu menangani satu catatan sisipan, pembaruan atau penghapusan. Itu bukan satu-satunya jenis perubahan data yang terjadi pada basis data dan semua pemicu harus diuji dalam kondisi 1 perubahan catatan dan banyak perubahan catatan. Lupa melakukan tes kedua dapat menyebabkan pemicu yang berkinerja sangat buruk atau hilangnya integritas data.
sumber
Penggunaan pemicu basis data
sumber
Kasus penggunaan lain yang secara pribadi saya temui adalah untuk database yang diakses oleh lebih dari satu program. Jika Anda ingin mengimplementasikan fungsionalitas tetapi tidak mendesain ulang semua sistem untuk itu, pemicu membuat solusi yang masuk akal.
Sebagai contoh, saya baru-baru ini bekerja pada database yang sebelumnya ada hanya sebagai sistem kantor. Ketika webapp ditulis untuk berinteraksi dengannya, kami ingin menerapkan sistem pemberitahuan (mirip dengan stackexchange, misalnya), yang akan diaktifkan oleh beberapa peristiwa, seperti memproses transaksi, dan sebagainya. Kami dapat menerapkan pemicu sehingga pembaruan di backend kantor mengeluarkan pemicu untuk membuat pemberitahuan untuk frontend dan memberi tahu pengguna bahwa transaksi mereka telah diproses oleh kantor.
sumber
Pemicu dapat digunakan untuk menegakkan batasan pada basis data yang tidak dapat ditegakkan selama pembuatan skema basis data dan pernyataan DML apa pun.
sumber
Katakanlah Anda perlu mendorong data ke sistem pihak ke-3 dalam waktu dekat. Tabel Anda berisi 950 gigabytes data, jadi terlalu besar untuk hanya mendorong seluruh tabel ke aplikasi pihak ke-3.
Alih-alih, Anda mengumpulkan perubahan dalam antrian. Beberapa program eksternal kemudian secara berkala akan mendorong keluar sejumlah kecil data yang antri.
Sistem ini memiliki lebih dari 2000 prosedur tersimpan. Anda juga tahu bahwa ada banyak sql dalam kode sumber. Untuk menjamin antrian diisi dengan benar, Anda harus mencari melalui semua procs dan kode yang disimpan dan berharap Anda tidak ketinggalan apa pun.
Alih-alih, Anda bisa meletakkan pemicu di atas meja agar antrian tetap diperbarui. Dijamin tidak ketinggalan apa-apa. Satu lokasi sentral. Penalti kinerja? Tidak juga karena klik mengisi antrian tidak dapat dihindari apakah itu oleh pemicu, atau eksternal.
Dalam skenario ini saya akan mengatakan tidak menggunakan pemicu adalah pilihan desain yang buruk. Jika nanti Anda ingin menggunakan metode baru untuk mendorong data (misalkan antrian tidak berfungsi) dan antarmuka berubah Anda dilindungi jika Anda menggunakan pelatuk. Pemicu seringkali merupakan pilihan terbaik. Jangan dengarkan fanatik anti pemicu dogmatis.
sumber
Pemicu yang mengirim email tidak selalu merupakan ide 'bodoh'. Apa yang bodoh adalah tidak mengantisipasi pemadaman email dalam desain dan menanganinya dengan anggun tanpa kehilangan data. Bagian 'bodoh' dari ini benar-benar buruk untuk penanganan kesalahan yang tidak ada oleh pengembang malas yang merasa mereka kebal terhadap kesalahan.
Saya juga akan menawarkan pengamatan bahwa pemicu dapat dibuat sederhana dengan menggunakan prosedur / fungsi tersimpan yang mungkin rumit dan dapat digunakan kembali oleh banyak pemicu atau prosedur tersimpan lainnya. Itu sebabnya ada paket dan perpustakaan.
Kefanatikan benar-benar melumpuhkan.
sumber