데이터베이스

[DataBase] MySQL로 정규화를 적용하여 테이블 설계 해보기

joheamin 2025. 2. 5. 10:13

오늘은 정규화를 적용하여 중복을 제거하고 독립성을 높여
재사용성이 높은 테이블을 설계해보도록 하겠다.




해당 테이블은 회원이 구매할 제품들을 담아놓은 테이블이다.

 

🔷 제1 정규화

칼럼의 원자성을 확보하고
기본키를 설정하는 절차이다.

테이블의 칼럼은 하나의 값만 가질수있는것을 중시하고,
현재 테이블에서는 제품명에 여러개의 값이 들어가있는것을 볼수있다.

이 경우 원자성을 위하여 분해를 해주도록 한다.



이제 기본키를 설정한다.
기본키를 설정하는 방법은 해당 칼럼이 다른 속성을 함수적으로 종속하고있는지

즉 A가 변할경우 B도 변하는가를 기준으로 설정하면 된다.

위에서 기본키로 잡을수 있는것은 


쇼핑 ID / 제품코드 / 회원ID 가 있다.

쇼핑ID가 변한다면 모든 속성이 변하므로 완전 함수 종속
제품코드가 변한다면 제품명만 변하므로 부분 함수 종속
회원ID가 변한다면 이름만 변하므로 부분 함수 종속



🔷 제2 정규화


2 정규화는 기본키가 2개 이상의 칼럼으로 이루어질 경우에만 실행된다.

제 2 정규화는 부분적 함수 종속을 분해하여 제거해주어야하는데 
부분적 함수 종속이란 위에서 얘기한것과 같이 

기본키가 모든 속성을 함수적 종속하고있는것이 아닌
일부분만 종속하고있는 경우 이것을 부분적 함수 종속이라고 한다.

 


👉 해당 테이블의 부분적 함수 종속은 총 2개가 있다.

  • 이름 칼럼만을 종속하는 회원ID
  • 제품명 칼럼만을 종속하는 제품코드


이를 기준으로 테이블을 분해해보겠다.


🔷 제3 정규화

 

제3 정규화는 이행 함수 종속을 제거하는것이다.
이행 함수 종속이란 기본키를 제외한 다른 칼럼들 사이에서도 종속이 발생하는것이다.

예시를 들기위해 product테이블에 가격 칼럼을 추가해서 만들어보겠다.


제품 코드에 따라서 제품명을 결정하고
제품명에 따라서 가격을 결정하고있다.

해당 구조는 이행 함수 종속이므로 이를 분해해주어야한다.