inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

비전공자도 이해할 수 있는 DB 설계 입문/실전

[실습] 화면 UI 디자인을 보고 DB 설계해보기 - JSCODE 투두리스트

카테고리 테이블에 사용자 FK 사용 시 중복 여부

해결된 질문

145

안형준

작성한 질문수 2

0

Choose Category의 UI를 보면 Create New라는 항목이 보입니다. 즉 내가 원하는 카테고리를 추가하는 기능이 있는 것으로 보이고, 내가 추가한다고 남에게도 그 항목이 보이면 안되므로, 혹은 기존의 카테고리의 아이콘이나 색깔을 바꾼다고 남에게도 적용되면 안되므로 categories 테이블에는 사용자의 FK값이 있어야 할것으로 판단됩니다.

이렇게 할 경우, tasks 테이블에서 category의 FK와 사용자의 FK를 받게 될텐데, 외래키로 받은 category에도 사용자의 FK가 포함되어 있어서 사용자 FK정보를 두 번 갖게 되는것 같습니다. 물론 task나 category에서 한 번 지정된 사용자가 변경되는 일은 없을 것으로 보이지만, 그래도 엄밀히 말하면 데이터가 중복이 되는 것이 아닌지 궁금합니다.

 

mysql dbms/rdbms database dba

답변 2

0

JSCODE 박재성

안녕하세요 형준님! 예리하게 잘 질문해주셨네요👍

 

Choose Category의 UI를 보면 Create New라는 항목이 보입니다. 즉 내가 원하는 카테고리를 추가하는 기능이 있는 것으로 보이고, 내가 추가한다고 남에게도 그 항목이 보이면 안되므로, 혹은 기존의 카테고리의 아이콘이나 색깔을 바꾼다고 남에게도 적용되면 안되므로 categories 테이블에는 사용자의 FK 값이 있어야 할 것으로 판단됩니다.

-> 형준님이 말씀해주신 말씀이 맞습니다. 기존 카테고리는 사용자별로 구분되어 생성이 되어야 하기 때문에 사용자 FK가 있어야 하는게 맞습니다:)

 

tasks 테이블에서 category의 FK와 사용자의 FK를 받게 될텐데, 외래키로 받은 category에도 사용자의 FK가 포함되어 있어서 사용자 FK정보를 두 번 갖게 되는것 같습니다. 물론 task나 category에서 한 번 지정된 사용자가 변경되는 일은 없을 것으로 보이지만, 그래도 엄밀히 말하면 데이터가 중복이 되는 것이 아닌지 궁금합니다.

-> 여러 테이블에 동일한 FK의 컬럼이 있다고 하더라도, FK 컬럼의 중복은 데이터 중복으로 보지 않습니다! (데이터를 수정할 때 FK를 동시에 수정해야 하는 수정 이상 현상이 발생하지 않기 때문이에요)

그리고 말씀해주신 대로 category에만 사용자 FK를 둘 수도 있고, 아니면 category와 tasks에 둘 다 사용자 FK를 두게끔 설계를 할 수도 있습니다. 이 두 가지 방법 전부 옳은 방법입니다. 불필요하게 FK를 여러 테이블에 둘 필요는 없으나, 만약 각 테이블에서 FK의 컬럼을 추가로 두는 게 데이터를 조회하는 데 편리할 경우 FK를 두게끔 설계를 하는 편입니다.

 

이 외로 궁금하신 점 생기시면 또 질문 남겨주세요~~~

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 안형준님께서 질문하신 “카테고리 테이블에 사용자 FK 사용 시 중복 여부”에 대한 내용을 다루겠습니다.

데이터베이스 설계에서 중복 데이터는 정상화 과정을 통해 최소화하는 것이 일반적입니다. 그러나 현재 여러분이 고려하고 계신 구조에서의 중복은 필연적이며, 실제로 문제를 일으키지 않습니다.

  1. Category 테이블의 사용자 FK: 카테고리를 개인적인 용도로 작성할 수 있도록 사용자 ID를 외래 키로 추가하게 되면 특정 사용자에만 보이는 개별 카테고리를 쉽게 구분할 수 있습니다.

  2. Task 테이블에서 외래 키 사용: Task 테이블에서도 마찬가지로 category와 관련된 사용자 ID가 필요할 것입니다. 이런 경우 같은 사용자 정보가 두 테이블 모두에 나타나게 됩니다.

이러한 설정은 특정 사용자가 추가한 카테고리들이 해당 사용자에게만 연결되는 것을 가능하게 만들며, 각 카테고리에 대해 한 번만 데이터를 저장함으로써 관리가 수월해집니다. 따라서, 디자인 상의 일부 중복처럼 보일지라도, 이는 논리적 데이터 무결성을 유지하면서 실제로 각 테이블의 외래 키 이러한 방식으로 유지 가능합니다.

유사한 주제를 다룬 기존 답변을 참고하시면, 데이터 무결성과 효율적인 데이터베이스 설계 방식에 대해 더 깊이 이해할 수 있습니다. 다음 링크들을 참고해 보시길 권장드립니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

진짜중복/가짜중복을 나누는데 있어서

0

34

2

규칙 1에 대해서

0

53

2

강사님도 실제로 구글 시트에 이런식으로 적으면서하는걸까요?!

0

56

2

만약 신고사유가 객관식 다운드롭형태일때는 테이블을 따로 분리하는건가요??

0

56

2

설문 후속강의 쿠폰 제공 이벤트에 대해서

0

76

2

FK 값 중복과 규칙 3 질의

0

76

2

7-42. 역정규화 섹션에 나온 참고글 링크

0

44

2

[JSCODE 쇼핑몰 (2)] 상품 테이블의 등록한 사람 질문 입니다.

0

48

1

몽고DB 강의 계획

0

80

2

프론트단에서 고정 저장 / 백엔드에서 조회 저장

0

90

1

게시글 작성자 Id(사용자 FK) 숫자가 맞나요?

0

96

2

UI를 보고 저장해야할 데이터인지 파악하는 팁이 있을까요?

0

97

2

안녕하세요 강사님 문의 사항이 있습니다

0

109

2

실제 개발에 들어가거나 서비스 운영 중에도 DB설계를 바꾸나요?

0

233

2

관리자 테이블

0

228

2

외래 키 지정은 필수가 아닌 건가요?

0

256

2

게시판 닉네임, 아이디 관련질문

0

126

2

개발자 및 DB 설계 관련 질문

0

155

1

중복데이터 질문 있습니다.

0

104

2

db 컬럼에 JSON 박아도 되나요?

0

315

2

erd 진짜 안그려도 되나요

0

279

2

그냥 하나씩 만들어나가면서 DB 설계를 그때그때 하는건 틀린건가요?

0

106

2

JSCODE 게시판에서 댓글 관련하여 설계

0

130

2

주문수량과 재고량 관련하여 테이블 분리시

0

200

2