https://dbdiagram.io/d/644f4bc0dca9fb07c44b79e3

feedback_board 테이블: 피드백 게시판을 관리하기 위한 테이블입니다. 게시글의 제목, 내용, 작성일, 조회수, 댓글 수 등의 정보가 포함되어 있습니다.
feedback_comment 테이블: 피드백 게시글에 작성된 댓글을 관리하는 테이블입니다. 각 댓글은 게시글과 연결되며, 작성일, 내용, 대댓글 수 등의 정보를 저장합니다.
feedback_re_comment 테이블: 피드백 게시글의 댓글에 작성된 대댓글을 관리하는 테이블입니다. 각 대댓글은 원본 댓글과 연결되며, 작성일, 내용 등의 정보를 저장합니다.
위와 같은 방식으로 free_board, job_board, promotion_board 테이블과 각각에 해당하는 댓글과 대댓글 테이블을 구현하였습니다. 대량의 데이터를 다루는 프로젝트가 아니였기에, 테이블을 분리하는 방법을 선택하여 게시글과 댓글, 대댓글 데이터를 독립적으로 관리하였습니다.
tag 테이블: 태그를 관리하기 위한 테이블입니다. 각 태그는 고유한 이름을 가지며, 해당 태그를 사용한 게시글과 연결됩니다.
tag_to_feedback_board, tag_to_free_board, tag_to_promotion_board 테이블: 각각의 게시판 게시글과 태그를 연결하는 테이블입니다. 이를 통해 게시글과 태그 사이의 다대다 관계를 구현하였습니다.
follow_following 테이블: 팔로우 관계를 다대다 관계로 모델링하여 중간 테이블을 사용하였습니다.
태그는 게시판과 무관하게 통합적으로 관리되어야 하는 데이터입니다. 하지만 현재의 데이터 설계에서는 게시판을 추상화하거나 일반화하지 않은 채로 각각의 게시판마다 태그를 별도로 관리하는 방식을 사용했습니다. 이로 인해 해당 태그가 포함된 게시글 모아보기, 태그 인기도 통계 등 필요한 기능을 구현하기가 어려웠고, 아래와 같은 단점이 발생하였습니다.
태그의 데이터 중복과 일관성: 각 게시판별로 태그를 별도로 관리하다보니 동일한 태그가 여러 테이블에 중복해서 등록될 수 있습니다. 이로 인해 데이터의 일관성이 깨질 수 있으며, 태그의 이름이나 속성이 변경되는 경우 모든 관련 테이블을 일일이 업데이트해야 하는 번거로움이 발생합니다.
유지보수의 어려움: 새로운 게시판이 추가되거나 기존의 게시판이 변경될 때마다 해당 게시판과 관련된 태그 테이블도 추가하거나 변경해야 합니다. 이로 인해 데이터베이스 구조의 변경이 빈번하게 발생할 수 있고, 유지보수가 복잡해집니다.
조회 복잡성: 모든 게시판의 태그를 종합적으로 분석하거나 통계를 내기 위해서는 별도의 복잡한 처리가 필요합니다. 여러 테이블을 조인하거나 데이터를 합치는 작업이 번거로워집니다.
태그 ID 충돌: 각 게시판의 태그 테이블에서 태그 ID를 별도로 관리하다보니 두 게시판에서 동일한 ID를 가진 태그를 사용하려고 할 때 충돌이 발생할 수 있습니다.
게시판 추상화 및 일반화: 각각의 게시판마다 별도의 테이블을 생성하는 대신, 게시판을 추상화하고 일반화하여 하나의 게시판 테이블과 태그, 댓글 테이블을 연결하는 방식을 도입합니다. 이를 통해 다중 게시판에 대한 중복된 데이터를 제거할 수 있으며, 댓글, 태그를 통합적으로 관리할 수 있습니다. 추상화된 게시판 테이블에는 게시판의 종류를 구분하는 컬럼이 포함되어야 합니다.
태그 인기도 통계관리: 태그 테이블에 인기도 컬럼을 추가해 태그의 순위를 매기는 기능을 추가할 수 있습니다. 이렇게 함으로써 사용자들에게 인기있는 태그를 보여주고 검색 기능을 향상시킬 수 있습니다
이렇게 유익한 내용을 공유해주셔서 감사합니다.