Replies: 1 comment 2 replies
-
Tag의 description field가 필요 없다면 Tag collection도 필요 없습니다.
위의 쿼리를 사용하면 name이 맞는지 우선적으로 검사한 후, 열람권한이 있는지 검사하게 됩니다.
해당 사항도 tag를 통해 item을 찾는게 아닌 item에서 유효한 tag들을 검색하는 식으로 구현하면 됩니다.
나단님께서 고려하시는 모든 사항들은 Items collection을 생성하지 않는 방법으로 해결 가능합니다. 그리고 원해 초반의 설계는 틀어지기 마련입니다. 죄송해하지 마십시오 ㅎㅎ :) |
Beta Was this translation helpful? Give feedback.
2 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
Notion 상의 Database Schema 페이지 @134130 님의 댓글입니다.
먼저 데이터베이스 설계 과정에서 제가 시간을 더 가지고 어떤 use-case (= 필요한 API request) 가 있는지 꼼꼼히 생각하지 못한 점 죄송합니다. 😓
tag
를 어떻게 적용할 지에 대해 고민하면서, 어떤 use-case 들이 있을지 생각해보았습니다.tag
는 다음과 같은 상황에서 사용됩니다.Item
을 모두 검색 (but, 사용자가 열람 권한이 있는 항목만 검색 가능)인사과
태그를 클릭 →인사과
태그를 가진 모든 항목 보여주기통신
이라고 검색 → 제목, 내용, 또는 태그에통신
이 포함된 모든 항목 보여주기이러한 조건들과
Item
과Tag
가item.tags = [tag._id, ...]
라는 필드로만 연결되어있다면, 위에서 기술한 use-case 들을 모두 수행하기 위해서 다음과 같은 데이터 join 호출들이 필요합니다.Item
을 가져오기 위해서 모든Item
의tag
필드를 반환하는 API 호출 후 검색한tag._id
를 포함했는지 확인 (심각한 검색 성능 저하 예상)item.tags
의 모든 원소의 제목을 반환하는 API 호출 (페이지 로드 성능 저하 예상)Tag
의 제목을 반환하는 API 호출제안해주신대로
item.tags = ["tag_title", ...]
로 설계하는 아이디어가 좋을 것 같습니다. 그리고 추가적으로tag.items = [item._id]
라는 필드를 추가해서tag
로item
을 검색할 때의 성능도 개선할 수 있을 것 같습니다.다시 JSON 형태로 표현해보면 다음과 같습니다.
이 방법을 사용하면 생기는 다른 문제점이 몇가지 있습니다.
tag.items
에 포함된 항목 중 사용자가 열람 권한이 없는 항목일 경우는? (frontend 에서 처리하려면 모든 항목의item.accessGroups
필드를 확인해야함으로 페이지 로드 성능 저하가 예상됨)tag.items
를 어떻게 리스트로 보여줄 것인가? (제목만 표시하더라도item
전체를 반환하는 API 를 호출해야함)이 두 문제들을 해결하기 위해서
tag.items
에accessGroups
나title
필드를 추가하게 되면 항목의 제목을 바꿀 때 추가적인 API 호출이 너무 많아져 데이터 무결성 유지가 어려워질 것 같습니다. 제가 생각해본건 여기까지인데, 지환님의 생각은 어떤지 궁금합니다.Beta Was this translation helpful? Give feedback.
All reactions