당우 일기장

DB설계의 핵심은 중복 없애기 이다 본문

DB

DB설계의 핵심은 중복 없애기 이다

당우 2025. 4. 7. 19:34

데이터베이스 설계의 가장 중요한 핵심은 "중복 없애기" 이다

 

db를 설꼐할때 딱 1가지만 기억한다면 이것만 기억하자 

 

중복 없애기

 

예시로 한번 알아보자

예시

위에 표와 같이 게시글 데이터가 DB에 많이 쌓여있다고 가정하자

여기서 이정민 이 쓴 게시글이 3개가 있다고 하자.

그런데 어느 날 이정민 이라는 사람이 김동우 로 개명을 했다.

그래서 게시글에 작성된 작성자의 이름도 전부 이정민 에서 김동우로 고쳐줘야한다

 

그럼 위 게시글의 모든 데이터를 뒤져서 이정민 이라는 이름을 전부 찾아서 김동우로 고쳐줘야한다

 

그런데 위 테이블에서 1,2,번 게시글의 작성자 이름만 고치고, 실수로 132번의 게시글을 안 고쳤다

그러다 시간이 지난후 132번 게시글에 신고가 들어왔다. 그런데 db에서 작성자 이름이 이정민 이라는 

사용자를 아무리 찾아도 안나오는 것이다. 즉, 데이터가 꼬여버린것이다.

 

이런 문제가 발생한 가장 근본적인 이유는 데이터 중복 때문이다. 중복되는 데이터가 많으면 많을수록 무언가를 

수정할때 중복되는 모든 데이터를 찾아서 고쳐야 한다. 이 때 실수로 중복된 데이터를 누락해서 수정을 하지 않는 경우가

발생하고, 이렇게 되면 데이터들 사이에 모순이 생겨버린다

+

이 때 모순되는 상황을 보고 이상현상 이라고 한다

위에 경우는 이상현상 중에서  갱신이상 에 해당한다

 

 

 

이런 문제를 해결하기 위해 만들어낸 DB설계 방법이 정규화 이다

 

정규화(Normalization)란?

데이터들 사이에서 발생한 모순의 근본적인 원인이 데이터 중복이라고 한다

이런 문제를 해결하려면 데이터 중복을 없애면 된다

 

 

아래는 ai한테 물어본 정규형의 답변들이다 한번씩 읽어보고 외우지는 말자.

전부는 아니고 핵심 정규형만 정리해달라했다.

  • 제1정규형(1NF): 모든 데이터가 원자값(더 이상 나눌 수 없는 값)이어야 해요.
    • 예: "이름, 전화번호"를 한 열에 넣지 말고, first_name, phone_number로 나누기.
  • 제2정규형(2NF): 1NF를 만족하고, 기본 키에 완전히 종속되어야 해요. 부분 종속은 안 돼요.
    • 예: 학생ID, 수업ID, 수업장소가 있을 때, 수업장소수업ID에만 종속되어야지 학생ID에 종속되면 안 됨.
  • 제3정규형(3NF): 2NF를 만족하고, 기본 키가 아닌 다른 열에 종속되지 않아야 해요. (이행 종속 제거)
    • 예: 학생ID, 학과, 학과위치가 있으면 학과위치학과에 종속되니까 별도 테이블로 분리.
  • BCNF(보이스-코드 정규형): 3NF를 만족하고, 모든 결정자가 후보 키여야 해요.
    • 예: 복잡한 종속 관계를 더 엄격히 정리.

요약

  • 정규형: 데이터를 중복 없이 효율적으로 저장하기 위한 설계 규칙.
  • 핵심 포인트: 1NF(원자값), 2NF(부분 종속 제거), 3NF(이행 종속 제거), BCNF(결정자 엄격 관리).

더 알면 좋은 정보

  • 정규화를 너무 과하게 하면 테이블이 너무 쪼개져서 성능이 떨어질 수 있어요. 상황에 맞게 설계해야된다

 

-이론-

RDBMS에서 데이터 모델링을 할 때 정규화를 통해 데이터 중복을 최소화 할 수 있게 설계해야한다

그래야 삽입이상 수정이상 삭제이상 과 같은 이상현상을 방지할수 있으며 데이터 무결성을 지킬수있다

 

초보단계일때 굳이 몰라도 되는 이유

스마트폰을 처음 사용할때 설명서를 처음부터 끝까지 정독하지않는다.

가장 필요한 기능인 전화 문자 카메라 등만 먼저 익히고 다음에 부가적인 기능을 하나씩 익혀간다.

 

이처럼 우선은 데이터베이스를 사용하고 설계하는 부분에만 우선적으로 공부하고 살을붙혀가는게 

효율적인 공부방법이다. 실제 프로젝트에 적용할수 있는부분만 먼저 공부하는것을 추천한다

 

----------------------------------------------------------

이 글은 박재성님의 비전공자도 이해할 수 있는 DB설계 입문/실전 강의를 요약한 내용입니다