제목 그대로입니다.
외래키 제약조건의 장단점과
모델상에서 외래키로 표현된(?) 칼럼들에 외래키 제약조건을 생성해 주는 것이 좋은지, 아니면 생성하지 않는 것이 좋을지 판단은 어떻게 해야할까요 ?
검색해보니,
FK 제약은 가장 확실하고 간편한 방법이지만 성능상에 문제 를 유발할 수 있다. 반드시 적용되어야 하는 부모 자식 관계에 적용하는 것이 일반적이다.
FK 제약은 인덱스를 생성한다. 자식 테이블의 데이터 변경은 부모 테이블에 PK 제약으로 만들어 진 UNIQUE 인덱스를 이용하고, 부모 테이블의 데이터 변경은 자식 테이블의 인덱스를 이용한다. 인덱스가 없다면 테이블 FULL SCAN이 발생할 것이다.
이런 내용이 나오던데, 확실히 감이 안 오네요...
외래키로 표현되어있지만, 제약조건은 걸려있는 경우를 한 번도 보지 못했기도 해서, 궁금하네요.
1. FK 제약은 인덱스를 생성한다.?
- 표현이 모호하네요. 자동생성되는 것으로 오해할 소지가 있네요.
- FK 제약 항목에 인덱스를 생성하는것이 바람직하다.
2. 자식 테이블의 데이터 변경은 부모 테이블에 PK 제약으로 만들어 진 UNIQUE 인덱스를 이용
- 해당 FK 항목이 올바른지 판단하기 위해 부모 테이블 PK 인덱스 검색을 통해 확인해야 함.
3. 부모 테이블의 데이터 변경은 자식 테이블의 인덱스를 이용한다.
- 부모의 PK 변경시 변경전 PK를 가진 자식이 있는지 확인해야 함
- 자식의 FK 항목에 인덱스가 있어야 하는 이유