[면접을 위한 CS 지식 노트] 데이터베이스 ERD와 정규화 과정

재오·2023년 5월 21일
2

CS

목록 보기
17/35
post-thumbnail

ERD는 데이터베이스를 구축할 때 가장 기초적인 뼈대 역할을 하며, 릴레이션 간의 관계들을 정의한 것이다. 서비스를 구축한다면 가장 먼저 신경 써여 할 부분이다.

ERD의 중요성

ERD는 시스템의 요구 사항을 기반으로 작성되며 이 ERD를 기반으로 데이터베이스를 구축한다. 데이터베이스를 구축한 이후에도 디버깅 또는 비즈니스 프로세스 재설계가 필요한 경우 설계도 역할을 담당하기도 한다.

정규화 과정

정규화 과정은 릴레이션 간의 잘못된 종속 관계로 인해 데이터베이스 이상 현상이 일어나서 이를 해결하거나, 저장 공간을 효율적으로 사용하기 위해 릴레이션을 여러 개로 분리하는 과정이다. 여기서 데이터베이스 이상 현상은 회원이 여러 개의 등급을 갖거나 삭제할 때 필요한 데이터가 같이 삭제되고, 데이터를 삽입해야 하는데 하나의 필드 값이 NULL이 되면 안되어서 삽입하기 어려운 현상을 의미한다.
정규화 과정은 정규횽 원칙을 기반으로 정규형을 만들어가는 과정이다.

정규형 원칙

정규형 원칙은 같은 의미를 표현하는 릴레이션이지만 좀 더 좋은 구조로 만들어야 하고, 중복성은 감소해야 하고, 독립적인 관계는 별개의 릴레이션으로 표현해야 하는 것을 의미한다.

제1정규형

릴레이션의 모든 도메인이 더 이상 분해될 수 없는 원자 값으로 구성되어야 한다. 릴레이션의 속성 값 중에서 한 개의 기본키에 대해 두 개 이상의 값을 가지는 반복 집합이 있어서는 안된다. 예시는 아래와 같다.

제2정규형

릴레이션이 제1정규형이며 부분 함수의 종속성을 제거한 형태를 의미한다. 부분 함수의 종속성 제거란 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속적인 것을 말한다.
주의해야할 점은 동등한 릴레이션으로 분해해야 하고, 정보 손실이 발생하면 안된다.

제3정규형

제2정규형이고 기본키가 아닌 모든 속성이 이행적 함수 종속을 만족하지 않는 상태를 말한다. 여기서 이행적 함수 종속이란 A -> B와 B -> C가 존재하면 논리적으로 A -> C가 성립하는데 이를 집합 C가 집합 A에 이행적으로 함수 종속이 되었다고 한다.

보이스/코드 정규형

보이스/코드 정규형은 제3정규형이고, 결정자가 후보키가 아닌 함수 종속 관계를 제거하여 릴레이션의 함수 종속 관계에서 모든 결정자가 후보키인 상태를 말한다.
위에 에시를 보면 {학번, 수강명} 또는 {학번, 강사}가 후보키가 되며, 만약 범석이라는 강사가 '롤'이라는 수강명을 담당한다고 했을 때 이를 삽입하면 학번이 NULL이 되는 문제가 발생한다. 이 때 강사 속성을 분리하면 롤-범석이 제대로 들어가고 학번-강사 / 수강명-강사 로 잘 분해된 모습을 볼 수 있다.

위와 같이 정규형 과정을 거쳐 테이블을 나눈다고 모두 성능이 100% 좋아지는 것은 아니다. 성능이 좋아질 수도 있고 나빠질 수도 있다. 서비스에 따라 정규화 또는 비정규화 과정을 진행해야 한다.

profile
블로그 이전했습니다

0개의 댓글