인프런 커뮤니티 질문&답변
규칙 1에 대해서
작성
·
15
0

규칙 1에 대해서 생각이 나서 드는 의문인데요
누가 좋아요를 눌렀는지 그 컬럼이 지금 여러개의 원소가 들어가있으니까 그 컬럼만 빼서 다른 테이블에 다 만들어야하는거아닌가요? 어짜피 게시글 id는 1,2로 딱 하나하나씩 들어가 있으니까...
왜 이 중복을 밑으로 나열하는지 모르겠어여
답변 2
0
안녕하세요 ! 질문 너무 잘해주셨어요 !
질문해 주신 내용에 대해 답변드려볼게요 ~
"왜 이 중복을 밑으로 나열하는지 모르겠어여"
-> 우선 중요한 건 관계에요 !
좋아요는 한 명의 사용자가 여러 게시글에 누를 수 있고, 하나의 게시글에 여러 명의 사용자가 누를 수 있어요 ~
즉, users와 posts 사이의 관계는 N:M 관계에요 !
이런 경우에는 어느 한쪽 테이블에 FK를 넣어도 결국 한 칸에 여러 값이 들어가는 구조가 되어버려요 ~
그래서 중간 테이블(likes)을 따로 만들어서 “사용자 id + 게시글 id”를 한 줄에 하나씩 저장하는 방식으로 풀어야 해요 !
중복을 밑으로 나열하는 게 아니라, 관계를 행(Row)으로 표현하는 것이라고 이해하시면 돼요 !
관계형 데이터베이스에서는 “여러 개의 관계”를 한 칸에 넣지 않고, 여러 행으로 표현하는 게 원칙이에요:)
추가로 궁금한 점 있으시면 언제든 질문 남겨주세요~~
0
안녕하세요, 인프런 AI 인턴입니다. escho94님.
질문해주신 내용을 바탕으로, 데이터베이스 설계 원칙과 관련된 중복 문제와 해결 방안에 대해 설명드리겠습니다.
데이터베이스 설계에서 규칙 1 (정규화)란?
정규화의 규칙 1에서는 한 열에 여러 개의 값이 들어가지 않도록 보장합니다. 즉, 각 열은 원자성을 유지해야 하며, 한 셀에 복수의 데이터가 포함되면 안 됩니다. 현재 보시는 이미지에서는 ‘누가 좋아요를 눌렀는지’에 여러 원소가 포함되어 있기 때문에, 이것은 정규화의 규칙을 위반하는 형태로 볼 수 있습니다.
중복 데이터를 처리하기 위한 방법
중간 테이블 사용: 여러 사용자가 같은 게시물에 ‘좋아요’를 눌렀을 경우, 중간 테이블(또는 조인 테이블)을 활용하여 이를 관리하는 것이 일반적입니다. 이 접근법을 통해, 게시글과 사용자가 좋아요한 관계를 다대다로 표현할 수 있습니다.
테이블 분리: ‘누가 좋아요를 눌렀는지’ 컬럼의 데이터가 여러 값으로 되어 있으므로, 이를 별도의 테이블로 옮겨 각 좋아요 이벤트를 하나의 레코드로 처리해야 합니다. 예를 들어, 좋아요 테이블(likes)에서는 각 레코드가 [사용자 ID, 게시글 ID]와 같은 형태로 되어 있는 것이 바람직합니다.
예시:
- likes 테이블
- user_id (FK)
- post_id (FK)
이렇게 설계하면, 데이터 중복 없이 각 사용자와 게시글의 관계를 명확히 나타낼 수 있습니다.
더 깊이 있는 사례와 설명은 아래의 링크에서 확인할 수 있습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.




