정보 처리/데이터베이스

무결성 제약 - 테이블 생성시 제약조건 지정

본클라쓰 2008. 12. 18. 08:50

테이블을 생성할 때 제약조건(Constraint)를 부여할 수 있는데, 제약조건은 데이터의 무결성을 지키기 위해 테이블 내에서 지켜야하는 조건을 의미한다. 제약조건이 부여된 테이블에서는 데이터를 입력할 때 무조건적으로 입력되는 것이 아니라, 어떠한 조건을 만족했을 때에만 입력되도록 데이터베이스 자체에서 제약한다.

 

 

■ 6개의 제약조건

 

 

1. PRIMARY KEY

 

PRIMARY KEY 제약조건은 기본키 제약조건으로 테이블내에서 널 값을 허용하지 않을 뿐더러 테이블 내에서 유니크한 값만을 허용하는 제약조건이다.

 

CREATE TABLE USER

(

USERID NCHAR(8) NOT NULL PRIMARY KEY,

PASSWORD NCHAR(10) NOT NULL

)

 

위와 같이 작성하면 테이블내에서 USERID 컬럼은 기본키가 되는 것이다. 기본키는 NULL 값도 허용하지 않으며 중복 또한 허용하지 않는다. 이렇게 지정하면 자동적으로 USERID가 기본키로 지정되지만 사용자가 어느 컬럼에 기본키가 설정되어 있는지 파악하기 힘들다는 단점이 있다. 그래서 제약을 부여할 때 제약 이름을 부여하는 방법을 사용하는데 다음과 같이 사용한다.

 

CREATE TABLE USER

(

USERID NCHAR(8) NOT NULL CONSTRAINT PK_USERID PRIMARY KEY,

PASSWORD NCAHR(10) NOT NULL

)

 

또한, 테이블 생성한 후 PRIMARY KEY 제약을 부여할 수도 있다.

 

CREATE TABLE USER

(

USERID NCHAR(8) NOT NULL,

PASSWORD NCAHR(10) NOT NULL 

) ;

 

 

ALTER TABLE USER ADD PRIMARY KEY (USERID);

 

 

2. FOREIGN KEY

 

외래 키 제약조건을 지정하기 위해서는 부모 테이블의 기본 키가 반드시 있어야 하며, 외래 키 값의 입력은 부모 테이블에 반드시 값이 있어야 입력이 가능하다.

 

CREATE TABLE BUY

(

BUYID INT NOT NULL PRIMARY KEY,

USERID NCHAR(8) NOT NULL FOREIGN KEY REFERENCES USER(USERID)

); 

 

외래 키 테이블의 열이 참조하는 기준 테이블 열은 기본 키로 설정되어 있어야 한다. 만약, 기준 테이블이 Primary Key나 Unique가 아니라면 외래 키 관계는 성립되지 않는다. 또한, 테이블 생성 후 추가적으로 외래 키를 지정할 때는 다음과 같은 구문을 사용하면 된다.

 

ALTER TABLE BUY ADD FOREIGN KEY (USERID) REFERENCES USER(USERID);

 

외래 키의 옵션 중에는 'on DELETE CASCADE'와 'on UPDATE CASCADE' 옵션이 있는데, 이는 기준 테이블의 데이터가 변경되었을 때 외래 키 테이블도 자동으로 적용되도록 설정해주는 것이다. 업데이터 설정을 지정하는 방법은 다음과 같다.

 

ALTER TABEL BUT ADD FOREIGN KEY (USERID) REFERENCES USER(USERID) ON UPDATE CASCADE;

 

별도로 지정하지 않으며 on UPDATE NO ACTION과 on DELETE NO ACTION을 지정하는 것과 동일하다.

 

 

3. UNIQUE

 

UNIQUE 제약조건은 중복되지 않는 유일한 값을 입력해야 하는 조건이다. 이것은 primary key 제약조건과 거의 비슷하지만 unique 제약조건은 null 값을 허용하지만 primary key 제약조건은 null 값을 허용하지 않는다. 하지만 unique 제약조건도 null 값을 한 개만 허용하지 중복된 null 값을 허용하는 것은 아니다.

 

CREATE TABLE USER

(

USERID NCHAR(8) NOT NULL PRIMARY KEY,

EMAIL NCHAR(30) UNIQUE

); 

 

 

4. CHECK

 

CHECK 제약조건은 입력되는 데이터를 점검하는 기능을 수행한다. 만약, USER라는 테이블에 height(신장)에 1m에서 2m 사이에 값 만을 허용하기 위해서는 다음과 같이 작성한다.

 

CREATE TABLE USER

(

USERID NCHAR(8) NOT NULL PRIMARY KEY,

HEIGHT SMALLINT,

CHECK ( HEIGHT >100 AND HEIGHT < 200 )

); 

 

또한 특정 문자열 값만을 입력되게 허용하기 위해서는 다음과 같이 작성한다.

 

CHECK ( FIRSTNAME IN('김', '이', '박', '석', '최' )

 

 

5. DEFAULT

 

DEFAULT 제약조건은 데이터를 입력하지 않아도 자동으로 입력되는 디폴트 값을 정의하는 방법이다. USER 테이블에 성별을 지정하지 않아도 자동적으로 남자로 입력되게 하려면 다음과 같이 한다.

 

CREATE TABLE USER

(

USERID NCHAR(8) NOT NULL PRIMARY KEY,

SEX NCHAR(4) NOT NULL DEFAULT '남자'

); 

 

 

6. Null 값 제약조건

 

Null 값을 허용하려면 'NULL'을 허용하지 않으려면 'NOT NULL'을 사용하면 된다.