TABLE의 key

DB/Common 2012. 1. 9. 17:24
TABLE의 key (기본 키, 후보 키, 외래 키, 대체 키)

사용자가 지정한 제약조건에 대한 정보는 user_constraints 뷰를 사용하여 확인할 수 있다.

릴레이션을 갖는 TABLE을 구성하는데 행(RECORD: ROW: TUPLE)을 구성하는 데이터 값들에 의해 식별되는데, 이처럼 각 행을 식별할 수 있는 속성(attribute)을 릴레이션(relation)의 KEY라 한다.

constraint 설명
PRIMARY KEY(PK) 해당 컬럼 값은 반드시 존재해야 하며, 유일해야 함
(NOT NULL과 UNIQUE 제약조건을 결합한 형태)
FOREIGN KEY(FK) 해당 컬럼 값은 참조되는 테이블의 컬럼 값 중의 하나와 일치하거나 NULL을 가짐
UNIQUE KEY(UK) 테이블내에서 해당 컬럼 값은 항상 유일해야 함
NOT NULL 컬럼은 NULL 값을 포함할 수 없다.
CHECK(CK) 해당 컬럼에 저장 가능한 데이터 값의 범위나 조건 지정

다음의 예를 보자.

학생
학번 이름 학년 학과
100 김씨 4 정보통신
200 이씨 3 전파공학
300 박씨 1 정보통신
400 조씨 4 전파공학
500 임씨 2 컴퓨터공학

위의 학생 테이블은 속성(A={학번,이름,학년,학과}) 집합으로 구성된 테이블이다.
이 테이블에서 어떤 속성 집합(K)가 속성집합(A)의 부분 집합이면서 유일성과 최소성을 만족하는 경우 속성집합(K)을 후보키(candidate key)라 한다.
즉, 학생 테이블에서 학번 속성은 테이블 내의 모든 행마다 서로 다르고 행을 유일하게 식별하는데 사용할 수 있으므로 이 학번은 학생 테이블의 후보키이다. 또한 이름 속성도 유일성을 가지므로 후보키이다.
이름 속성과 학과 속성을 조합해서 학생 테이블을 유일하게 식별하는 것이 가능하다면, 이 두 속성의 집합 {이름,학과} 역시 테이블의 후보키가 된다.

테이블에서 하나 이상의 후보키를 가질 수 있다. 그러나 관계형 모델에서는 테이블에서 하나의 키를 선정하여 이 키를 기본키(primary key)라 하고 기본키를 제외한 나머지 후보키대체키(alternate key)라 한다
예를 들어, 학생 테이블에서 학번 속성이나 이름 속성은 테이블 내의 을 유일하게 식별할 수 있으므로 기본키로 사용될 수 있다.
하나 이상의 테이블을 연결하여 사용하는 경우 필요한 키로, 외래키(foreign key)가 있다. 외래키는 한 테이블의 속성들의 집합으로 그 값이 다른 테이블의 기본키와 일치하거나 null 값인 키를 의미한다.


관계형 데이터베이스 내의 릴레이션은 이들을 연결할 수 있는 공통의 속성을 공유할 수 있다. 다음 두 릴레이션(테이블)을 살펴보자.

외래키가 릴레이션 간의 연결을 보장하기 위해서는 반드시 다음 조건을 충족시켜야 한다.
1) 외래키의 값이 반드시 다른 릴레이션의 기본키이어야 한다.
2) 외래키는 null값을 가질 수 없다.
릴레이션 사이에 이러한 두 조건을 충족하는 경우 이 릴레이션들은 참조 무결성(referential integrity)을 나타낸다고 말한다.

무결성에는 다음과 같은 종류가 있다.
1) 개체 무결성(entity integrity) :

기본키로 사용하는 속성은 null 값을 가질 수 없다. 이는 관계 데이터 모델에서의 릴레이션이 현실의 개체를 나타내므로 이 개체들을 식별할 수 있는 식별자가 반드시 존재해야 하기 때문이다. 그러므로 이러한 속성을 개체 무결성이라 한다.

2) 참조 무결성(referential integrity) :
릴레이션은 참조할 수 없는 외래키의 값을 가져서는 안 되는데, 참조할 수 없는 외래키란 null이 아니면서 참조된 릴레이션의 어떤 기본키의 값과도 일치하지 않음을 의미한다.

3) 범위 무결성(domain integrity):
범위 무결성 규칙은 속성에서 허용 가능한 값의 범위를 지정하기 위한 제약조건이다 . 범위 무결성 규칙에서는 속성의 데이터 타입, 길이, 기본 키, 유일성, null 허용, 허용 값의 범위와 같은 다양한 제약조건을 지정할 수 있다.

SQL> select constraint_name,constraint_type,
  2  table_name,r_constraint_name
  3  from user_constraints;
 
CONSTRAINT_NAME      C TABLE_NAME R_CONSTRAINT_NAME
-------------------- - ---------- --------------------
FK_DEPTNO            R EMP        PK_DEPT
PK_DEPT              P DEPT
PK_EMP               P EMP
 
SQL> 
constraints(제약조건)

무결성 제약조건이 있는 상태에서 insert,update,delete시 ERROR발생



출처 - http://radiocom.kunsan.ac.kr/lecture/oracle/what_is/relation_key.html

'DB > Common' 카테고리의 다른 글

varchar와 varchar2의 차이와 number(5,2) 의미  (1) 2012.02.13
CHAR()와 VARCHAR2() 차이  (0) 2012.02.13
TABLE의 key  (0) 2012.01.09
데이터베이스 언어(DBL; DataBase Language)  (0) 2012.01.03
Table, Field, Record 관계  (0) 2011.12.20
SQL의 기원  (0) 2010.12.20
Posted by linuxism

댓글을 달아 주세요