안녕하세요. DB 설계 관련 질문드립니다. 0 2 3,046

by beanbean [DB 모델링/설계] 설계 모델링 [2023.01.10 01:16:04]


안녕하세요. 게시판 프로젝트를 진행하다가 해시태그 기능을 도입하는데 테이블 설계를 어떤 방식으로 해야할지 고민이 생겨 질문드립니다.

 

테이블은 User(사용자), Post(게시글)이 있을 때 게시글에 해시태그를 0~N개 지정할 수 있습니다.

그리고 해시태그로 검색 시 관련된 게시글 목록을 조회할 수 있습니다.

 

첫 번째 방법입니다.

Post 테이블

id (PK) title content user_id (FK)
id (int) 제목 (varchar) 내용 (varchar) 작성자 id (int)

Hashtag 테이블

id (PK) name post_id (FK)
id (int) 태그_내용 (varchar) 게시글 id (int)

위와 같이 Post 테이블과 Hashtag 테이블을 구성합니다. Post 테이블과 Hashtag 테이블을 일대다 관계로 구성합니다.

이 방법은 서로 다른 게시글에서 동일 해시태그를 저장했을 때 문자열이 중복됩니다.

 

두 번째 방법입니다.

Post 테이블

id (PK) title content user_id (FK)
id (int) 제목 (varchar) 내용 (varchar) 작성자 id (int)

Hashtag 테이블

id (PK) name
id (int) 태그_내용 (varchar)

PostHashtag 테이블

post_id (PK,FK) hashtag_id (PK,FK)
게시글 id (int) 해시태그 id (int)

이 방법은 Hashtag 테이블에 중복되지 않은 고유한 해시태그들을 저장하고 Post 테이블과 Hashtag 테이블을 다대다 관계로 구성한 방식입니다.

 

첫 번째 방법은 해시태그로 게시글을 검색할 때 찾으려는 모든 데이터를 문자열로 검색해야 하고,

두 번째 방법은 Hashtag 테이블에서 검색하려는 해시태그의 id를 찾을 때만 문자열로 검색하고 이후에는 해당id로(int형으로) PostHashtag 테이블에서 검색해야 한다고 생각합니다.

 

두 방법 중 어떤 방법이 검색할 때 더 효율적인지 궁금합니다. 또는 새로운 기능이 추가됐을 때 확장성까지 고려한다면 두 번째 방법이 더 좋은 것 같기도 하지만 불필요하게 테이블을 나눈 것 같다는 생각도 듭니다. 

문제를 해결하기 위해 관련 키워드나 추천하시는 방법이 있다면 조언 부탁드립니다. 감사합니다.

by jkson [2023.01.10 15:27:33]

설계는 명확한 답이 없어서 말씀하신 대로 설계 방향에 따라 장단점이 있지요. 해시태그를 단순히 게시글 검색용으로만 사용할 것이냐 혹은 해시태그 자체에 어떤 의미를 둘 것이냐(해시태그만으로 리스트를 나열하여 사용자에게 보여준다든지..) 에 따라 설계 방향이 달라질 것 같네요. 작성하신 글에서 이미 많은 고민을 하신 것 같은데 앞으로 해시 태그를 어떤 방향으로 사용할지 고민하시면 답이 나올 것 같습니다.


by beanbean [2023.01.11 13:45:10]

답변 감사드립니다! 덕분에 고민이 해결됐습니다! 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입