데이터 정규화란? (제1 정규화)
주니어 개발자들중 관계형 데이터베이스를 사용 한다면 한번 쯤은 들어봤을 것이다! '데이터 정규화' 이 녀석은 대체 무엇일까? 데이터베이스의 설계에서 중복을 최소화하여 데이터를 구조화하
moonriver252.tistory.com
이어집니다!
우선 제2 정규화 설명에 앞서 Primary Key(기본키)와 Composite key(복합키)의 개념을 알고 있어야 한다.
Primary Key(PK, 기본키)란
행을 구분하기 위해 유니크한 데이터를 가지고 있는 컬럼을 말한다
(최소의 정보로 행을 고유하게 구분해 주는 컬럼)
Composite Key(CK, 복합키)란
Primary Key가 없을 경우 2개 이상의 컬럼을 합쳐서 key로 지정해주는 것이다.
제2 정규화
제2 정규화란 제 1정규화를 만족한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 방식이다.
(부분 함수 종속을 모두 제거)
이를 간단하게 말하자면
현재 테이블의 주제와 관련없는 컬럼을 다른 테이블로 빼는 것을 제 2정규화라고 한다!
ex)
예를 들어 아래와 같이 제1 정규화를 진행한 [학생들의 수강 현황] 테이블이 있다. (Primary Key가 없는 상태)
수강유무 | 이름 (CK) | 수강과목 (CK) | 강의실 |
수강중 | 가가 | PostgreSQL | 101호 |
수강중 | 나나 | MongoDB | 202호 |
수강포기 | 나나 | MySQL | 303호 |
수강포기 | 다다 | MySQL | 303호 |
이 테이블에는 PK가 없기 때문에 2개의 컬럼을 연결해서 Primary Key 역할을 할 수 있게 만들어 줘야 한다.
여기서 우리는 이를 해결하기 위해 이름과 수강과목 컬럼을 연결할 것이다.연결하게 되면 이름과 수강과목 컬럼을 Composite key 라고 부른다.
하지만 이때 제 2 정규형을 만족하기 위해서는 Composite key에 종속된 컬럼이 있으면 안된다!!
이게 무슨 소린가 싶으면 테이블을 자세히 보면 된다.
테이블을 자세히 보면 강의실 컬럼은 수강과목 컬럼에 따라서만 결정이 된다.
즉, 강의실은 수강과목에 부분 함수 종속되어 있다고 볼 수 있다!
결국 이 테이블은 CK에 종속된 컬럼이 있는 상태이다.
(테이블에 부분 함수 종속이 있는 상태)
추가적으로 이 경우에는 MySQL의 강의실을 수정 하려고 하면 시간이 오래걸린다!
(303호 -> 304호 변경시 하나씩 다 변경해야함 - 데이터가 많다고 가정)
이를 아래와 같이 분해하여 테이블을 구성하면
(부분 함수 종속되어 있는 강의실 컬럼을 다른 테이블로 빼버리면)
[학생들의 수강 현황 테이블]
수강유무 | 이름 | 수강과목 |
수강중 | 가가 | PostgreSQL |
수강중 | 나나 | MongoDB |
수강포기 | 나나 | MySQL |
수강포기 | 다다 | MySQL |
[과목 테이블]
수강과목 | 강의실 |
PostgreSQL | 101호 |
MongoDB | 202호 |
MySQL | 303호 |
분해하여 테이블을 구성하였으므로 강의실 수정시 한곳만 수정 하면 된다.
즉, 추후 데이터를 수정하기 편하다!
또한 학생들의 수강 현황 테이블에는 부분 함수 종속이 없게 된다!
이렇게 구성한 테이블을 제 2정규형을 만족하는 테이블이라고 할 수 있다.
제2 정규화의 장,단점
장점
테이블을 분해 함으로써 일부 데이터 수정이 편리해진다.
단점
분해했기 때문에 데이터 조회시 다른 테이블의 데이터까지 끌고와야 알 수 있다.
(데이터를 select로 조회할 때 귀찮은 점 발생)
+ select는 테이블에서 데이터를 추출하는 SQL 명령문이다
끝!
'DB (데이터베이스)' 카테고리의 다른 글
postgresql(DB) prisma(ORM) 연동 참고 자료 (2) | 2023.04.21 |
---|---|
데이터 정규화란? (제3 정규화) (0) | 2023.04.20 |
데이터 정규화란? (제1 정규화) (2) | 2023.04.14 |