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