8장: SQL 추가 개념

시스템 카탈로그

데이터 객체에 대한 정보들을 유지,관리하기 위한 시스템 데이터베이스

데이터 객체: 테이블, 뷰, 인덱스 등

데이터 사전이라고도 함, 카탈로그에 저장된 정보를 메타 데이터라고도 함

카탈로그를 갱신하는 것은 허용되지 않음

DBMS가 스스로 생성하고 유지함


Authorization

Select,Insert,Update,Delete 권한 부여 <데이터 변경>

Index,Resources,Alteration,Drop 권한 부여 <스키마 자체 변경>

Index: 인덱스를 새로 만들거나 삭제
Resources: 새로운 릴레이션을 생성
Alteration: 릴레이션에서 속성을 추가하거나 삭제
Drop: 릴레이션을 삭제

autholization graph

항상 DBA로부터 권한 주는 것이 시작된다.

권한을 받은 유저는 다른 유저에게 권한을 줄 수도 있다.

– 만약 DBA가 U1에게 권한을 뺐으면??

 -> U4의 권한도 없어진다. (U5같은 경우, U2에서 받은 권한이 유효되므로 권한을 갖고 있음)


권한 부여 명령어

모든 유저에게 권한을 줄 때는 ‘public’ 키워드를 이용한다.

(예시)

u1,u2,u3유저에게 branch릴레이션에 대한 검색 권한을 줌
select자리에는 (insert,update,delete,references,all privileges)명령어가 들어갈 수 있음
references: 외래키를 선언하는 권한, all privileges: 모든 권한

u1에게 권한을 주고 u1도 다른 유저에게 권한을 줄 수 있게 함 (select 한정)


권한 회수 명령어

u1,u2,u3유저에게 branch릴레이션에 대한 검색 권한을 회수함
select 자리에 all을 주면 모든 권한을 회수한다.


Embedded SQL

일반 응용 프로그램에 SQL을 삽입하여 데이터베이스 자료를 이용하고 조작을 할 수 있도록 한 것

EXEC SQL문으로 시작하며 세미콜론으로 종료
커서: 튜플들의 집합에 대한 포인터
호스트 언어: SQL을 삽입한 응용 프로그램의 언어
호스트 변수: 호스트 언어에서 사용하는 변수, 주로 데이터베이스의 자료를 불러와 저장하는 용도

(호스트 언어가 C언어일 때의 예시)

호스트 변수(c_sname, c_minrating,c_age)를 선언하려면 BEGIN DECLARE SECTION~END DECLARE SECTION을 통해 선언되어야 함

호스트변수를 사용할 때는 콜론을 변수명 앞에 붙임

테이블의 튜플을 삽입,삭제해서 나온 결과를 커서가 가리킬 수 있음

위에서는 sinfo라는 커서를 선언함 (SQL문의 결과로 나온 튜플들을 가리킴)

SQL문: sailors테이블에서 rating이 c_minrating(랜덤 값)보다 큰 name,age를 name기준으로 정렬함

이후 do~while문을 통해  EXEC SQL FETCH명령어로 sinfo가 가리키는 튜플들을 하나씩 가져오고 호스트변수(c_sname,c_age)에 sname과 age를 차례차례 저장하고 출력을 함 (호스트 변수는 릴레이션의 속성과 같은 타입을 가짐)


제약조건 명령어로 생성

테이블을 생성할 때 CEHCK명령어를 이용하면 제약조건을 줄 수 있음
(ex) rating은 1이상 10이하인 값을 가짐)


제약조건 추가하기

Player 테이블에서 Team_ID 외래키를 만들어서 Team테이블의 Team_ID를 참조하도록 제약조건을 추가함. 제약조건의 이름은 Player_FK라고 정함


제약조건 삭제하기

DROP CONSTRAINT 명령어를 이용하면 제약조건의 이름으로 제약조건을 삭제할 수 있음


Triggers

데이터베이스에 특정한 변화가 발생하면 DBMS에서 트리거를 불러옴
DB를 모니터링하는 daemon이라고 볼 수 있음

  • Event

트리거를 활성화시키는 DB의 변화가 무엇인가

  • Condition

Event가 발생하는 경우 트리거를 실행시키는 조건

  • Action

트리거가 활성화될 때 해야할 행동

학생 릴레이션에서 INSERT라는 명령어가 발생하면 (Event)
age가 18살 미만일 때 (Condition)
count에 count+1을 저장한다. (Action)

// BEFORE INSERT ON을 하면 삽입 연산이 발생하기 전을 이벤트로 지정하게 됨 (초기 상태)


Query Processing

데이터베이스의 컴파일러라고 생각할 수 있음

1. Parsing and translation

: SQL문을 관계대수로 바꿔줌

2. Optimization

: 관계대수를 최적화함 (같은 결과를 내면서 가장 빠른 관계대수로 최적화)

3. Evaluation

: 실행

Leave a Reply

Your email address will not be published. Required fields are marked *