개발자

현업에서 외래키 자주 거나요?

2023년 07월 18일조회 994

안녕하세요 데이터베이스에서 어떤 테이블의 기본 키를 다른 테이블에서 사용할 때 실제로 외래키 제약조건을 많이 설정하는지 궁금합니다. 개발할 때 테스트나 수정 삭제가 번거로워 걸지 않고 개발하는 곳도 더러 있는 것 같은데요 의견이 궁금합니다.

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 3

인기 답변

류호준님의 프로필 사진

위에 말씀하신 삭제가 번거로워지는건 문제가 될 수도 있지만 안전장치가 될 수도 있습니다. 자동차 안전벨트는 사고가 나기 전까지는 거추장스러운 물건일 뿐 이지요. 실제로 정말로 중요한 데이터가 순서대로 입력되어야 하는데 그렇지 못 하거나 데이터 삭제도중 부분적인 데이터가 유지됐을 경우 생겨나는 문제를 막아줄 수 있습니다. 또한 인덱싱을 통해 join query를 좀 더 효율적이고 빠르게 실행 시킬 수 있게 되죠. 다만 샤딩이 필요한 정도의 사이즈가 되게 되면 모든것에 foreign key constraint를 걸 수는 없게 되기도 합니다. 이런경우에는 최대한 같이 불려질 데이터들끼리 뭉쳐서 샤딩하여 최적화 할 수 있습니다

joseph님의 프로필 사진

답변자가 경험한 도메인에 따라 답이 많이 갈릴 수 있는 질문인 것 같아요. 우선 fk를 비즈니스 로직에서 중요한 제약조건으로 활용하고 있다면 당연하게도 필수겠지만, 제 경험으로는 엔지니어링 적인 관점보다 팀이나 비즈니스의 규모 등에 따라 좀 다른 것 같아요. 개발 담당자가 자주 바뀌거나 코드 파편화가 심한 상황에서는 안 걸던 것도 잡아다가 걸어서 안전장치를 마련해놔야 안심이 될 것이고, 대규모 서비스의 일부 도메인을 담당하는 팀에서 상식적인 온보딩 절차까지 갖추고 있다면 fk를 걸기 보다 걸지 않고 유연성을 택하는 것 같구요. 대부분 그 사이에서 어느 정도 선택의 영역으로 보는 것 같아요. 스키마를 최대한 단순하게 설계하고 애플리케이션에게 많은 역할을 부여하는 방식으로 개발하는 집단은 안거는 편을 선호하는 것 같고, db 의존도가 강한 도메인에서는 거는 편을 선호하는 것 같아요. 물론 dba까지 있는 경우는 개발자의 영역이 아닐 수 있으니 상황 봐서.. 저 개인적으로는 데이터가 많아지면 fk가 역효과가 날 때가 있어서 모든 데이터가 가능한 독립적으로 존재할 수 있도록 설계하려고 노력합니다. 요구사항마다 좀 다르겠지만, update 보다 insert를 최대한 활용해서 영속화하고, 극단적인 정규화보다 적당히 데이터의 중복을 허용하는 방식으로 설계합니다. 요약하면 fk 안쓰고 fk의 효과를 내도록 설계하고, 안되면 쓴다 정도겠네요.

커리어리 AI 봇님의 프로필 사진

현업에서 외래키(Foreign Key) 제약조건의 사용은 데이터베이스 설계 및 데이터 무결성 유지를 위해 일반적으로 권장되는 방법입니다. 외래키 제약조건을 설정하면 다른 테이블의 기본 키를 참조하는 필드에 데이터 일관성을 유지할 수 있습니다. 외래키 제약조건을 사용하는 이점은 다음과 같습니다: 1. 데이터 무결성 보장: 외래키 제약조건은 부모 테이블의 기본 키와 자식 테이블의 외래키 간에 일치성을 유지시켜 데이터의 무결성을 보장합니다. 이를 통해 잘못된 데이터 입력이나 참조 불일치 등을 방지할 수 있습니다. 2. 데이터 일관성 유지: 외래키 제약조건을 설정하면 부모 테이블의 레코드가 변경되거나 삭제될 때 자동으로 관련된 자식 테이블의 레코드도 함께 변경되거나 삭제됩니다. 이를 통해 데이터 일관성을 유지할 수 있습니다. 3. 쿼리 최적화: 외래키를 기반으로 조인을 수행할 때 성능상의 이점을 얻을 수 있습니다. 데이터베이스 엔진은 외래키 제약조건을 활용하여 조인 연산을 최적화하고, 필요한 인덱스를 효율적으로 사용할 수 있습니다. 그러나 현업에서 외래키 제약조건을 사용하지 않는 경우도 있을 수 있습니다. 이는 다음과 같은 이유로 인해 발생할 수 있습니다: 1. 성능 상의 이슈: 많은 양의 데이터가 있는 경우 외래키 제약조건이 조인 및 데이터 조작 작업에 부하를 줄 수 있습니다. 따라서 성능에 큰 영향을 주는 상황에서는 외래키 제약조건을 일시적으로 해제하거나 제한적으로 사용할 수 있습니다. 2. 데이터 마이그레이션: 기존 시스템의 데이터베이스를 변경하거나 마이그레이션할 때 외래키 제약조건을 해제하고 작업하는 경우가 있을 수 있습니다. 데이터 일관성을 유지하기 위해 마이그레이션 프로세스를 진행하고 나서 외래키 제약조건을 다시 설정할 수 있습니다. 3. 비즈니스 로직 요구사항: 특정 비즈니스 로직이 외래키 제약조건을 사용하기 어려운 경우가 있을 수 있습니다. 이 경우에는 대신 애플리케이션 레벨에서 데이터 일관성을 유지하는 방식을 구현해야 할 수 있습니다. 종합적으로 말씀드리면, 외래키 제약조건의 사용은 데이터의 일관성과 무결성을 보장하는 중요한 요소입니다. 그러나 특정한 상황에서는 성능, 데이터 마이그레이션 등을 고려하여 외래키 제약조건의 사용을 유연하게 결정할 수 있습니다.

커리어리 AI 봇의 답변을 평가해 주세요!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!