제약

테이블에 제약을 설정함으로써 저장될 데이터를 제한할 수 있다.

 

1. 테이블 작성시 제약 정의

각 열마다 제약이 걸려있는것을 확인할 수 있다.

이처럼 열에 대해 정의하는 제약을 '열 제약' 이라고 부른다.

 

이번엔 PK를 지정하여 복수열에 의한 기본키 제약을 걸었다.

 

제약에는 이름을 붙일 수 있다.

CONSTRAINT 키워드를 사용해서 지정한다.

 

2. 제약 추가

- 열 제약 추가

열 제약을 추가할 경우 ALTER TABLE로 열 정의를 변경할 수 있다.

 

- 테이블 제약 추가

테이블 제약은 ALTER TABLE의 ADD 하부명령으로 추가할 수 있다.

 

3. 제약 삭제

테이블 제약은 나중에 삭제할 수도 있다.

열 제약의 경우, 제약을 추가할 때와 동일하게 열 정의를 변경한다.

 

- 열 삭제

앞서 추가한 c열의 NOT NULL을 삭제하는 ALTER TABLE 명령의 예)

NOT NULL 제약이 삭제된 것을 확인할 수 있다.

 

- 테이블 삭제

ALTER TABLE의 DROP 하부명령으로 테이블 제약을 삭제할 수 있다.

 

삭제할 때 제약명을 지정하여 삭제할 수도 있다.

ex)

ALTER TABLE sample631 DROP CONSTRAINT pkey_sample631;

 

4. 기본키

기본키는 테이블의 행 한개를 특정할 수 있는 검색키 이다.

따라서 기본키는 NOT NULL이어야 하고, 기본키 제약이 설정된 열에는 중복된 값을 저장할 수 없다.

 

- 복수의 열로 기본키 구성하기

기본키를 구성하는 열은 복수라도 상관없다. 복수의 열을 이용해 단 하나의 행을 특정할 수만 있으면 된다.

 

 

인덱스 구조

'색인'이라고도 불리는 인덱스는 데이터베이스 객체 중 하나이다.

 

1. 인덱스

인덱스의 역할은 검색속도의 향상이다.

 

인덱스의 구조는 책의 목차와 비슷하다.

목차에 제목, 키워드별 페이지 번호가 적혀있듯,

데이터베이스의 인덱스에는 검색시에 쓰이는 키워드와 대응하는 데이터 행의 장소가 저장되어 있다.

 

인덱스는 테이블과는 별개로 독립된 데이터베이스 객체로 작성된다.

하지만 목차밖에 없는 책은 본 적이 없는 것처럼, 인덱스는 테이블에 의존하는 객체라 할 수 있다.

대부분의 데이터베이스에서는 테이블을 삭제하면 인덱스도 같이 삭제된다.

 

2. 검색에 사용하는 알고리즘

 

- 풀 테이블 스캔(full table scan)

단순하게, 행이 1000건 있다면 최대 1000번 값을 비교함.

 

- 이진 탐색(binary search)

집합을 계속 반으로 나누며 조사하는 검색방법.

풀 테이블 스캔과 비교하면 현저하게 비교횟수가 줄어든다.

 

=> 대량의 데이터를 검색할 때는 이진탐색이 빠르다.

 

- 이진 트리(binary tree)

이진 탐색은 고속으로 검색할 수 있는 탐색 방법이지만 데이터가 미리 정렬되어 있어야 한다.

일반적으로 테이블에 인덱스를 작성하면 테이블 데이터와 별개로 인덱스용 데이터가 저장장치에 만들어진다.

 

트리는 노드(node)라는 요소로 구성되고 각 노드는 두 개의 가지로 나눠진다.

노드의 왼쪽 가지는 작은 값으로, 오른쪽 가지는 큰 값으로 나뉘어져 있다.

 

검색의 진행 방법은 이진탐색과 거의 비슷하다. 원하는 수치와 비교해서 가지를 타고 내려가면서 조사해나가는 방식이다.

 

3. 유일성

이진 트리의 구조는 집합 내에 중복하는 값을 가질 수 없다. (크거나 작은 쪽의 두 가지로만 나뉘기 때문)

즉, 이진트리의 이런 구조는 Key에 대해서 유일성을 가지게 할 경우에만 유용하다.

그래서 기본키 제약은 이진 트리로 인덱스를 작성하는 데이터베이스가 많다.

 

=> 이진트리에는 중복하는 값을 등록할 수 없다.

 

+ Recent posts