Apakah basis data memicu kejahatan? [Tutup]

187

Apakah basis data memicu ide yang buruk?

Dalam pengalaman saya mereka jahat, karena mereka dapat menghasilkan efek samping yang mengejutkan, dan sulit untuk di-debug (terutama ketika satu pemicu memicu yang lain). Seringkali pengembang bahkan tidak berpikir untuk mencari jika ada pemicu.

Di sisi lain, sepertinya jika Anda memiliki logika yang harus terjadi waktu tambahan yang baru FOOdibuat dalam database maka tempat paling mudah untuk meletakkannya adalah pemicu memasukkan pada tabel FOO.

Satu-satunya waktu kami menggunakan pemicu adalah untuk hal-hal yang sangat sederhana seperti mengatur ModifiedDate.

WW.
sumber
31
Ini adalah pertanyaan yang sepenuhnya sah tetapi saya tidak terlalu suka judul sensasional. Saya pikir sesuatu seperti "Apa masalah paling penting untuk dipertimbangkan ketika mengimplementasikan pemicu basis data?" akan jauh lebih baik.
Tamas Czinege
2
Pertanyaan ditutup untuk menambahkan jawaban, tetapi lihat juga Apakah pemicu basis data aman untuk kendala integritas tabel silang? . (Spoiler: tidak, mereka tidak)
Mifeet
16
Situs ini membuatku kesal. Ini adalah pertanyaan yang HEBAT namun seperti banyak pertanyaan lainnya yang ditutup karena orang tidak memiliki imajinasi untuk menerima pertanyaan yang tidak sesuai dengan format biner Q&A yang primitif, yang karena alasan asing mereka merasa harus mengikuti.
Quibblesome
1
Logika Bisnis dalam sebuah pemicu bermasalah (jahat, jika Anda mau). Database Logic dalam sebuah trigger tidak bermasalah (integritas, logging).
Greg Gum
1
Saya suka mengandalkan IDE untuk navigasi kode dan memahami apa yang terjadi. Saya tidak bisa melakukan itu jika setengah dari logika ada di database dan setengahnya lagi dalam bahasa pemrograman pilihan. Alih-alih pemicu saya merasa lebih mudah untuk membuat controller yang setiap permintaan harus melalui. Semua 'pemicu' dapat diterapkan di sana sebagai gantinya.
Muhammad Umer

Jawaban:

147

Masalah utama dengan pemicu adalah

  • Mereka sepenuhnya Global - mereka berlaku apa pun konteks aktivitas tabelnya;
  • Mereka tersembunyi; mudah untuk melupakan mereka ada di sana sampai mereka menyakiti Anda dengan konsekuensi yang tidak diinginkan (dan sangat misterius).

Ini hanya berarti mereka harus digunakan dengan hati-hati untuk keadaan yang tepat; yang dalam pengalaman saya terbatas pada masalah integritas relasional (kadang-kadang dengan granularity lebih baik daripada yang bisa Anda dapatkan secara deklaratif); dan biasanya tidak untuk keperluan bisnis atau transaksional. YMMV.

dkretz
sumber
20
Itu adalah 2 keuntungan, dalam beberapa kasus.
Johnno Nolan
18
"Stealthy" adalah kata yang bagus, yeah - kata baik. Itulah mengapa saya cenderung menghindar dari mereka: terlalu sering mereka dilupakan atau diabaikan. Dalam pengalaman pribadi saya, pemicu mengunjungi kembali sering disertai dengan pukulan ke dahi saya sendiri.
Christian Nunciato
5
Global adalah alasan mengapa mereka baik dan perlu untuk integritas data dan hal-hal seperti audit. Itu bukan minus, itu plus.
HLGEM
4
jadi @ RobertŠevčík-Robajz, Anda mengatakan semua pengembang yang Anda kenal tidak kompeten?
HLGEM
3
@HGLEM, setujui harus ada spesialis untuk mencari pemicu. Skenario kehidupan nyata - tidak ada. Skenario kehidupan nyata - berhari-hari dihabiskan untuk mencoba mengidentifikasi bug yang terkait dengan pemicu yang terlupakan. Skenario kehidupan nyata - logika pemicu sedang mati-matian didorong ke dalam logika aplikasi di mana ia dapat dengan mudah di refactored dan diuji unit. Ini kehidupan nyata yang saya tangani yang membuat saya mengatakan "menjauhlah dari pemicu" ... itu bukan kesalahan pemicu karena itu bukan kesalahan batu yang membuat jendela pecah.
Rbjz
80

Tidak, itu sebenarnya ide yang bagus. Jika ada masalah dengan pemicu spesifik Anda, maka Anda tidak melakukannya dengan benar, tetapi itu biasanya berarti ada masalah dengan implementasi Anda, bukan konsep pemicu itu sendiri :-).

Kami menggunakan pemicu banyak karena itu menempatkan aktivitas spesifik DBMS di bawah kendali database di mana ia berada. Pengguna DBMS tidak perlu khawatir tentang hal-hal semacam itu. Integritas data terletak pada database itu sendiri, bukan aplikasi atau pengguna yang menggunakannya. Tanpa kendala dan pemicu serta fitur lain dalam basis data, diserahkan kepada aplikasi untuk menegakkan aturan dan hanya dibutuhkan satu aplikasi / pengguna yang nakal atau buggy untuk menghancurkan data.

Misalnya, tanpa pemicu, hal-hal menakjubkan seperti kolom yang dibuat secara otomatis tidak akan ada dan Anda harus memproses fungsi pada setiap baris saat memilihnya. Itu mungkin akan mematikan kinerja DBMS, jauh lebih baik untuk membuat kolom yang dibuat secara otomatis pada waktu memasukkan / memperbarui karena hanya itulah waktu perubahannya.

Juga, kurangnya pemicu akan mencegah aturan data ditegakkan di DBMS seperti pra-pemicu untuk memastikan kolom memiliki format tertentu. Perhatikan bahwa ini berbeda dari aturan integritas data yang umumnya hanya mencari kunci asing.

paxdiablo
sumber
9
+ msgstr "proses suatu fungsi pada setiap baris saat memilihnya". Lebih baik menggunakan indeks berbasis fungsi untuk tujuan ini daripada pemicu.
tuinstoel
10
Belum tentu, pemicu mungkin hanya akan berjalan ketika baris dimasukkan atau diperbarui. Indeks berbasis fungsi akan berjalan untuk setiap pilih. Tergantung pada pola penggunaan yang satu mungkin lebih baik daripada yang lain. Tapi tidak ada yang SELALU lebih baik dari yang lain.
jmucchiello
@tuinstoel: Saya harus setuju dengan pernyataan Anda beberapa waktu. Oracle, misalnya, hanya akan membuat indeks berbasis fungsi jika dapat membuktikan bahwa fungsi tersebut deterministik. Terkadang itu tidak bisa dibuktikan (misalnya, jika fungsinya melibatkan pencarian dari tabel, bahkan jika Anda tahu bahwa data tabel tidak pernah berubah).
Adam Paynter
50

Alat tidak pernah jahat. Aplikasi alat-alat itu bisa jahat.

Andy Webb
sumber
11
Saya tidak pernah lebih berkonflik setelah membaca komentar. Di satu sisi, saya pro amandemen kedua dan percaya bahwa senjata secara inheren tidak jahat: itu orang yang menggunakannya. Di sisi lain, saya percaya bahwa memicu ADALAH kejahatan ... Saya pikir saya mengalami kehancuran eksistensial ...
vbullinger
37
@vbullinger tidak jahat, tetapi pemicunya adalah;)
Darragh Enright
2
: D Generalisasi berbahaya (rekursif). Apakah Anda datang dengan 'alat' penyiksaan yang digunakan oleh inkuisitor untuk 'memicu' pengakuan? +1 untuk perspektif.
Rbjz
22

Saya setuju. Masalah dengan pemicu adalah orang, bukan pemicu. Meskipun lebih untuk dilihat, lebih untuk mempertimbangkan dan meningkatkan tanggung jawab pada coders memeriksa hal-hal dengan benar, kami tidak membuang indeks untuk membuat hidup kita lebih sederhana. (Indeks buruk bisa sama buruknya dengan pemicu buruk)

Pentingnya pemicu (dalam pikiran saya) adalah bahwa ...
- Setiap sistem harus selalu dalam keadaan valid
- Kode untuk menegakkan status yang valid ini harus dipusatkan (tidak ditulis dalam setiap SP)

Dari sudut pandang pemeliharaan, pemicu sangat berguna untuk coders yang kompeten dan masalah untuk yang lebih junior / amatir. Namun, orang-orang ini perlu belajar dan tumbuh.

Saya kira itu turun ke lingkungan kerja Anda. Apakah Anda memiliki orang yang dapat diandalkan yang belajar dengan baik dan dapat dipercaya untuk menjadi metodis? Jika tidak, Anda tampaknya memiliki dua pilihan:
- Terima bahwa Anda harus kehilangan fungsionalitas untuk memberi kompensasi
- Terima bahwa Anda memerlukan orang yang berbeda atau pelatihan dan manajemen yang lebih baik

Kedengarannya kasar, dan kurasa memang begitu. Tapi itu kebenaran dasar, dalam pikiranku ...

MatBailie
sumber
3
>>> Masalah dengan pemicu adalah orang. Ya, jika hanya orang yang bisa membuat kode dalam perakitan, bekerja dengan GUI jelek, tebak dengan benar apakah akan mendorong atau menarik pintu yang dirancang buruk ... "Fitur" apa pun yang sering kali salah orang adalah "jahat".
Fakrudeen
1
@Fakrudeen, pengembang mana pun yang mendapat salah memicu tidak kompeten untuk mengakses database.
HLGEM
21

Saya pikir pemicu tidak hanya tidak jahat, tetapi juga diperlukan untuk desain database yang baik. Pemrogram aplikasi berpikir bahwa basis data hanya dipengaruhi oleh aplikasi mereka. Mereka sering salah. Jika integritas data harus dipertahankan tidak peduli dari mana perubahan data berasal, pemicu adalah persyaratan dan bodoh untuk menghindarinya karena beberapa programmer terlalu etnosentris untuk mempertimbangkan bahwa sesuatu selain aplikasi berharga mereka mungkin mempengaruhi hal-hal. Tidak sulit untuk merancang atau menguji atau memecahkan masalah pemicu jika Anda adalah pengembang basis data yang kompeten. Juga tidak sulit untuk menentukan bahwa pemicu menyebabkan hasil yang tidak terduga jika terjadi pada Anda (seperti yang terjadi pada saya) untuk melihat di sana. Jika saya mendapatkan kesalahan mengatakan tabel yang saya tidak referensi di sp saya memiliki kesalahan FK, Saya tahu bahkan tanpa memikirkannya bahwa pemicu yang menyebabkan masalah dan juga pengembang database yang kompeten. Menempatkan aturan bisnis hanya dalam aplikasi adalah penyebab utama saya menemukan data buruk karena orang lain tidak tahu bahwa aturan itu ada dan melanggarnya dalam proses mereka. Aturan data-sentris termasuk dalam database dan pemicu adalah kunci untuk menegakkan yang lebih kompleks.

HLGEM
sumber
1
Aturan data-sentris termasuk dalam database
absin
punya sayasome programmers are too ethnocentric to consider that something other than their prized application may be affecting things
Kid101
13

Sebagian besar ya.

Kesulitan dengan pemicu adalah ia melakukan hal-hal "di belakang Anda"; pengembang yang mempertahankan aplikasi bisa dengan mudah tidak menyadari bahwa aplikasi itu ada dan membuat perubahan yang mengacaukan segalanya tanpa menyadarinya.

Ini menciptakan lapisan kompleksitas yang hanya menambah pekerjaan pemeliharaan.

Daripada menggunakan pemicu, prosedur / rutin tersimpan, umumnya dapat dibuat untuk melakukan hal yang sama, tetapi dengan cara yang jelas dan dapat dipertahankan - memanggil rutin yang tersimpan berarti pengembang dapat melihat kode sumbernya dan melihat dengan tepat apa yang terjadi.

MarkR
sumber
12
Ini adalah keuntungan dari pemicu bukan kelemahan! Procs yang disimpan tidak dapat dijamin untuk dipanggil untuk setiap perubahan data. Ada banyak cara data dapat diubah selain GUI.
HLGEM
2
HLGEM, itu tergantung pada kontrol akses Anda. Anda dapat menolak modifikasi apa pun untuk tabel secara langsung kecuali melalui prosedur yang tersimpan.
Rbjz
1
Saya pikir intinya adalah bahwa jika, misalnya, catatan dalam dua tabel harus SELALU dibuat dan dihancurkan bersama, tidak peduli bagaimana Anda mengakses database, dan tidak peduli siapa Anda atau izin apa yang Anda miliki, maka pemicu adalah satu-satunya solusi yang sah . Fakta bahwa bahkan mungkin untuk menetapkan terlalu banyak atau izin yang salah dan untuk mengharapkan orang tahu prosedur tersimpan yang akan digunakan, berarti database berisiko kehilangan integritasnya. Persis sama dengan hubungan kunci asing. Ini hanya TERBAIK dan PALING DAPAT DIANDALKAN oleh mesin database.
Triynko
2
Jika catatan harus selalu dibuat / dihancurkan bersama, buat batasan pemeriksaan yang memastikan bahwa itu ada. Dengan begitu seseorang yang melanggar aturan mendapat kesalahan, bukannya perilaku tersembunyi yang secara ajaib membuat segalanya menjadi benar tanpa sepengetahuan atau persetujuan mereka.
MarkR
9

Pemicu sangat kuat dan berguna, ada sejumlah skenario di mana pemicu adalah solusi terbaik untuk masalah.

Mereka juga merupakan alat "retas" yang sangat bagus. Sering ada situasi di mana Anda tidak dapat mengendalikan langsung kode dan basis data. Jika Anda harus menunggu 2 bulan untuk rilis besar kode Anda berikutnya, namun Anda dapat menerapkan tambalan ke basis data Anda segera maka Anda dapat menempatkan pemicu pada sebuah tabel untuk melakukan beberapa fungsi tambahan. Kemudian ketika rilis kode dimungkinkan, Anda dapat mengganti pemicu ini dengan versi kode Anda dari fungsi yang sama jika diinginkan.

Pada akhirnya, semuanya "jahat" jika Anda tidak tahu apa yang dilakukannya. Memutuskan bahwa pemicu adalah karena ada pengembang yang tidak memahaminya sama dengan berpendapat bahwa mobil itu jahat karena beberapa orang tidak dapat mengemudi ...

Robin Day
sumber
7

Pemicu memiliki kegunaannya - logging / audit dan mempertahankan tanggal "modifikasi terakhir" adalah dua kegunaan yang sangat baik yang telah disebutkan dalam balasan sebelumnya.

Namun, salah satu prinsip inti dari desain yang baik adalah bahwa aturan bisnis / logika bisnis / apa pun yang Anda ingin menyebutnya harus dipusatkan di satu tempat. Menempatkan beberapa logika dalam database (melalui pemicu atau procs yang disimpan) dan beberapa di aplikasi melanggar prinsip itu. Menggandakan logika di kedua tempat bahkan lebih buruk, karena mereka akan selalu tidak sinkron satu sama lain.

Ada juga masalah "prinsip paling tidak mengejutkan" yang telah disebutkan.

Dave Sherohman
sumber
3
Itu benar, itu harus di satu tempat, basis data. Logika yang memengaruhi integritas data harus SELALU berada di dalam basis data dan tidak pernah dalam aplikasi yang mungkin atau mungkin tidak dipanggil saat memengaruhi data dalam basis data.
HLGEM
1
@HLGEM: Itu tergantung pada apakah database mungkin dapat memiliki akses ke informasi yang memungkinkannya untuk mengetahui apakah data tersebut valid. Tidak selalu demikian halnya; ketika validator ada di organisasi lain (misalnya, untuk rincian kartu kredit atau rekening bank) maka DB tidak dapat mengetahui apakah itu benar - dengan asumsi ini bukan DB bank! - dan itu harus bergantung pada aplikasi untuk penegakan hukum. Apa yang tidak Anda inginkan adalah memiliki database yang membuat koneksi acak ke layanan pihak ketiga, karena itu buruk ketika menyangkut penyebaran server.
Donal Fellows
@HLGEM: Walaupun saya tidak siap untuk sepenuhnya mengesampingkan opsi menempatkan semua logika aplikasi ke dalam database, saya menemukan bahwa itu cenderung bekerja lebih baik untuk meletakkannya di tempat lain, umumnya lapisan OO yang dapat digunakan kembali yang dapat digunakan untuk semua aplikasi mengakses data. Selama aplikasi Anda hanya mengakses database melalui lapisan objek, jaminan logika yang sama yang selalu dipanggil masih berlaku.
Dave Sherohman
2
Tidak pernah bekerja pada aplikasi bisnis yang hanya memasukkan data ke dalam database melalui lapisan Object dan saya tidak ingin bekerja di dalamnya. Adalah bodoh untuk menempatkan jutaan rekaman impor atau pembaruan semua harga melalui proses yang dirancang untuk menangani hanya satu catatan waktu ata. Lapisan Obyek adalah tempat yang salah untuk menegakkan integritas data yang karenanya banyak basis data memiliki masalah integritas.
HLGEM
@HLGEM Untuk alasan itulah saya bekerja pada ekstensi ke ORM kami untuk bekerja seperti pemicu menggunakan perubahan segalanya dalam suatu transaksi. Rasanya sedikit konyol tetapi akan mencegah kita memiliki semua logika bisnis kita dalam aplikasi kecuali beberapa kali tidak (Hanya beberapa tabel saja yang memerlukan pembaruan massal). Ini juga akan memungkinkan semua pengembang untuk menulis dan menggunakannya dalam bahasa yang paling nyaman bagi mereka dan di mana ada akses ke semua abstraksi objek yang kami buat.
Adamantish
6

Pemicu adalah alat yang baik bila digunakan dengan benar. Terutama untuk hal-hal seperti perubahan audit, mengisi tabel ringkasan, dll.

Sekarang mereka bisa menjadi "jahat" jika Anda berakhir di "pemicu neraka" dengan satu pemicu yang memulai pemicu lainnya. Saya pernah bekerja pada produk COTS di mana mereka memiliki apa yang mereka sebut "pemicu flex." Pemicu-pemicu ini disimpan dalam sebuah tabel karena sengatan sql dinamis dikompilasi setiap kali dieksekusi. Pemicu yang dikompilasi akan melakukan pencarian dan melihat apakah tabel itu memiliki pemicu flex untuk dijalankan dan kemudian mengkompilasi dan menjalankan pemicu "flex". Secara teori ini terdengar seperti ide yang sangat keren karena produknya mudah dikustomisasi tetapi kenyataannya adalah basis data yang cukup banyak meledak karena semua kompilasi yang harus dilakukan ...

Jadi ya, mereka bagus jika Anda menjaga apa yang Anda lakukan dalam perspektif. Jika itu sesuatu yang sangat sederhana seperti audit, meringkas, auto-sequencing, dll, tidak ada masalah. Hanya perlu diingat tingkat pertumbuhan tabel dan bagaimana pemicunya akan berdampak pada kinerja.

tmeisenh
sumber
6

Pada level tinggi ada dua use case untuk trigger1

1) Untuk membuat hal-hal "otomatis" terjadi. Dalam hal ini pemicu menyebabkan efek samping, mereka mengubah data dengan cara yang tidak diharapkan karena operator (primitif) memasukkan, memperbarui, atau menghapus yang dieksekusi dan menyebabkan pemicu menyala.

Konsensus umum di sini adalah bahwa pemicu memang berbahaya. Karena mereka mengubah semantik terkenal dari pernyataan INSERT, UPDATE atau DELETE. Mengubah semantik tiga operator SQL primitif ini akan menggigit pengembang lain yang di kemudian hari perlu bekerja pada tabel database Anda yang tidak berperilaku dengan cara yang diharapkan lagi ketika dioperasikan dengan mereka dengan SQL primitif.

2) Untuk menegakkan aturan integritas data, selain yang dapat kita uraikan secara deklaratif (menggunakan PERIKSA, KUNCI UTAMA, KUNCI UNIK dan KUNCI ASING). Dalam kasus penggunaan ini semua pemicu lakukan adalah data QUERY (SELECT) untuk memverifikasi apakah perubahan yang dilakukan oleh INSERT / UPDATE / DELETE diizinkan atau tidak. Seperti halnya batasan deklaratif bagi kita. Hanya dalam hal ini kami (pengembang) telah memprogram penegakan hukum.

Menggunakan pemicu untuk kasus penggunaan terakhir tidak berbahaya.

Saya menulis blog tentang itu di: http://harmfultriggers.blogspot.com

Toon Koppelaars
sumber
Saat menggunakan pemicu untuk integritas referensial, ini lebih sulit daripada yang terlihat untuk menangani masalah konkurensi.
WW.
2
Sepakat. Tetapi apakah lebih mudah saat menggunakan cara lain?
Toon Koppelaars
Saya berpendapat bahwa nomor satu hanya berbahaya jika Anda memiliki pengembang yang tidak kompeten.
HLGEM
Ada BANYAK pengembang yang tidak kompeten lol.
hashtable
5

Saya tahu pengembang yang berpikir pemicu harus selalu digunakan di mana itu adalah cara paling langsung untuk mencapai fungsi yang mereka inginkan, dan pengembang yang tidak akan pernah melakukannya. Hampir seperti dogma di antara kedua kubu.

Namun saya pribadi sepenuhnya setuju dengan MarkR - Anda dapat (hampir) selalu menulis kode yang secara fungsional setara dengan pemicu yang akan lebih jelas dan karenanya lebih mudah untuk dipertahankan.

DanSingerman
sumber
Kecuali tidak semua bekerja untuk mencapai aliran database melalui kode aplikasi.
HLGEM
5

Bukan jahat. Mereka sebenarnya menyederhanakan hal-hal seperti

1.Logging / audit perubahan pada catatan atau bahkan skema basis data

Anda dapat memiliki pemicu pada ALTER TABLE yang mengembalikan perubahan dalam lingkungan produksi Anda. Ini harus mencegah modifikasi tabel yang tidak disengaja.


2.Memperkuat integritas referensial (hubungan kunci utama / asing, dll) di banyak basis data

Chris
sumber
Anda dapat memutar kembali pernyataan DDL?
Andrew Swan
Secara umum tidak. Satu-satunya cara untuk menghentikannya adalah dengan menghapus izin itu dari login pengguna.
jmucchiello
Di beberapa mesin basis data Anda dapat (mis. PostgreSQL).
Nicolás
@Andrew - Di SQL Server Anda bisa. SQL Server 2005+ juga memiliki pemicu DDL yang memicu peristiwa seperti ALTER TABLE.
Martin Smith
4

Nah, mereka tidak jahat - mereka hanya disalahpahami :-D

Pemicu memiliki penggunaan yang valid, tetapi terlalu sering sebagai retas retro yang akhirnya memperburuk keadaan.

Jika Anda mengembangkan DB sebagai bagian dari aplikasi, logikanya harus selalu dalam kode atau sprocs yang melakukan panggilan. Pemicu hanya akan menyebabkan rasa sakit saat debug.

Jika Anda memahami bagaimana mengunci, menemui jalan buntu dan bagaimana DB mengakses file pada disk kemudian menggunakan pemicu dengan cara yang benar (misalnya mengaudit atau mengarsipkan akses DB langsung) bisa sangat berharga.

Keith
sumber
4

Mengatakan bahwa mereka jahat adalah sesuatu yang berlebihan tetapi mereka dapat menyebabkan perselisihan. Ketika penembakan satu pemicu menyebabkan pemicu lain untuk menembak itu menjadi sangat rumit. Katakanlah mereka merepotkan: http://www.oracle.com/technology/oramag/oracle/08-sep/o58asktom.html

Melakukan logika bisnis di Oracle dengan pemicu lebih sulit daripada yang tampaknya karena masalah multi konkurensi. Anda tidak melihat perubahan di sesi lain hingga sesi lainnya dilakukan.

tuinstoel
sumber
4

Mereka jelas tidak jahat. Saya menemukan pemicu berharga selama refactoring skema database, saat mengganti nama kolom, atau memecah kolom menjadi dua kolom atau sebaliknya (contoh: nama / nama keluarga) dan membantu transisi.

Mereka juga sangat berguna untuk audit.

Stefano Borini
sumber
4

Jawaban ini berlaku khusus untuk SQL Server. (Meskipun mungkin juga berlaku untuk RDBMS lain saya tidak tahu. Saya lebih suka memberikannya sebagai jawaban di sini tapi itu ditutup sebagai penipu dari ini.)

Satu aspek yang tidak disebutkan dalam jawaban sejauh ini adalah keamanan. Karena, secara default, pemicu mengeksekusi di bawah konteks pengguna yang mengeksekusi pernyataan yang menyebabkan pemicu ini dapat menyebabkan ancaman keamanan kecuali semua pemicu ditinjau.

Contoh yang diberikan dalam BOL di bawah tajuk " Mengelola Keamanan Pemicu " adalah dari pengguna yang membuat pemicu yang berisi kode GRANT CONTROL SERVER TO JohnDoe ;untuk meningkatkan izin mereka sendiri.

Martin Smith
sumber
3

Jika ada efek samping, itu masalah desain. Dalam beberapa sistem basis data, tidak ada kemungkinan lain untuk menetapkan bidang peningkatan otomatis yaitu untuk bidang ID kunci utama.

Xn0vv3r
sumber
3

Saya pikir mereka bisa jahat, tetapi hanya sama jahatnya dengan yang lain dalam perkembangan.

Meskipun saya tidak benar-benar memiliki banyak pengalaman dengan mereka, saya memiliki mereka pada proyek terbaru yang saya kerjakan yang telah membawa saya pada kesimpulan ini. Masalah yang saya miliki dengan mereka adalah mereka dapat menyebabkan logika bisnis berakhir di dua lokasi, perpustakaan kode dan database.

Saya melihatnya sebagai argumen yang mirip dengan menggunakan sprocs. Anda akan sering memiliki pengembang yang benar-benar pandai menulis logika bisnis SQL ke dalam database, sementara orang yang tidak akan memiliki logika bisnis mereka di tempat lain.

Jadi aturan saya adalah melihat apa struktur proyek Anda. Jika tampaknya layak untuk memiliki logika bisnis yang disimpan dalam database maka mungkin bermanfaat untuk memiliki pemicu.

Aaron Powell
sumber
1

Memang, cukup sering pemicu disalahgunakan. Sebenarnya dalam kebanyakan kasus Anda bahkan tidak membutuhkannya. Tetapi itu tidak membuat mereka selalu buruk.

Skenario yang muncul di benak saya di mana pemicu berguna adalah ketika Anda memiliki aplikasi lawas yang tidak memiliki kode sumbernya dan tidak ada cara untuk mengubahnya.

ibz
sumber
1

Gagasan pemicu bukanlah kejahatan, membatasi bersarangnya pemicu adalah kejahatan.

alpav
sumber