강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của escho04
escho04

câu hỏi đã được viết

Nhập môn và Thực hành Thiết kế DB dành cho cả những người không chuyên ngành

[Thực hành] Thiết kế DB dựa trên yêu cầu - Cộng đồng JSCODE (2)

규칙 1에 대해서

Viết

·

17

0

image.png

규칙 1에 대해서 생각이 나서 드는 의문인데요

누가 좋아요를 눌렀는지 그 컬럼이 지금 여러개의 원소가 들어가있으니까 그 컬럼만 빼서 다른 테이블에 다 만들어야하는거아닌가요? 어짜피 게시글 id는 1,2로 딱 하나하나씩 들어가 있으니까...
왜 이 중복을 밑으로 나열하는지 모르겠어여

mysqldbms/rdbmsdatabasedba

Câu trả lời 2

0

jscode님의 프로필 이미지
jscode
Người chia sẻ kiến thức

안녕하세요 ! 질문 너무 잘해주셨어요 !

질문해 주신 내용에 대해 답변드려볼게요 ~

 

"왜 이 중복을 밑으로 나열하는지 모르겠어여"

-> 우선 중요한 건 관계에요 !

좋아요는 한 명의 사용자가 여러 게시글에 누를 수 있고, 하나의 게시글에 여러 명의 사용자가 누를 수 있어요 ~

즉, users와 posts 사이의 관계는 N:M 관계에요 !

이런 경우에는 어느 한쪽 테이블에 FK를 넣어도 결국 한 칸에 여러 값이 들어가는 구조가 되어버려요 ~

그래서 중간 테이블(likes)을 따로 만들어서 “사용자 id + 게시글 id”를 한 줄에 하나씩 저장하는 방식으로 풀어야 해요 !

중복을 밑으로 나열하는 게 아니라, 관계를 행(Row)으로 표현하는 것이라고 이해하시면 돼요 !

관계형 데이터베이스에서는 “여러 개의 관계”를 한 칸에 넣지 않고, 여러 행으로 표현하는 게 원칙이에요:)

추가로 궁금한 점 있으시면 언제든 질문 남겨주세요~~

0

안녕하세요, 인프런 AI 인턴입니다. escho94님.

질문해주신 내용을 바탕으로, 데이터베이스 설계 원칙과 관련된 중복 문제와 해결 방안에 대해 설명드리겠습니다.

데이터베이스 설계에서 규칙 1 (정규화)란?

정규화의 규칙 1에서는 한 열에 여러 개의 값이 들어가지 않도록 보장합니다. 즉, 각 열은 원자성을 유지해야 하며, 한 셀에 복수의 데이터가 포함되면 안 됩니다. 현재 보시는 이미지에서는 ‘누가 좋아요를 눌렀는지’에 여러 원소가 포함되어 있기 때문에, 이것은 정규화의 규칙을 위반하는 형태로 볼 수 있습니다.

중복 데이터를 처리하기 위한 방법

  1. 중간 테이블 사용: 여러 사용자가 같은 게시물에 ‘좋아요’를 눌렀을 경우, 중간 테이블(또는 조인 테이블)을 활용하여 이를 관리하는 것이 일반적입니다. 이 접근법을 통해, 게시글과 사용자가 좋아요한 관계를 다대다로 표현할 수 있습니다.

  2. 테이블 분리: ‘누가 좋아요를 눌렀는지’ 컬럼의 데이터가 여러 값으로 되어 있으므로, 이를 별도의 테이블로 옮겨 각 좋아요 이벤트를 하나의 레코드로 처리해야 합니다. 예를 들어, 좋아요 테이블(likes)에서는 각 레코드가 [사용자 ID, 게시글 ID]와 같은 형태로 되어 있는 것이 바람직합니다.

예시:
- likes 테이블
- user_id (FK)
- post_id (FK)

이렇게 설계하면, 데이터 중복 없이 각 사용자와 게시글의 관계를 명확히 나타낼 수 있습니다.

더 깊이 있는 사례와 설명은 아래의 링크에서 확인할 수 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏

추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Hình ảnh hồ sơ của escho04
escho04

câu hỏi đã được viết

Đặt câu hỏi