개발자

제 3정규화 관련 질문있습니다.

2023년 12월 11일조회 51

만약 member 테이블에 email (unique) nickname (unique) introduction 이렇게 3개의 컬럼이 있을 경우 email -> nickname, nickname -> introduction, email -> introduction 이므로 3정규화를 진행하게 되면 member(테이블) email nickname member_introduction(테이블) nickname introduction 이렇게 둘로 나뉘는게 맞나요? 결국 한 테이블에 unique 제약조건이 있는 컬럼이 2개 이상일 경우 3정규화를 필수로 진행해야 한다는 얘기 같은데 제가 제대로 이해한건지 궁금합니다.

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.

답변 1

인기 답변

장성호님의 프로필 사진

email -> nickname / nickname -> introduction 이므로 email -> introduction라고 말씀대로 가정해보겠습니다. 이러면 이행 함수 종속 관계가 있기에, 질문자님의 방법대로 정규화를 진행하면 됩니다. 다만 unique 제약조건이 있는 컬럼 2개 이상 있을 경우, 3정규화를 필수로 진행해야한다는 이야기는 아닙니다. 왜냐면 3정규화는 테이블 속성간 종속 관계를 중점으로 보기 때문입니다. 3정규화 규칙은 테이블 내 모든 속성이 기본키에 의존하고, 다른 후보 키에 의존하지 않는 것입니다. 질문자님의 예시에서 introduction이 무엇을 뜻하는지 모르겠어서, 생일(birthday)을 기준으로 해보겠습니다. A 닉네임 - 1900.11.11 - a@google.com B 닉네임 - 1900.11.11 - b@google.com 이러한 데이터가 있을 때 질문 내용에서는 현재 기본키가 주어지지 않아, 다음 시나리오를 검토해보겠습니다. 1. 중복되지 않은 닉네임을 고른다. 2. 이메일을 입력한다. 이메일은 중복될 수 없다. 3. 사용자가 생일을 선택한다. 생일은 중복 가능하다. 4. DB 저장은 닉네임을 PK로 한다. 이럴 경우에는 닉네임 -> 이메일, 닉네임 -> 생일 이라는 관계만이 존재합니다. 어떤 이유로 이메일을 변경한다고 하더라도, unique만 만족하면 생일은 바뀔 이유가 없습니다. 만약 3NF를 만족시키지 못하려면 시나리오가 이래야 됩니다. 1. 중복되지 않은 닉네임을 고른다. 2. 이메일을 입력한다. 이메일은 중복될 수 없다. 3. 이메일에 연동되어 있는 생일 정보를 가져온다. 4. DB 저장은 닉네임을 PK로 한다. 이러면 이메일을 변경했을 때 생일이 같이 변경될 수 있는 종속 관계가 생깁니다. 이때는 닉네임 -> 이메일 -> 생일 이라는 이행 함수 종속이 있으므로, 3NF를 만족하지 못 합니다.

salbyul님의 프로필 사진

salbyul

작성자

공부중2023년 12월 11일

완벽하게 이해했어요! 정말 감사합니다 ㅎㅎ

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!