사용자가 지정한 제약조건에 대한 정보는 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 |
데이터베이스 언어(DBL; DataBase Language) (0) | 2012.01.03 |
Table, Field, Record 관계 (0) | 2011.12.20 |
SQL의 기원 (0) | 2010.12.20 |