inflearn logo
강의

Course

Instructor

Websocket/STOMP Chat Service (spring, vue, redis)

entity erd design

ERD 질문

55

wonderwall09in

38 asked

0

안녕하세요 ~ 강의 잘 수강하고 있습니다 !

ERD 부분에서 질문이 생겨 여쭤보게 되었습니다 !!

  1.  

chat_participant 부분에서 전용 pk를 하나 두고 chat_room_id와 member_id를 두셨는데, 혹시 이런 경우에는 pk 자체를 chat_participant_id 라는 전용 pk 말고 chat_room_id, member_id 복합 pk로 사용해도 괜찮을까요 ?

 

  1. message_read_status 테이블을 따로 정규화시킨 이유가 있을까요 ?

chat_message와 거의 비슷한 외래키를 쓰고 있는데 chat_message 테이블 안에 isRead 컬럼 자체를 두는 것이 더 적절하지 않은지 강의를 수강하다 궁금해서 여쭤보게 되었습니다 !!

 

또, 혹시 강의 내용을 공부한 부분에 대해서 학습 목적으로 블로그에 공부한 것들을 정리해서 업로드하는것이 괜찮을까요 ?

 

좋은 강의 제공해주셔서 너무 감사드립니다 ~~~ 오늘 설 연휴인데 새해복 많이 받으셔요 ~~

spring-boot websocket stomp-websocket pubsub vue-3

Answer 2

0

bradkim

안녕하세요~! 강의 열심히 수강해주셔서 감사드립니다.

 

1.복합키로 사용하시는것 전혀 문제없습니다. 저는 코드의 편의성을 위해서 일괄적으로 auto_increment되는 pk를 두고 수업을 진행했습니다.

 

2.이 경우에는 message에 isRead를 두게 되면, 누가 읽었는지 여부는 확인하기가 어렵습니다. 그래서 별도로 테이블을 뗐습니다.

 

마지막으로 블로그에 올리는것 전혀 문제없습니다 ^^

 

새해복 많이 받으세요~!

0

communityai8509

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

ERD 설계와 관련된 질문을 주셨네요. 데이터베이스 설계는 기능적 요구사항과 성능을 고려하여 설계해야 하는데요, 질문에 대한 답변을 드리겠습니다.

  1. 복합 키 사용:

    • chat_room_idmember_id를 복합 키로 사용하는 것도 가능합니다. 복합 키는 두 개 이상의 컬럼을 결합하여 유일성을 보장합니다.
    • 이는 데이터 무결성을 보장할 수 있으며, 특정 채팅방과 회원 간의 고유 관계를 쉽게 유지할 수 있는 장점이 있습니다.
    • 다만, 복합 키를 사용할 경우, 외래 키 참조 시 모든 관련 엔티티에서 이 복합 키를 함께 관리해야 하므로 쿼리가 복잡해질 수 있습니다.
  2. 정규화와 message_read_status 테이블:

    • message_read_status 테이블을 별도로 둔 것은, 메시지 읽음 여부를 여러 사용자가 독립적으로 관리할 수 있도록 하기 위함입니다.
    • 모든 메시지에 isRead 컬럼을 두게 되면, 사용자가 많아질수록 이 컬럼을 관리하기 어려워지고, 데이터 중복이 발생할 수 있습니다.
    • 특히 메시지별로 다수의 참여자가 있어 각 읽음 여부를 개별적으로 다루기 위해서는 테이블을 분리하는 것이 유연한 데이터 관리에 유리합니다.

아래에 관련된 유사한 질문 링크를 공유드리니, 추가적인 예시와 설명을 확인해보세요:
- 데이터베이스 설계에서 복합키와 정규화에 대한 질문
- 테이블 분리 및 정규화의 장점

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

StompHandler 관한 질문

0

80

2

리프레시 토큰은 알아서 구현하면 되는건가요??

0

81

2

cors, csrf 직접 구현

0

65

1

JWT 필터구현

0

101

2

강의 잘듣고 있습니다. 혹시 다음 강의 계획은 없으신가요?

0

58

1

STOMP 동작 과정 질문

0

48

1

chain.doFilter()

0

45

1

자바 21로 소스 작성해도 되나요?

0

61

2

메시지 브로커 선택에 관한 질문

0

65

2

WebSocket과 Spring Security 질문

0

81

2

추가 커스텀 구현 질문 있습니다.

0

61

2

connect와 동시에 구독하는데 구독 검증이 꼭 필요한가요?

0

97

2

저도 동일한 질문인데

0

79

3

token이 필요한 엔드포인트에 의도적으로 토큰 누락시 대처

0

68

2

수업자료가 왜 다 나눠져있나요?

0

78

2

메시지 전송 시 검증

0

61

2

JWT 생성 시 subject 설정에 대한 질문

0

158

3

StompHandler 질문 있습니다.

0

82

2

앱 서비스일 경우

0

85

2

웹소켓 서버 재배포시 고려해야 할 상황 질문

0

110

2

배포 오류 질문

0

125

2

/connect 경로에 대한 토큰 검증의 필요성

0

78

1

JwtTokenProvider 작성중 오류 발생으로 문의드립니다.

0

98

2

수강료가 갑자기 인상됬던데 ㅠ

0

132

1