늒네 기록

[mysql] foreign key, 외래키 설정은 꼭 해야 하는가? 본문

DB 공부 기록/mysql

[mysql] foreign key, 외래키 설정은 꼭 해야 하는가?

jaeha lee 2020. 9. 8. 22:56

이전에 외래키를 설정하지 않고 테이블들을 관리하던 프로젝트에 참여했던 적이 있었다. 당시에는 별 생각이 없었는데, 다시 보니 이렇게 해서 얻는 이점이 있었을까? Insert 과정에서 빡빡하게 관리를 해주면, 그리고 특정 행을 delete할 일이 없다면 크게 문제될 것은 없을것 같은데, 실제로 다른 사람들도 프로젝트를 진행할때 외래키를 쓰지 않기도 하는지 궁금했다.

 

검색을 해보면서 흥미로운 링크를 둘 찾았는데, 하나는 여기.

 

질문자의 시니어도 프로젝트를 돌릴 때 FK를 사용하지 않았는데, 그 이유는 '급하게 INSERT, UPDATE, DELETE를 해야할 때 제약이 걸려있으면 이로 인해서 시간이 잡아먹히는 것도 코스트기 때문'. 이라고 했단다. 아래 달린 답변에도 읽어볼만한 내용이 있었는데, 'INSERTs are generally a little quicker (which adds up over time) because no FKs checks are done. Arbitrary subsets of data can be pulled from the DB as desired without having to ensure all supporting data is included. And so on.' 그러고 보니 그렇다. 행들 사이에 제약이 걸려있다는 말은 당연히 이런 제약들을 체크하는 데에 DB에 미약하게나마 로드가 걸린다는 말이기도 하다.

제약을 DB 레벨에서 강제하여 사람이 신경쓰지 않아도 규칙이 지켜지도록 하기, 대신 DB레벨에서 강제하는 제약을 돌아가기 어려움 vs 사람이 본인이 원하는 대로 편하게 작업해서 데이터들이 잘 연관되어있게 하기, 대신 제약이 지켜지는지 다른 단에서 체크하고, 제약이 깨졌을 때 후폭풍 감당- 이런 구도로 생각하면 될것 같다.

 

그리고 또 흥미로웠던 링크 여기.

외래키를 쓰지 않는 9가지 이유가 있는데, 여기는 나중에 다른 포스트에 이어서 간단하게 요약하도록 하겠다.

반응형
Comments