-
2.8 SQL 데이터 무결성 제약 조건(PRIIMARY KEY , FOREIGN KEY)SQL 과정 2019. 2. 8. 17:46
1. PRIMARY KEY(기본키) 제약 조건
가. 테이블에 저장된 데이터를 구분하기 위한 제약조건
나. 사람을 구분하기 위해 사용되는 주민번호와 같이 같은 주민번호를 가지고 있는 사람은 없다.
다. 기본키 제약조건이 걸린 컬럼은 중복된 값을 가질수 없다.
라. 주민등록번호, 사회보장번호 등등
마. PRIMARY KEY 제약 조건 요건
1) NOT NULL 조건과 UNIQUE조건을 결합한 형태로 컬럼은 유일해야 하고 NULL값을 허용하지 않아야한다.
바. PRIMARY KEY 제약 조건 형식
1) 컬럼명과 자료형을 기술한 PRIMARY KEY 제약 조건을 설정하면 된다.
* emp19 테이블을 생성하여 empno 컬럼을 number 4자리 타입, PRIMARY KEY를 emp18_empno_PK 라는
명칭으로 제약조건 사용(emp18-->emp19...오타)
* PRIMARY KEY(PK)는 중복 값을 허용하지 않고, NULL또한 허용하지 않는다.
(UNIQUE와 NOT NULL을 합친것이기 때문)
2. FOREIGN KEY(참조 무결성) 제약조건
가. 테이블 사이의 관계에서 발생하는 개념
나. 참조의 무결성은 두 테이블 사이의 주종 관계에 의해서 결정
다. 주종 관계표
1) 사원은 회사 내에 존재하는 부서에 소속되어 있어야한다.
2) 주체관계가 애매모호한 경우 어느 테이블의 데이터가 먼저 정의되어야 하는가에 따라 주종관계 결정
3) 회사 설립 후 어떤 부서를 구성하여 운영할지 정한 후에 그 부서에 일할 사원들을 뽑아야 소속이란
관계가 성립된다.
라. 외래키 참조 도식도
1) 외래키가 되기 위한 컬럼은 부모테이블의 기본키(PRIMARY KEY)나 유일키(UNIQUE KEY)로
설정되어 있어야 한다.
2) 부모 테이블인 dept의 deptno는 기본키로 설정되어 있고, 이를 참조하기 위해서 자식 테이블인
emp는 deptno에 외래키 제약조건을 설정해 놓고 있다.
3) 자식 테이블 emp의 참조 무결성을 위해 특정 컬럼에 외래키를 설정하였다면,
새로운 데이터가 추가될 때마다 부모테이블 dept의 부모키로 설정된 컬럼을 검사한다.
4) 검사 후 부모키로 설정된 컬럼에 존재하는 값만 추가하고 존재하지 않는 값은 추가하지 않으므로써
자식 테이블이 부모 테이블을 참조하는데 아무런 문제가 없도록 하고 있다.
* dept, emp 테이블의 모든 제약조건들을 검색하고 어떤 컬럼에 제약조건이 걸려있는지 확인
* emp테이블의 deptno컬럼에 참조 무결성 제약조건이 걸려있기 때문
* R이란 참조 무결성 제약조건이라는 뜻
(1) deptno NUMBER(2) CONSTRAINT emp20_deptno_FK REFERENCES dept(deptno)
emp20 테이블 생성시 deptno에 접근하려면 dept를 참조하여 deptno로 접근해야 한다는 뜻으로
emp20은 자식테이블이 되고, dept는 emp20 테이블의 부모 테이블이 된다.
(2) dept테이블의 deptno를 참조하여 생성할수 있는데, dept(deptno)는 첫번째 그림을 보면 50이란
값이 존재하지 않는다.
(가) 하여 emp20 테이블에서 deptno에 접근하려면 10~40까지의 수로만 접근이 가능한 것이다.
(즉, 참조 위반 = 외래키)
※ 부모테이블이 기본키와 유일키를 가지고 있는 것이지, 외래키가 기본키와 유일키라는 것이 아니다.
- 외래키는 참조 무결성 제약 일뿐이다.
(3) deptno 50의 삭제 또한 (2)와 같은 원리이다. 다만, dept테이블에서 바로 접근하여 삭제는 불가하고,
자식 테이블(emp20)이 부모 테이블(dept)의 deptno를 참조(사용)하고 있기 때문에 자식 테이블(emp20)의 deptno 50의 값을 먼저 삭제 후에 부모 테이블(dept)의 deptno 50의 값을 삭제할수 있다.
'SQL 과정' 카테고리의 다른 글
2.12 SQL (데이터 제어어[GRAND, REVOKE]) (0) 2019.02.12 2.12 SQL (데이터베이스 관리자 및 권한) (0) 2019.02.12 2.8 SQL 데이터 무결성 제약 조건(NOT NULL, UNIQUE, CONSTRAINT, USER_CONSTRAINTS) (0) 2019.02.08 2.8 SQL 데이터 무결성 제약 조건 (0) 2019.02.08 2.8 SQL 트랜잭션(SAVEPOINT) (0) 2019.02.08