강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

shinyurim님의 프로필 이미지
shinyurim

작성한 질문수

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

좋아요 설계

테이블을 생성할 때 관계 명시를 안 하는 게 더 나은지 질문드립니다!

해결된 질문

작성

·

66

0

안녕하세요! 학부생일때 간단한 프로젝트를 진행할 때는, erd를 그릴 때 관계도 명시하고, 이를 지켜서 테이블을 생성하려고 했습니다.

그런데 테이블 생성문을 보니 보통 관계를 명시 안 하고 하시더라구요! (user의 id와 user_id 같은 것)

보통 실무에서는 이렇게 관계를 명시 안 하고 테이블을 생성하는 편인가요?

그리고 이렇게 했을 때 장점이 있을까요?

너무 초보적인 질문이었다면 죄송합니다...!!

답변 2

0

쿠케님의 프로필 이미지
쿠케
지식공유자

shinyurim님, 안녕하세요!

 

ERD 말씀하시는게.. 다양한 모양의 화살표를 활용하던.. 그것 말씀하시는 것이죠?

저도 학생 시절 과제할 때 이후로 실제로 써먹은 적이 거의 없어서 기억도 잘 안나네요.. ㅎㅎ

굳이 안써도 된다고 생각하긴 하는데, 팀 구성원들이 그것에 대한 이해가 있고 선호하는 상황이라면 사용해도 됩니다!

관계를 더욱 명확하게 표현하는게 나쁜 것은 아니니깐요.

근데 개인적으로 참조 방향, 관계(일대일, 일대다, 다대다 등), 참조키만 잘 나타내도 충분한 것 같긴 하더라고요.

 

테이블 생성문에서 관계라 하심은, 테이블 DDL로 선언하는 외래키 제약 말씀하시는걸까요?

실무에서는 외래키 제약을 걸지 않는 경우가 대부분입니다.

레코드 삽입/변경/삭제 시에 제약을 검증하기 위한 부가적인 확인 과정과 락이 필요하기 때문에 성능적으로 손해보는 부분도 있고,

스키마를 변경해야하는 상황도 많은데 물리적인 제약이 걸려있으면 처리하기가 복잡하고 어려워집니다.

또, 분산 데이터베이스 환경이라면, 애초에 단일 DB에 테이블들이 속해있지 않기 때문에 제약을 걸 수도 없습니다.

그래서 DB 레벨에서 물리적인 제약은 만들지 않고, 논리적으로 참조키를 나타내고 애플리케이션 레벨에서 제약을 확인하는게 일반적입니다.

CUD 성능/유연한 스키마 변경 등에서 장점이 있다고 볼 수 있겠네요.

 

충분히 궁금할만 한 질문입니다!

혹시 더 궁금한 점 있으시면 편히 문의 주세요!

0

안녕하세요, 인프런 AI 인턴입니다. shinyurim님.

질문해주신 내용은 데이터베이스 설계와 관계 설정에 관한 부분인데요, 이는 특히 대규모 시스템 설계에서 매우 중요한 사안입니다. 질문에 대한 답변을 드리자면, 실무에서는 테이블 간의 물리적 외래 키 제약조건을 생략하고 관계를 코드에서 관리하는 경우가 많습니다. 이는 몇 가지 장점과 관련이 있습니다.

외래 키를 생략하는 이유와 장점

  1. 성능 최적화:

    • 외래 키 제약조건은 데이터베이스가 관계를 유지하기 위한 추가적인 비용을 발생시킬 수 있습니다. 대량의 데이터를 다루는 시스템에서는 이러한 비용이 성능 저하로 이어질 수 있습니다.
  2. 유연한 설계:

    • 외래 키를 지정하지 않으면 데이터베이스 구조 변경이 더 쉬워집니다. 테이블의 스키마가 변경될 때 외래 키가 있는 경우에는 더 복잡한 절차가 필요합니다.
  3. 독립적인 서비스:

    • 마이크로서비스 아키텍처 등에서는 각 서비스가 독립적으로 동작하기를 원하며, 이러한 경우 데이터베이스 간의 강한 결합을 피하기 위해 외래 키를 사용하지 않을 수 있습니다.
  4. 애플리케이션 레벨에서의 데이터 일관성 관리:

    • 데이터의 정합성과 무결성을 애플리케이션 로직으로 관리하는 방식이 더 유연한 설계를 가능하게 합니다. 트랜잭션 등을 통해 필요한 부분에서만 관계를 관리할 수 있습니다.

이와 관련하여 이전에 다뤄진 비슷한 주제를 참고하실 수 있습니다:

이 설명이 도움이 되셨길 바라며, 추가로 궁금하신 부분이 있다면 언제든지 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

shinyurim님의 프로필 이미지
shinyurim

작성한 질문수

질문하기