
지금까지 외래키를 늘 사용해오다가, 외래키를 사용하지 않는 테이블들을 보게되었다.
분명 무슨 이유나 장점이 있기에 외래키를 사용하지 않고, 테이블간의 관계를 끊었을 것이기에 한번 이번에 알아보려고 한다.
그러면 먼저 외래키를 왜 사용하는걸까?
바로 무결성을 유지하기 위해서 사용한다.
무결성이란 현재 데이터베이스에 존재하는 값이 틀리지 않았다는 것을 증명하는 것을 의미한다.
외래키는 이 때 ‘ON UPDATE CASCADE’ 라는 속성을 추가만 해주었다면 무결성을 지키기 위해서 외래키 수정시 참조 릴레이션의 외래키도 모두 자동으로 변경해준다.
또는 어떤 키를 수정(ON UPDATE, 이하 MySQL기준) 또는 삭제(ON DELETE)하려고 할 때 다른 곳에서 해당 키를 참조하고 있다면 키 자체를 수정, 삭제 못하도록 막거나(RESTRICT)
참조하는 릴레이션에서도 모두 함께 수정, 삭제되도록 할 수 있다(CASCADE)
이렇게 외래 키를 사용하면 서로 얽히고 얽힌 릴레이션들의 데이터들이 모두 무결성을 갖추도록 할 수 있다.
즉 무결성을 위해서 외래키를 사용한다.
귀찮다.
위의 말이 싸가지 없이(?) 보일 수 있겠지만, 어느정도는 일맥상통한다.
외래키 사용시 제약 조건 및 cascade 등 개발자가 신경써야 할 부분이 늘어나기에 데이터의 양이 많아지고, 관계가 복잡해질수록 더욱 심해진다.
또한 참조되는 릴레이션은 반드시 참조하는 릴레이션보다 먼저 만들어져 있어야하기에 생성, 수정시 순서를 신경써주어야 한다.
즉 무결성, 정합성을 희생시켜 개발 편의와 안정성, 확장성을 도모하기 위함이라고 할 수 있다.