ํธ๋ฆฌ๊ฑฐ
ํธ๋ฆฌ๊ฑฐ
- ๋ช ์๋ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋๋ง๋ค DBMS๊ฐ ์๋์ผ๋ก ์คํํ๋ (์ฌ์ฉ์๊ฐ ์ ์ํ๋) ํ๋ก์์
- DB์ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ๋๊ตฌ
- ํ ์ด๋ธ ์ ์์ ํํํ ์ ์๋ ๊ธฐ์ ์ ๋น์ฆ๋์ค ๊ท์น์ ์ํํ๋ ์ญํ
- DB ๊ฐฑ์ ๋ชจ๋ํฐ๋ง -> DB ๊ฐฑ์ ์ ํ์ ๊ณผ์ ์ ๊ฑฐ์นจ
ํธ๋ฆฌ๊ฑฐ = '์ด๋ฒคํธ-์กฐ๊ฑด-๋์(ECA) ๊ท์น'
- E[Event] : ํธ๋ฆฌ๊ฑฐ๋ฅผ ํ์ฑํ ์ํค๋ ์ฌ๊ฑด(INSERT, DELETE, UPDATE)
- C[Condition] : ํธ๋ฆฌ๊ฑฐ๊ฐ ํ์ฑ๋์์ ๋ ํ์ธํ๋ ์กฐ๊ฑด(WHERE ๋ฌธ์ ์ฐ์ด๋ ๋ชจ๋ ์กฐ๊ฑด๋ฌธ)
- A[Action] : Condition์ด ์ฐธ์ด๋ฉด ์ํ๋๋ SQL๋ฌธ
์ฃผ์ํ ์
- ํธ๋ฆฌ๊ฑฐ๋ฅผ ๊ณผ๋ํ๊ฒ ์ฌ์ฉํ๋ฉด ๋ณต์กํ ์ํธ์์กด์ฑ ์ผ๊ธฐ
- ํธ๋ฆฌ๊ฑฐ์ ์ฐ์ ์ํ์ด ์ผ์ด๋ ์ ์์
Ex)
CREATE TRIGGER RAISE_SALARY
AFTER INSERT ON EMPLOYEE
REFERENCING NEW AS newEmployee
FOR EACH ROW
WHEN (newEmployee.SALARY < 1500000)
UPDATE EMPLOYEE
SET newEmployee.SALARY = SALARY * 1.1
WHERE EMPNO = newEmployee.EMPNO;
- ์๋ก์ด ์ฌ์ ์ถ๊ฐ์, ๊ธ์ฌ๊ฐ 1500000 ์ดํ๋ฉด ๊ธ์ฌ 10% ์ธ์
์ฃผ์ฅ
์ฃผ์ฅ
- ํธ๋ฆฌ๊ฑฐ์ ๋ค๋ฅด๊ฒ, ์ ์ฝ์กฐ๊ฑด์ ์๋ฐฐ๋๋ ๊ฒฝ์ฐ ์๋ฐํ๋ ์ฐ์ฐ์ด ์คํ๋์ง ์๋๋ก ํจ
- ์ฃผ์ฅ์ DB๊ฐ ๋ง์กฑํ๊ธธ ๋ฐ๋ผ๋ ์กฐ๊ฑด์ ์ง์ ์ ์ผ๋ก ํํ
- ๋ง์ฝ ์ฃผ์ฅ์ ์กฐ๊ฑด์ ๊ฒ์ฌํ์ฌ ์ฐธ์ด๋ฉด ์์ ํ์ฉ
Ex)
CREATE ASSERTION EnrollStudentIntegrity
CHECK (NOT EXISTS
(SELECT *
FROM ENROLL
WHERE STNO NOT IN
(SELECT STNO FROM STUDENT));
- STUDENT์ ์๋ ํ์์ ํ๋ฒ์ด ENROLL ๋ฆด๋ ์ด์ ์ ๋ํ์ง ์๋๋ก ํจ
- ์ฃผ์ฅ ์ ์ธ ๋ฌธ์ ํญ์ NOT EXISTS๋ฅผ ํฌํจํด์ผํจ(๋ฌด์์ธ๊ฐ ๋ง์กฑํ๋ A๊ฐ ์กด์ฌํ์ง ์์)
- STUDENT์ ์๋ ENROLL์ ํฌํ์ด ์กด์ฌํ์ง ์์์ผํจ