외래키 임시 비활성화와 최근 사용하지 않는 이유?
외래키
외래키 임시 비활성화
외래키가 있을때 테이블을 쉽게 지우거나 초기화할 수가 없다.
테이블 초기화해야하는데 외래키로 문제생겻을때 임시 비활성화 가능이 있다.
다음 단계를 거치면 쉽게 비활성화했다가 제약조건을 다시 설정할 수 있다.
-- 외래키 임시 비활성화
SET FOREIGN\_KEY\_CHECKS = 0;
-- 테이블 초기화
TRUNCATE TABLE \`NOTICE\`;
-- 외래 키 제약 조건 설정
SET FOREIGN\_KEY\_CHECKS = 1;
외래키 최근 사용하지 않는 이유
RDBMS에서 관계를 나타내기 위해서 외래키를 사용하는 것이 정석이지만 최근 실무에서는 FK를 설정하지 않는 경우가 많다고 한다.
외래키는 무결성을 유지하기 위해서 사용한다.
무결성이란 현재 데이터베이스에 존재하는 값이 틀리지 않았다는 것을 의미한다.
어떤 키를 수정 또는 삭제하려고 할 때 다른 곳에서 해당 키를 참조하고 있다면
키 자체를 수정, 삭제 못하도록 막거나 참조하는 릴레이션에서도 모두 함께 수정, 삭제되도록 해야한다.
또는 참조하는 릴레이션에서 해당 키의 값을 NULL로 바꿔줄 수도 있다.
이렇게 외래 키를 사용하면 서로 얽히고 얽힌 릴레이션들의 데이터들이 모두 무결성을 갖추도록 할 수 있다.
하지만 현실에서는
일단은 귀찮다.
fk가 있는 테이블에서 임의 데이터를 삽입하고자 할때 반드시 부모 테이블에도 추가해줘야되는 귀찮음이 존재한다.
FK에 따른 데이터 소실우려가 있다.
Sub table을 구성하다보면 여기저기에서 FK를 연결하는 경우가 많은데 복잡하게 구성된 본 테이블에서 단 하나의 데이터만이라도 수정 변경하게 하면 Sub table의 데이터가 변경되는 경우가 발생할 수 있다.
이런 문제들과 다른 많은 이유들로 인해서 현실에서는 FK를 잘 설정하지 않기도 한다고 한다.
실제로 우리가 적용할땨도 많은 어려움이 있다.
일단 소규모 프로젝트이기 때문에 설정을 하고 시작하지만 실무에 들어가서는 그 규칙을 따를 필요가 있어보인다.
그러나 실제로 현업에서 일하는 멘토님께 여쭤보았는데 오히려 이런 설정하지 않는 것이 사파라고 하신다.
일하면서 에러를 보기 싫어서 하는 그런 편법이라고 하셨다. 정확한 곳에서는 규칙을 지켜서 꼭 넣는 다고 하신다.
현실을 정확히 알수는 없지만 모든 곳마다 다른 것 같다.