sql-trigger-la-gi-database-trigger-la-gi

SQL trigger là gì? – Ưu, nhược điểm

DB

Đầu tiên, đơn giản nhất để nhớ SQL Trigger (hay còn gọi là Database Trigger) ta cần tập trung vào từ trigger. Trigger mang ý nghĩa là cò súng. Mà có súng thì bóp là sẽ bắn, nhanh nhạy như cò súng.

Đây là Trigger – cái có súng. Kéo cò là đùng, database cũng vậy, liên tưởng là dễ

Tại sao mình lại lấy ví dụ như vậy?.

Bản thân mình nghĩ, kiến thức có thể được thu nạp theo nhiều cách. Tuy nhiên cách nào dễ dàng nhất thì chọn, chứ không nhất thiết phải là định khô khan, loằng ngoằng. Cùng bắt đầu với định nghĩa miệng đã nhé!

1. SQL Trigger là gì?

SQL Trigger (hay Database Trigger) là một dạng Store Procedure đặc biệt được chạy khi có một hành động cụ thể nào đó xảy ra trong cơ sở dữ liệu.

Ví dụ, khi bóp cò súng, tất nhiên cò súng sẽ đập vào đầu kích hỏa của viên đạn, đốt cháy, kích hoạt thuốc nổ và phóng viên đạn đi. Đó chính là cơ chế đơn giản và dễ nhớ của SQL Trigger (hoặc Database Trigger).

Hầu hết các trigger được thiết lập trong database đều sử dụng để bắt các sự kiện tới từ DML (Data Manipulation Language), bao gồm INSERT, UPDATE, DELETE.

Đấy. chỉ dễ hiệu vậy thôi. Trigger trong DB là để bắt sự kiện, các DML (như là bóp cò), còn những gì tiếp theo trigger làm (là đạn nổ, bay đi, trúng thằng ngáo ngơ nào đấy, …)

Thật là EASY FOR ENCE!

2. Ưu nhược điểm

2.1 Ưu điểm

Triggers can be used as an alternative method for implementing referential integrity constraints

Triggers có thể được sử dụng thay thế cho ràng buộc toàn vẹn trong hệ cơ sở dữ liệu (referential integrity constraints)

Ở một số dự án liên quan tới bank hay tài chính, triggers còn quy định được những thao tác nào được phép đối với hệ cơ sở dữ liệu.

SQL Trigger create in oracle
Ví dụ về khởi tạo Trigger với PL/SQL. Insert thông tin cũ của nhân viên vào bảng audit sau khi cập nhật Salaray
Nguồn ảnh / Source: docs.oracle.com

Ví dụ, bảng amout (số dư) chỉ được phép INSERT, UPDATE, tuyệt đối không được DELETE.

Ưu điểm nữa của SQL Trigger là nó có thể gọi tới Store Procedure. Khúc này bạn nào viết Store Procedure nhiều sẽ hiểu rõ.

Ví dụ, nếu một dòng trong bảng thông tin nhà đất được thêm, Store procedure sẽ khởi chạy để truy tìm lịch sử, đưa ra giá mặt bằng chung khu đó, lịch sử giao dịch, …

Thay vì phải xử lí logic này ở Backend, ta chỉ cần tạo Trigger cho trường hợp có dòng mới được INSERT vào bảng.

Triggers are used for calling stored procedures.

Triggers có thể sử dụng để gọi Stored Procedures.

Thêm nữa, với trigger được thiết lập trên toàn database, sẽ đỡ “tốn công nhọc sức” đi update một cái gì đó trên DB. Cái cò “triggers” sẽ làm hết.

When a change happens in a database a trigger can adjust the change to the entire database.

Khi có gì đó thay đổi trên database, trigger có thể thực hiện hoặc áp dụng thay đổi đó cho toàn bộ hệ cơ sở dữ liệu.
Hầu hết các hệ cơ sở dữ liệu hiện này đều hỗ trợ truy xuất thông tin cụ thể của Trigger.
Nguồn ảnh / Source: docs.oracle.com

2.2 Nhược điểm

THỨ NHẤT, performance – cái thường bị nói nhiều nhất. Tất nhiên, cũng phải nói rõ rằng ta chỉ bàn tới hiệu suất khi bảng có tới khoảng 2,000,000 records. Chứ 100 hay mấy trăm nghìn thì thôi nha.

THỨ HAI, khó để biết có gì trong Database Trigger. Phải nói là cực kì khó để hiểu được cái trigger đó được cài ở bảng nào, làm gì?.

Làm việc với Database, tất nhiên bạn nào cũng sẽ biết xem ràng buộc (constrains), synonym hoặc views. Tất nhiên là trigger dễ hiểu, nhưng ngồi đọc source thì rất mất thời gian. Các dự án maintainance nếu có triggers thì thường sẽ yêu cầu có mô tả cụ thể về SQL Triggers.

It is hard to follow their logic as it they can be fired before or after the database insert/update happens.

Thiệt là khó vãi nồi khi muốn hiểu xem cái ông trước đây tạo ra cái trigger làm méo gì?. Đọc souce SQL thì rất mất thời gian. Điểm trừ to đùng.

THỨ BA, nếu không chú ý, dễ dàng quên cmn mất là có trigger.

It is easy to forget about triggers and if there is no documentation it will be difficult to figure out for new developers for their existence.

Rất dễ để quên đi dăm ba cái triggers được cài ở đâu đó trong database (nếu không có document mô tả rõ ràng)

CUỐI CÙNG,

Triggers run every time when the database fields are updated and it is overhead on system. It makes system run slower.

Triggers chạy mỗi khi một field nào đó trong database update và nó nằm trên DB system. Sử dụng quá nhiều trigger trên hệ cơ sở dữ liệu có thể làm giảm hiệu năng.

3. Khi nào nên sử dụng SQL Trigger?

Ra ngoài làm, một số dự án mình thấy họ không hề sử dụng SQL Trigger. Mọi thứ liên quan tới ràng buộc hay xử lí sự kiện ở các bảng đều thực hiện ở phần logic. Phía database chỉ có constraint (ràng buộc), null, not null hoặc cặp primary key.

Cũng dễ để mà giải thích, dự án kiểu này thường được viết document kĩ càng, nếu chia phần logic thành 2 phần là xử lí Java (Backend) và phần handle ở SQL Trigger thì thật sự là rối rắm.

Việc sử dụng SQL Trigger (hay Database Trigger) đòi hỏi cần có kinh nghiệm, có thể ước lượng độ lớn của dữ liệu. Biết lúc nào nên dùng, lúc nào không. Trường hợp có sử dụng trigger, cần bổ sung tài liệu, mô tả chi tiết. Lời khuyên của mình là càng chi tiết càng tốt. Kẻo thằng dev sau đi maintainance nó lại chửi cho SML.

Tất nhiên, nói đi cũng phải nói lại, nếu sử dụng đúng lúc, đúng với chức năng, SQL Trigger giúp hạn chế viết code (khởi tạo đúng giúp hạn chế sai sót).

Hết rồi, chào thân ái và quyết thắng. Tham khảo thêm một số link phía dưới

Anh em nhớ nghiên cứu đánh giá đúng rồi dùng Trigger nha. Cẩn thận fail như này (coi giải trí nha)

NHỚ LIKE PAGE ĐỂ KHÔNG BỎ LỠ BÀI VIẾT MỚI NHA – MERCI

4. Tham khảo

Nếu hay thì nhớ like và share bài viết Facebook nha!

Có gì thắc mắc cứ comment đây nha! - Please feel free to comment here!
Chia sẻ bài viết


Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *