[MySQL] 같은 구조를 갖는 하위 테이블을 하나로 통합하는게 좋은지 상위 테이블 마다 주는지

조회수 714회

예를 들어 posts 테이블과 users 테이블이 있고, likes 테이블과 bookmarks 테이블이 있습니다.

likes와 bookmarks 둘 다 상위 테이블인 posts와 users의 FK키를 가지고 있는데요,

만약 likes 테이블을 하나만 두고 parentTable 칼럼과 parentId 칼럼을 만들어서

FROM
    parentTable = "posts" AND
    parentId = 1

이런식으로 SELECT 하는게 좋은지 아니면

posts_likes 라는 테이블을 만들고 parentId만 채우고

FROM
    parentId = 1

이런식으로 하는게 좋은지 모르겠습니다.

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    이런 경우는 결국 설계 컨셉 차원에서 결정해야 할 것 같습니다.

    • 만약 likesbookmarks가 본질적/기술적으로 같은 것이라서 유형 구분만 해야 하는 거라면 users_reactions_posts 같은 테이블을 만들고 reactionType"L", "B" 같은 값을 찍어서 (그리고 reactedUser 컬럼이랑 reactedPost 컬럼에 FK값 찍어서) 구분하면 되겠지요. 이게 말씀하신 "likes 테이블 하나만 두는" 경우에 해당합니다.
    • 만약 likesbookmarks가 구조만 우연히 같을 뿐 본질적으로는 다르게 접근할 필요가 있다면 (e.g. bookmarks에도 라이크를 찍을 수 있는 미친 경우...) posts_likes 테이블과 posts_bookmarks 테이블이 각각 따로 있어야겠지요. 그때는 말씀하신 것처럼 "parentId만 채우"는 것만으로도 충분할 테고요.
    • 추석에도 빠른 답변 고맙습니다. 사실 질문의 의도는 쿼리 속도 부분이었는데 인덱싱을 해놓으면 상관 없는거겠죠? Donghyun Peter Kim 2018.9.25 11:33
    • 속도가 신경쓰이신다면 테이블을 분리해서 쓰시는 게 좋겠네요. 엽토군 2018.9.25 21:42

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)