database.sarang.net
UserID
Passwd
Database
ㆍDBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
DBMS Tutorials 138 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 138
DB 테이블 디자인에 도전하기 (3)
작성자
정재익(advance)
작성일
2001-12-07 13:27
조회수
9,083

열에서 FOREIGN KEY 제약 조건 설정하기

 

각 열에서 유효한 값을 확인하고 열에 있는 데이터의 무결성을 강제 적용하는 방법을 지난 PRIMARY KEY 제약 조건에 이어 테이블 열에서 FOREIGN KEY를 설정하는 경우와 설정 방법에 대해서 이야기 해보자.

 

FOREIGN KEY는 외래키, FK라고 표현하기도 하며 두 테이블의 데이터 간 연결을 설정하고 강제 적용하는 데 사용되는 열이다.

 

어떤 경우에 FOREIGN KEY를 사용하는가?

 

예를 들어 publishers 테이블에서 편집자 행이 삭제되었는데 그 편집자의 ID가 titles 테이블의 책에서 사용되면 두 테이블 간 관계 무결성이 깨지고 삭제된 편집자의 책은 titles 내에서publishers 테이블 데이터로의 연결이 없는 고아가 된다.

 

FOREIGN KEY 제약 조건은 이런 상황이 발생되지 않도록 한다. 이 제약 조건은 기본 키 테이블의 데이터를 변경할 때 외래 키 테이블에 있는 데이터로의 연결이 무효화될 가능성이 있으면 그 데이터를 변경하지 못하도록 하여 참조 무결성을 강제 적용한다. 삭제되거나 변경되는 기본 키 값이 다른 테이블의 FOREIGN KEY 제약 조건 값과 연결되어 있으면 기본 키 테이블의 행을 삭제하거나 기본 키 값을 변경하려는 작업이 수행되지 않는다.

 

FOREIGN KEY 제약 조건의 행을 제대로 변경하거나 삭제하려면 먼저 외래 키 테이블에 있는 외래 키 데이터를 삭제하거나 변경하여 외래 키를 다른 기본 키 데이터로 연결해야 한다.

 

어떻게 FOREIGN KEY를 생성하는가?

 

한 테이블의 기본 키 값이 있는 열을 다른 테이블에 추가하면 테이블 간 연결을 설정할 수 있다. 이 때 두 번째 테이블에 추가되는 열이 외래 키가 된다.

 

테이블을 만들거나 바꿀 때 FOREIGN KEY 제약 조건을 정의하여 외래 키를 만들 수 있다.

 

예를 들어, 책과 편집자 사이에는 논리적 관계가 있기 때문에 pubs 데이터베이스의 titles 테이블은 publishers 테이블에 연결된다. titles 테이블의 pub_id 열은 publishers 테이블의 기본 키 열과 일치한다. titles 테이블의 pub_id 열은 publishers 테이블의 외래 키가 된다.

 

[그림] 데이터베이스 다이어그램에서 FORIGN KEY 설정 예

 

 

FOREIGN KEY 제약 조건은 다른 테이블의 PRIMARY KEY 제약 조건으로 연결될 수도 있고 다른 테이블에 있는 UNIQUE 제약 조건의 열을 참조하도록 정의할 수도 있다. FOREIGN KEY 제약 조건은 Null 값을 포함할 수 있다. 그러나 복합 FOREIGN KEY 제약 조건의 어떤 열에 Null 값이 포함되면 FOREIGN KEY 제약 조건의 유효성 확인은 수행되지 않는다.

 

FOREIGN KEY 제약 조건은 같은 데이터베이스에 있는 테이블이나 같은 테이블(자체 참조 테이블)에 있는 열을 참조할 수 있다. 예를 들어, employee 테이블에는 employee_number, employee_name 및 manager_employee_number의 세 열이 포함된다. 관리자는 사원도 되기 때문에 manager_employee_number 열에서 employee_number 열로 외래 키 관계가 설정된다.

 

FOREIGN KEY 제약 조건은 다음과 같은 이유 때문에 인덱스로 만들어야 한다.

    . PRIMARY KEY 제약 조건이 변경되면 연결된 테이블의 FOREIGN KEY 제약 
      조건도 검사한다.
    . 외래 키 열은 쿼리에서 한 테이블의 FOREIGN KEY 제약 조건 열을 다른 
      테이블의 기본 또는 고유 키 열과 연결하여 테이블의 데이터를 병합하는 
      조인에서 자주 사용된다. 
    . SQL Server는 인덱스를 사용하여 외래 키 테이블의 데이터를 빨리 찾을 수 
      있다. 그러나 반드시 인덱스를 만들 필요는 없다. 테이블 간 PRIMARY KEY 
      또는 FOREIGN KEY 제약 조건이 정의되지 않더라도 관련된 두 테이블의 
      데이터를 결합할 수 있다. 그러나 두 테이블 간 외래 키 관계가 설정되면 
      키를 기준으로 하는 쿼리에서 결합할 때 최적화될 수 있다. 

 

기존 테이블 열에 FOREIGN KEY를 추가하려면

    . 관계의 외래 키 측에 있을 테이블에 대해 테이블 디자이너를 연다. 
    . 테이블 디자이너에서 마우스 오른쪽 단추를 클릭하고 관계를 선택한다.
    . 새로 만들기 단추를 클릭한다. 
    . 기본 키 테이블에 있는 드롭다운 목록에서 관계의 기본 키 측에 있을 테이블을 
      선택한다. 아래쪽에 있는 표 형태에서 테이블의 기본 키에 해당하는 열을 
      입력한다. 각 열의 왼쪽에 인접한 표 형태의 셀에서 해당 외래 키 테이블의 
      외래 키 열을 입력한다.
    . 테이블 디자이너가 관계의 이름을 제안한다.
    . 닫기를 선택하여 관계를 만든다. 

 

[그림] 테이블 디자인에서 FORIGN KEY 설정 예

[Top]
No.
제목
작성자
작성일
조회
155예약어와 중복되는 이름을 이용할려면
정재익
2001-12-09
9349
140DB 테이블 디자인에 도전하기 (5)
정재익
2001-12-07
5673
139DB 테이블 디자인에 도전하기 (4)
정재익
2001-12-07
5165
138DB 테이블 디자인에 도전하기 (3)
정재익
2001-12-07
9083
137DB 테이블 디자인에 도전하기 (2)
정재익
2001-12-07
6374
136DB 테이블 디자인에 도전하기 (1)
정재익
2001-12-07
11248
132연관 규칙과 의사결정트리를 이용한 패턴 탐사
정재익
2001-12-06
5647
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.058초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다