WITH clause
-유저에게 특정 쿼리에서만 사용할 수 있는 임시테이블을 정의할 수 있게 도와준다
-뷰와 비슷한 기능을 가진다
-SQL쿼리가 끝나면 사라진다
-SQL:99에 첨가된 기능이며 모든 dbms가 제공하는 기능은 아니다
CASE construct
질의어, insert, update등 값이 들어가는곳에는 모두 이용가능
원래라면 여러개의 update쿼리를 만들어야 하지만 CASE문으로 한꺼번에 해결이 가능하다.
Recursive Queries in SQL
-재귀 (순환구조를 갖는다)
단점
-유저를 헷갈리게 만듬
-이상적으로,동의한 질이어는 똑같은 방법으로 수행되어야한다(그러나 실제로는 어려움)
-그렇기 때문에 상용 DBMS는 SQL을 효율적으로 처리할 수 있는 Query형태를 유저에게 제공해준다.
Specifying Constraints as Assertions and Triggers
-CREATE ASSERTION, CHECK를 이용하여 제약을 걸어준다.
-CHECK안의 결과가 TRUE여야한다.
-쿼리결과가 빈결과가 아니면 위배가 되기 때문에 error 조치를 취해준다
Domains, attributes , tuples의 CHECK 문
-update되거나 insert될때만 SQL에서 체크한다.
-CREATE ASSERTION은 관련된 tuple이 업데이트 될때마다 CHECK를 한다. 그렇기 때문에 Schema를 설계하는 사람은 가능하면 CHECK문을 쓰고 어쩔 수 없는 경우에만 ASSERTION문을 쓴다
SQL Triggers
-Assertion의 제약조건을 위배할때 대응 조치를 명세
목적: Database를 모니터링 하다가 사용자가 지정한 조건이 발생하면 조치를 취한다.
트리거는 Assertion과 비슷한 문법을 가진다
-이벤트 발생
-조건
-조치(조건 만족하면 발생)
ECA Rule이라고도 부른다
SQL Trigger 예시
-BEFORE,AFTER로 연산 전후로 CHECK하는 것이 가능하다.
-WHEN : 어떤 조건 발생할때
-New.Salary : 새로생기는 tuple
-INFORM_SUPERVISOR => User가 정의한 SQL함수로써 어떤 조치를 취해준다
-BEFOR문 ( Event), WHEN (Condition), INFORM함수(Action) => ECA
-Trigger들은 일관성,monitoring,수정에 가장 많이 이용된다.
-Active database(트리거가 잘 적용되어 있는 DB)
SQL의 View
View를 이용하면 데이터의 중복도 줄이면서 편리함을 이용할 수 있다.
데이터가 저장된 base tables 또는 정의된 또다른 view로 부터 유도된 것을 View라고 한다
-가상 테이블
-업데이트 작업의 제약존재
-검색 작업엔 제약 없음
뷰의 장점
-쿼리를 쉽게 표현할 수 있게 도와준다
-보안과 권한부여 역할도 한다
-항상 업데이트가 된다
뷰는 항상 최신데이터를 반영한다
DBMS가 업데이트를 해주며 유저의 책임이 없다
문제점 : Base table이 update될 시 view값이 update가 안되는 문제가 발생한다.
해결 방법 : view에 flag를 두어 update가 되었다면 일시적 뷰를 지우고, 새로운 view를 생성해서 이용한다.
새로운 방법 점진적 갱신
-base table이 수정되면 일시적 뷰도 수정해준다
-뷰가 일정시간 사용되지 않는다면 그 물리적 뷰를 지우고, 주기적으로 새로운 view table을 만든다.
view 갱신
일반적으로 View에 대한 갱신은 집단함수가 적용되지 않은 단일 테이블에 대해서만 가능하다.
-table의 column들만 뽑아서 view를 생성 (PK가 포함되 있다면 완전한 모든 갱신 가능)
-table의 조건을 주어 row만 뽑아서 view를 생성
join view : 여러개의 table을 join해서 만든 view(join table이므로 어떤 table에 update해줘야 하는지 혼란을 가져올 수 있다)
일반적으로 dbms는 Column subset view, Row subset View 두개에만 업데이트를 허용한다. ( 나머지는 금지)
요약
-pk를 포함한 column subset view 같이 단일 정의된 뷰는 업데이트가 가능하다
-join을 통해 생성된 view는 업데이트 불가능하다
-grouping이나 집단함수가 사용된 경우도 불가능하다
-WITH CHECK OPTION
view를 정의할때 view 정의에 어긋난 연산은 허용하지 않겠다 ( 사용자 정의)
SQL 쿼리의 권한 문
-GRANT : 권한 부여
-REVOKE : 권한 가져오기
권한없는 유저에게 특정 튜플인 어트리뷰트에 대한 정보를 숨길 수 있다
특정 columns만 볼 수 있게 제한할 수 있다.
적당한 뷰를 정의함 으로써 볼 수 있는 권한을 제한시키는 장점이 있다.
'Database' 카테고리의 다른 글
DATABASE 3장 (0) | 2020.10.10 |
---|---|
Database 8장 (0) | 2020.10.10 |
DATABASE 7장 (0) | 2020.09.26 |
Database 6장-2 (0) | 2020.09.19 |
Database 6장-1 (0) | 2020.09.11 |