[๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค] ํŠธ๋ฆฌ๊ฑฐ์™€ ์ฃผ์žฅ

ํŠธ๋ฆฌ๊ฑฐ


ํŠธ๋ฆฌ๊ฑฐ

  • ๋ช…์‹œ๋œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ๋งˆ๋‹ค 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์˜ ํˆฌํ”Œ์ด ์กด์žฌํ•˜์ง€ ์•Š์•„์•ผํ•จ