MAKALAH

SESI#11

Trigger

Dosen Pengampu



Disusun Oleh :

Nama : Reza Fahmi Alkhamdani    24781053


Tanggal Penyerahan

25 Mei 2026

 

JURUSAN TEKNOLOGI INFORMASI

PROGRAM STUDI MANAJEMEN INFORMATIKA

POLITEKNIK NEGERI LAMPUNG

2026



KATA PENGANTAR

Puji syukur penulis panjatkan ke hadirat Tuhan Yang Maha Esa atas segala rahmat dan karunia-Nya sehingga makalah yang berjudul "Implementasi Database Trigger pada SQL Server: Migrasi, Audit Trail, dan Validasi Data" ini dapat diselesaikan dengan baik.

Makalah ini disusun sebagai bentuk pertanggungjawaban akademik atas pelaksanaan Praktikum Pemrograman SQL 2 Sesi #11 yang membahas konsep dan implementasi trigger pada sistem manajemen basis data, khususnya dalam konteks migrasi dari SQLite ke SQL Server menggunakan Microsoft SQL Server Management Studio (SSMS).

Penulis menyadari bahwa makalah ini masih jauh dari kesempurnaan. Oleh karena itu, segala kritik dan saran yang bersifat membangun sangat diharapkan demi perbaikan di masa mendatang. Semoga makalah ini dapat memberikan manfaat bagi pembaca, khususnya dalam memahami penerapan database trigger untuk keperluan audit, validasi, dan keamanan data.

 

Bandar Lampung, 25 Mei 2026

 

Penulis


 

BAB I

PENDAHULUAN

 

1.1 Latar Belakang

Dalam dunia pengelolaan basis data modern, kebutuhan akan keamanan, konsistensi, dan integritas data menjadi semakin krusial. Berbagai sistem informasi akademik, keuangan, maupun industri menuntut mekanisme otomatis yang dapat memantau setiap perubahan data secara real-time tanpa bergantung pada intervensi manual dari pengguna atau pengembang aplikasi.

Salah satu fitur unggulan yang dimiliki oleh sistem manajemen basis data relasional (RDBMS) untuk menjawab kebutuhan tersebut adalah database trigger. Trigger merupakan prosedur tersimpan yang dieksekusi secara otomatis sebagai respons atas peristiwa manipulasi data tertentu, yaitu INSERT, UPDATE, maupun DELETE. Dengan memanfaatkan trigger, pengembang dapat membangun sistem audit trail yang mencatat seluruh riwayat perubahan data, menerapkan validasi bisnis yang ketat, serta melindungi integritas referensial basis data.

Tantangan yang kerap muncul dalam praktik nyata adalah ketika suatu sistem yang awalnya dikembangkan menggunakan SQLite harus dimigrasikan ke platform yang lebih tangguh seperti Microsoft SQL Server. Kedua sistem basis data ini memiliki sintaks dan mekanisme trigger yang berbeda secara mendasar, mulai dari urutan penulisan perintah, penggunaan tabel virtual untuk membaca nilai lama dan baru, hingga cara membatalkan transaksi yang tidak valid.

Makalah ini disusun untuk memaparkan secara sistematis pengalaman praktis dalam mengimplementasikan database trigger pada SQL Server, menganalisis perbedaan sintaksnya dengan SQLite, serta mengevaluasi hasil implementasi audit trail dan validasi data yang telah dilakukan dalam sesi praktikum ke-11 mata kuliah Pemrograman SQL 2.

1.2 Rumusan Masalah

Berdasarkan latar belakang di atas, rumusan masalah dalam makalah ini adalah:

        Apa perbedaan mendasar antara sintaks trigger pada SQLite dan SQL Server (T-SQL)?

        Bagaimana cara mengimplementasikan trigger untuk keperluan audit trail (AFTER INSERT, AFTER UPDATE, AFTER DELETE) pada SQL Server?

        Bagaimana mekanisme validasi dan pembatalan transaksi menggunakan trigger BEFORE pada SQLite dan padanannya di SQL Server?

        Apa keunggulan penggunaan trigger pada SQL Server dibandingkan pendekatan manual dalam menjaga integritas data?

1.3 Tujuan Penulisan

Tujuan penulisan makalah ini adalah:

        Menganalisis perbandingan struktural penggunaan perintah trigger sewaktu melakukan migrasi basis data dari lingkungan SQLite menuju SQL Server.

        Mempraktikkan pembuatan database trigger untuk mendeteksi perubahan data baru maupun data lama melalui manipulasi tabel virtual internal SQL Server.

        Mengembangkan aturan validasi data yang ketat guna menolak modifikasi ilegal pada tabel menggunakan fungsi kontrol pembatalan transaksi.

        Merancang sistem audit trail otomatis yang mendata seluruh rekam jejak aktivitas pengguna terhadap integritas data basis data.


 

BAB II

TINJAUAN PUSTAKA

 

2.1 Konsep Dasar Trigger

Trigger adalah objek basis data yang berupa prosedur khusus yang terikat pada sebuah tabel dan dipicu secara otomatis oleh sistem manajemen basis data (DBMS) ketika terjadi operasi manipulasi data tertentu. Berbeda dengan stored procedure biasa yang harus dipanggil secara eksplisit, trigger bekerja secara implisit sebagai respons atas peristiwa (event) yang telah didefinisikan.

Secara konseptual, trigger terdiri dari tiga komponen utama: (1) Event, yaitu peristiwa pemicu berupa operasi INSERT, UPDATE, atau DELETE; (2) Condition, yaitu kondisi opsional yang harus terpenuhi agar aksi trigger dieksekusi; dan (3) Action, yaitu serangkaian perintah SQL yang akan dijalankan ketika trigger aktif.

Manfaat utama penggunaan trigger dalam pengelolaan basis data antara lain adalah kemampuan audit otomatis yang mencatat setiap perubahan data tanpa memerlukan modifikasi kode aplikasi, validasi bisnis tambahan di level basis data, serta sinkronisasi antar tabel secara transparan.

2.2 Jenis-Jenis Trigger

Berdasarkan waktu eksekusinya relatif terhadap event pemicu, trigger dibagi menjadi dua kategori utama:

BEFORE Trigger (Trigger Sebelum): Trigger jenis ini dieksekusi sebelum operasi data benar-benar dilakukan pada tabel. Kegunaannya yang utama adalah untuk validasi data, di mana trigger dapat memeriksa apakah nilai yang akan dimasukkan atau diubah memenuhi aturan bisnis tertentu, dan jika tidak memenuhi syarat, trigger dapat membatalkan operasi tersebut. Pada SQLite, pembatalan dilakukan dengan fungsi RAISE(ABORT, 'pesan'), sedangkan pada SQL Server menggunakan ROLLBACK TRANSACTION dikombinasikan dengan THROW.

AFTER Trigger (Trigger Setelah): Trigger ini dieksekusi setelah operasi data berhasil dilakukan. Penggunaannya yang paling umum adalah untuk keperluan audit trail, yaitu mencatat rekam jejak perubahan data ke dalam tabel log setelah operasi INSERT, UPDATE, atau DELETE berhasil dikerjakan.

2.3 Perbedaan Sintaks SQLite dan SQL Server

Meskipun konsepnya serupa, implementasi trigger antara SQLite dan SQL Server (T-SQL) memiliki sejumlah perbedaan mendasar yang perlu dipahami dalam proses migrasi basis data, sebagaimana dirangkum dalam tabel berikut:

BAB III

PEMBAHASAN

 

3.1 Alat dan Bahan

Praktikum ini dilaksanakan dengan menggunakan perangkat dan bahan sebagai berikut:

        Perangkat keras: Laptop dengan spesifikasi yang memadai untuk menjalankan aplikasi manajemen basis data.

        Sistem operasi: Windows.

        Perangkat lunak: Microsoft SQL Server Management Studio (SSMS) sebagai antarmuka utama untuk menulis, mengeksekusi, dan mengelola skrip T-SQL.

        Basis data akademik yang telah disediakan sebagai objek uji coba, meliputi tabel mahasiswa, dosen, dan tabel pendukung lainnya.

        Panduan materi praktikum Modul 11 yang diterbitkan melalui platform LMS Polinela.

3.2 Prosedur Kerja

Praktikum dilaksanakan melalui serangkaian langkah kerja yang sistematis sebagai berikut:

Langkah pertama adalah Inisialisasi Lingkungan Kerja, yaitu membuka program SQL Server Management Studio (SSMS) dan mengaktifkan basis data akademik yang menjadi objek uji coba. Pada tahap ini, koneksi ke server basis data dipastikan berjalan dengan baik sebelum eksekusi skrip dimulai.

Langkah kedua adalah Identifikasi Kendala Perintah (Debugging). Pada tahap ini, pesan kesalahan (error messages) dari skrip trigger SQLite lama ditelaah secara cermat untuk memetakan bagian sintaks yang tidak kompatibel dengan lingkungan SQL Server. Ini merupakan tahap analisis perbedaan platform yang krusial.

Langkah ketiga adalah Rekonstruksi Kode ke Standar T-SQL, yaitu menyusun ulang logika trigger audit dan validasi data dengan memanfaatkan tabel memori inserted serta deleted, disertai penggantian operator penyambung teks dari simbol || menjadi tanda tambah (+) sesuai standar T-SQL.

Langkah keempat adalah Sinkronisasi Atribut Tabel, yaitu memeriksa kesesuaian nama-nama kolom basis data (seperti memetakan kolom idprodi dan kolom log yang valid) guna menghindari error invalid column name saat kompilasi.

Langkah kelima adalah Kompilasi dan Validasi Akhir, yaitu menjalankan perintah pembuatan trigger satu per satu di lembar kerja SSMS guna memastikan seluruh rangkaian pengaman basis data terpasang sempurna tanpa tanda merah (error).

3.3 Implementasi Trigger

Implementasi trigger dalam praktikum ini mencakup tujuh level dengan kompleksitas yang meningkat secara bertahap.

3.3.1 Level 1 – AFTER INSERT (Audit Data Baru)

Trigger AFTER INSERT berfungsi untuk mencatat setiap data baru yang berhasil ditambahkan ke tabel ke dalam tabel audit_log. Pada SQL Server, nilai data baru yang baru saja disisipkan dapat dibaca dari tabel virtual inserted. Contoh implementasi pada tabel mahasiswa:

CREATE TRIGGER trg_log_insert_mhs

ON mahasiswa

AFTER INSERT

AS BEGIN

  INSERT INTO audit_log (tabel, aksi, npm, dilakukan_pada)

  SELECT 'mahasiswa', 'INSERT', npm, GETDATE()

  FROM inserted;

END;

Hal yang sama juga diterapkan pada tabel dosen dan variasi dengan cara menggabungkan (konkatenasi) beberapa kolom menggunakan operator + untuk menghasilkan nilai audit yang lebih informatif.

3.3.2 Level 2 – AFTER UPDATE (Audit Perubahan Nilai)

Trigger AFTER UPDATE digunakan untuk merekam nilai sebelum dan sesudah terjadi perubahan. Nilai lama dibaca dari tabel deleted, sedangkan nilai baru dibaca dari tabel inserted. Trigger ini diterapkan pada kolom IPK, status akademik, dan data dosen. SQL Server menyediakan fungsi IF UPDATE(nama_kolom) yang memungkinkan trigger hanya aktif ketika kolom tertentu yang dibidik benar-benar mengalami perubahan, sehingga efisiensi performa basis data meningkat.

CREATE TRIGGER trg_log_update_ipk

ON mahasiswa

AFTER UPDATE

AS BEGIN

  IF UPDATE(ipk)

  BEGIN

    INSERT INTO audit_log (tabel, aksi, npm, nilai_lama, nilai_baru, dilakukan_pada)

    SELECT 'mahasiswa', 'UPDATE', i.npm,

           CAST(d.ipk AS VARCHAR), CAST(i.ipk AS VARCHAR), GETDATE()

    FROM inserted i

    JOIN deleted d ON i.npm = d.npm;

  END

END;

3.3.3 Level 3 – AFTER DELETE (Snapshot Data Terhapus)

Trigger AFTER DELETE bertugas menyimpan salinan (snapshot) data yang dihapus agar dapat diakses kembali apabila diperlukan untuk keperluan audit atau pemulihan. Pada trigger ini, seluruh nilai baris yang dihapus dapat dibaca dari tabel deleted sebelum benar-benar hilang dari tabel utama.

3.3.4 Level 4 – WHEN (Trigger Kondisional)

Trigger kondisional menambahkan logika pemilahan di dalam body trigger, sehingga aksi audit hanya dilakukan ketika kondisi tertentu terpenuhi. Ini berbeda dengan IF UPDATE() yang memeriksa apakah kolom tertentu diperbarui; WHEN memungkinkan pengecekan terhadap nilai aktual data, misalnya hanya mencatat ke log jika nilai IPK yang diperbarui turun di bawah ambang batas tertentu.

3.3.5 Level 5 – BEFORE + RAISE (Validasi Data)

Pada SQLite, validasi dilakukan menggunakan BEFORE trigger dengan fungsi RAISE(ABORT, 'pesan') untuk membatalkan operasi sebelum data tersimpan. Padanan fungsionalnya di SQL Server adalah menggunakan AFTER trigger dengan perintah ROLLBACK TRANSACTION untuk membatalkan transaksi yang sedang berjalan, dikombinasikan dengan THROW untuk menampilkan pesan kesalahan kustom kepada pengguna.

CREATE TRIGGER trg_validasi_ipk

ON mahasiswa

AFTER UPDATE

AS BEGIN

  IF EXISTS (SELECT 1 FROM inserted WHERE ipk > 4.0)

  BEGIN

    ROLLBACK TRANSACTION;

    THROW 50001, 'IPK tidak boleh melebihi 4.0', 1;

  END

END;

3.3.6 Level 6 – Body Multi-Statement

Pada level ini, trigger dirancang untuk menjalankan lebih dari satu aksi dalam satu blok eksekusi. Misalnya, setelah terjadi INSERT data mahasiswa baru, trigger dapat sekaligus mencatat ke audit_log, memperbarui tabel rekap jumlah mahasiswa per program studi, dan mengirimkan notifikasi ke tabel antrian proses. Kemampuan multi-statement ini menjadikan trigger sebagai alat orkestrasi logika bisnis yang sangat fleksibel.

3.3.7 Level 7 – Tugas Mandiri

Pada level mandiri, seluruh konsep yang telah dipelajari digabungkan untuk membangun sistem trigger terpadu yang mencakup AFTER INSERT, AFTER UPDATE/DELETE, BEFORE + RAISE (diadaptasi ke SQL Server), serta kombinasi WHEN dengan Multi-statement. Sistem ini mensimulasikan kondisi nyata pengelolaan basis data akademik yang memerlukan audit trail menyeluruh dan validasi integritas data yang ketat.

3.4 Analisis Hasil Praktikum

Berdasarkan pelaksanaan praktikum, diperoleh beberapa temuan analitis penting yang merupakan pelajaran berharga dalam proses migrasi dan implementasi trigger antar platform basis data.

Pertama, mengenai Arah Eksekusi dan Iterasi. Urutan penulisan sintaks diubah dari pola SQLite yaitu AFTER/BEFORE [AKSI] ON [tabel] menjadi pola SQL Server yaitu ON [tabel] AFTER [AKSI]. Selain itu, klausa FOR EACH ROW milik SQLite dihapus karena SQL Server secara otomatis memproses seluruh baris data sekaligus (set-based processing), yang pada banyak kasus justru lebih efisien untuk operasi massal.

Kedua, mengenai Peralihan Tabel Memori Virtual. Variabel OLD pada SQLite dipetakan ke tabel virtual deleted pada SQL Server, sedangkan variabel NEW dipetakan ke tabel virtual inserted. Untuk keperluan perbandingan nilai sebelum dan sesudah perubahan (pada trigger AFTER UPDATE), kedua tabel ini dihubungkan menggunakan operasi JOIN berdasarkan kunci utama tabel.

Ketiga, mengenai Mekanisme Penolakan Transaksi. Fungsi RAISE milik SQLite tidak dikenal di SQL Server. Padanannya adalah kombinasi dua perintah: ROLLBACK TRANSACTION untuk membatalkan seluruh transaksi yang sedang berjalan, dan THROW untuk menampilkan pesan peringatan kustom yang informatif kepada pengguna maupun aplikasi klien.

Keempat, mengenai Efisiensi Validasi Kolom. Fitur IF UPDATE(nama_kolom) yang disediakan SQL Server terbukti mengoptimalkan beban kerja basis data, karena trigger hanya akan diaktifkan apabila kolom yang dituju memang mengalami perubahan nilai. Ini mencegah eksekusi trigger yang tidak perlu saat operasi UPDATE menyentuh kolom yang tidak relevan dengan logika bisnis yang dijaga.

Rekap hasil keseluruhan praktikum menunjukkan performa yang sangat baik, dengan skor total 96 dari 100. Dari 22 task yang diberikan, 21 task berhasil diselesaikan dengan status Lulus pada percobaan pertama hingga beberapa percobaan. Satu-satunya task yang belum berhasil diselesaikan adalah Level 4 Task 3 (WHEN pada DELETE) dengan skor 25, yang menunjukkan perlunya pemahaman lebih mendalam tentang trigger kondisional untuk operasi DELETE.


 

BAB IV

PENUTUP

 

4.1 Kesimpulan

Berdasarkan hasil pelaksanaan praktikum dan pembahasan yang telah diuraikan, dapat ditarik beberapa kesimpulan sebagai berikut:

Pertama, terdapat Ketidakcocokan Sintaks yang Mendasar. Skrip trigger yang ditulis menggunakan sintaks SQLite tidak dapat dijalankan secara langsung di lingkungan SQL Server (SSMS). Perbedaan utama mencakup pola urutan perintah (ON ... AFTER vs AFTER ... ON), penghapusan klausa FOR EACH ROW, tidak dikenalnya operator penyambung teks ||, dan perbedaan nama tabel virtual (OLD/NEW vs deleted/inserted).

Kedua, SQL Server menawarkan Keunggulan Fitur T-SQL yang signifikan. Kemampuan pemrosesan massal berbasis set (set-based processing) melalui tabel virtual inserted dan deleted memungkinkan trigger bekerja lebih efisien untuk operasi yang melibatkan banyak baris data sekaligus. Fungsi IF UPDATE() memberikan kontrol granular atas kondisi aktivasi trigger, sementara kombinasi ROLLBACK TRANSACTION dan THROW menyediakan mekanisme pembatalan transaksi dan pelaporan kesalahan yang terstruktur.

Ketiga, Trigger merupakan Komponen Vital Keamanan Basis Data. Implementasi trigger secara terpadu — mulai dari audit trail otomatis untuk INSERT/UPDATE/DELETE, trigger kondisional berbasis nilai data, hingga validasi integritas yang memblokir data tidak valid — membangun lapisan keamanan yang kokoh di level basis data, terlepas dari logika yang diterapkan di sisi aplikasi.


AFTER INSERT (Mahasiswa)

AFTER INSERT (Dosen)

AFTER INSERT (Konkat NEW)

AFTER UPDATE (ipk)

AFTER UPDATE (Status)

AFTER UPDATE (Dosen)

AFTER DELETE (Mahasiswa)

AFTER DELETE (Dosen)

AFTER DELETE (Snapshot kombinasi)

WHEN Pada INSERT

WHANE Pada UPDATE

BEFORE INSERT (Validasi)

BEFORE UPDATE (Validasi)

BEFORE DELETE (Proteksi)

Body Multi-Statment (INSERT)

Body Multi-Statment (UPDATE )

Body Multi-Statment (DELETE )

Tugas Mandiri (AFTER INSERT)

Tugas Mandiri (AFTER UPDATE/DELETE)

Tugas Mandiri (BEFORE + RAISE)

Tugas Mandiri (Kombinasi WHEN + Multi-statment)

 

Komentar

Postingan populer dari blog ini