작성
·
346
0
안녕하세요.
테이블 설계하다보니 궁금증이 생겼습니다.
예를들면,
User ----< JoinCall >---- Call
이런식으로 User, JoinCall, Call도 계속 늘어나는 상황입니다.
특정 User가 참여한 Call 중에서 특정 callStatus만 찾아내려 하는데 검색 속도를 높이기 위해서는 JoinCall에도 callStatus가 들어가야 할 것 같습니다.
검색속도롤 높이기 위해 이런식으로 중복 데이터가 있게 설계를 하는 경우도 있을까요?
확인 부탁드립니다.
감사합니다.
답변 5
0
Call에 대한 정의가 명확하지 않아서 좀더 설명해 주셔야 할 것 같습니다. 속도는 문제가 없어 보이는 것이 UserId가 PK일 것입니다. 그리고 CallId가 무엇인지는 모르지만 이것도 PK이기 때문에 두 조건을 만족하는 도메인 내에서 특정 status를 찾는 겁니다. 많아봤자 몇천개 정도? 만일 한 User의 JoinCall 갯수가 수십만개로 간다면 그 때는 CallStatus를 별도 테이블로 독립시키고 JoinCall 테이블에 참여시켜서 CallStatus 조차도 PK로 검색될 수 있게 하면 되겠습니다.
0
0
네. 여러가지 방법이 있겠어요. Joincall에. CallStatus가 추가도는게 중복이라고 생각하시지만 중복이라기 보다는 역정규화라고 볼 수 있어요.
User에 대해서 UserCallStatus테이블을 만들어서 사용할 수도 있죠. 사용자 입장에서 보기 위해서는 Call은 도움이 안되잔아요. 결국 useeid가 들어간 어떤 테이블이 필요한 거죠
0
아... 제 질문이 명확하지 않았네요.
일단 화상회의라고 보면 될 것 같습니다.
하나의 화상회의에 여러명의 유저가 접속한다고 가정하면
User에는 User정보가 들어갑니다.
JoinCall에는 User별로 화상회의 Room에 들어가기위해 부여된 패스워드가 있습니다.
Call에는 Room이름이나 화상회의 상태정보(생성되었음/시작했음/끝났음)도 들어갑니다.
한 유저가 참여하고 있는 모든 Call들에 대해 상태별로 빠르게 검색하려면 JoinCall에 상태정보를 중복으로 넣어야 가능할 것 같아서 질문드렸습니다.
날짜 등으로 검색하게 제한을 두는 방법도 있겠지만 전체를 보기에는 상태별 검색이 더 좋아보이네요.
0