1. Built-in Data Types in SQL
모두 비교 연산과 산술 연산이 가능하다.
Type | Information | Example |
date | 연, 월, 일 순으로 구성된 날짜를 저장 | '2005-7-27' |
time | 그 날의 시간, 시, 분, 초, 소수점까지 저장 | '09:00:30.75' |
timestamp | date와 time을 합친 것 | '2005-7-27 09:00:30.75 |
interval | date/time/timestamp 의 빼기 연산의 결과, 더해질 수도 있음 | '1'(day) |
2. Index Creation
Index
검색속도를 높이기 위해 인덱스(index)라는 데이터 타입을 만든다. 예를 들면, student relation을 만들고 난 후 다음과 같은 명령어를 사용하여 index를 만들 수 있다.
create index studentID_index on student(ID)
인덱스는 데이터베이스 시스템이 모든 tuple을 살펴보지 않을 수 있도록 속성의 특정 값으로 레코드에 접근하는 속도를 높이는 데이터 구조이다.
장점과 단점?
인덱스를 사용하면 쿼리의 수행 속도가 빨라지지만 인덱스를 위한 추가적인 메모리 공간이 필요하고 유지보수에 비용이 들며 데이터를 삽입, 갱신, 삭제하는 작업이 느려질 수 있다.
3. Large-Object Types
요즘 데이터베이스는 큰 객체 데이터를 저장해야 할 일이 생겨 Large-Object Types이 개발되었다. 대형 객체 타입에는 blob, clob이 있는데 lob은 large object를 의미한다.
blob (binary large object)
대용량의 해석되지 않은 이진 데이터 모음. 데이터베이스에서는 로우 데이터로 존재하다가 바깥 응용프로그램에 의해 해석되는 것이 일반적.
clob(character large object)
대용량의 문자 데이터 모음. 대용량의 문서 데이터를 저장할 때 사용되며 특별한 방법으로 저장하거나 가져올 수 있다.
쿼리 결과가 large object를 돌려줄 때 이를 메모리에 바로 올리는 것은 비효율적이므로, 객체 자체가 아닌 해당 객체를 가르키는 포인터를 돌려준다.
4. Authorization
사용자에게 권한을 부여하는 것. 사용자는 데이터베이스의 데이터에 접근하여 SQL문을 실행하려고 할 때 SQL문을 실행시킬 수 있는 권한을 가지고 있어야 한다.
권한 | 기능 |
Read | 데이터를 읽일 수 있으나 수정할 수 없음 |
Insert | 데이터를 삽입할 수 있으나 수정할 수 없음 |
Update | 데이터를 수정할 수 있으나 삭제할 수 없음 |
Delete | 데이터를 삭제할 수 있음 |
5. Authorization Specification in SQL(권한 부여)
이미 권한을 가지고 있거나 데이터베이트 관리자는 다음과 같은 명령어를 통해 권한을 부여할 수 있다.
grant <privilege list>
on <relation name or view name> to <user list>
<user list> 에는 user의 id 또는 public 키워드가 들어갈 수 있다.
예시
U1, U2, U3에게 instructor relation에 대한 select 권한을 부여한다.
grant select on instructor to U1, U2, U3
insert, update, delete, all privileges 등이 select 대신 쓰일 수 있다.
다음은 권한을 취소하는 명령어 예제이다.
U1, U2, U3로부터 instructor relation에 대한 select 권한을 제한한다.
revoke select on branch from U1, U2, U3
grant 대신 revoke를 사용했으며, to 대신 from을 사용하였다.
권한에 대한 몇 가지 기본 규칙
1. 다른 두 사용자가 동일한 사용자에게 권한을 각각 부여한 경우, 어떤 한 사용자가 부여받은 권한을 뺏는다고 해도 그 권한은 유지될 수 있다.
2. 어떤 권한이 취소되면 그 취소되는 권한에 의존해서 만들어진 모든 권한도 취소된다.
3. 권한을 가진 사용자는 그 권한을 다른 사용자에게 권한을 넘겨주는 것이 가능하다.
4. 권한을 넘겨준 사용자가 권한을 잃게 되면 이 사용자로부터 권한을 받은 다른 사용자도 그 권한을 같이 잃게 된다.
Roles
role은 역할이라는 의미로 사용자 그룹을 의미한다. 예를 들어 새로운 교수님이 임명될 때마다 새로운 교수님에게 각 교수님들과 동일한 권한을 부여하는 것은 번거로울 수 있다. 이러한 경우 더 나은 방법은 교수진이라는 별도의 롤(role), 역할을 만드는 것이다. 이렇게 하면 어떠한 사용자에게 여러 권한을 부여할 필요 없이 role을 정해주면 되는 것이다. 이렇게 생성된 role에게는 권한을 부여하거나 뺏을 수 있다.
chain of roles
create role dean;
grant instructor to dean;
grant dean to Satoshi;
이와 같은 명령어를 통해 dean에게 instructor라는 role을 부여하고 Satoshi에게 dean이라는 역할을 연쇄적으로 부여할 수도 있다.