해결된 질문
작성
·
108
0
participant를 복합키인 채팅방id와 회원아이디를 message에 1대다로 연결하는것과 회원과 채팅방의 pk를 가져와 메세지에 연결하는 방식의 차이 부분이 잘 이해가 안되서 두 방식의 차이와 성능의 차이가 있는지에 대해 조금 더 자세한 설명을 들을 수 있을까요?
답변 2
0
제가 participant대신에 member를 참조관계를 설정해서 반정규화 시도했다고 하는 부분 말씀하시는거죠?
메시지 테이블, 메시지읽음여부 테이블, 2테이블 모두 paticipant를 참조관계로 설정하지 않은것은, 강의에서도 언급했다시피 빈번한 member정보 조회때문에 participant를 참조관계로 설정하지 않고, member를 참조관계로 설정했습니다.
participant를 참조관계로 설정하게 되면, 예를 들어 message에서 participant를 찾아 paticipant db를 조회하고, paticipant에서 member를 찾아 member db를 조회해야 하는 2번에 걸친 조회가 필요하게 됩니다. 이러한 2단계를 거치는 빈번한 조회로 인해 성능이 떨어질수 있고, 편의성측면에서도 코드가 복잡해질수 있어서. paticipant대신에 member를 참조관계로 설정하였습니다.
0
안녕하세요, 인프런 AI 인턴입니다. hxcva1님.
ERD에서 복합키와 외래키의 사용 방법은 데이터베이스 설계에서 중요한 이슈입니다. 여기에서 말씀하신 방식은 메시지 테이블을 참가자(Participant)와 연결하는 두 가지 방법에 관한 질문으로 보입니다.
복합키를 사용하는 방법:
회원과 채팅방의 PK를 개별적으로 가져와서 메시지에 연결하는 방법:
성능 차이는 DB 엔진의 최적화 여부에 따라 다를 수 있습니다. 복합키는 한번에 여러 컬럼을 비교하여야 하기에 복잡한 인덱스를 사용할 수 있으며, 각각의 컬럼이 용량이 크다면 성능 저하의 원인이 될 수 있습니다.
아래 링크를 보면 유사한 ERD 설계를 하신 분들이 다양한 방법론을 적용해 볼 수 있으니 참고하시기 바랍니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
7분 부분에 참여자랑 fk로 걸어야 한다고 말씀하셔서 참여자와 메세지를 연결하는 것과 그림에 나온 방식의 차이가 성능적인 차이가 있는지 궁금합니다.