정규화란 ?
정규화의 최종 목표는 테이블 간 중복된 데이터를 없애기 위함이다.
중복된 데이터를 허용하지 않음으로써 무결성(Integrity)을 유지할 수 있고 DB 저장 공간을 확보할 수 있다.
정규화 단계
[제 1정규화]
테이블의 컬럼이 원자값(Atomic Value)을 갖도록 테이블을 분해하는 것이다.
[제2 정규화]
제 1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것이다.
완전 함수 종속 ? - 기본키의 부분집합이 결정자가 되면 안 된다.
예를 들어 내가 설계한 테이블에서
복합키인 기본키 (친구 정보 아이디, 회원 아이디)의 부분집합인 회원 아이디로 친구 아이디 컬럼을 찾을 수 있다.
즉 기본키의 부분집합이 결정자가 된 것이라 기존의 테이블에서 친구 아이디를 분리하여 별도의 테이블을 만들어 제2정규형을 만족시켜야 한다.
수정 된 테이블
친구 테이블을 분리해주었다.
이렇게되면 한 회원의 친구 요청함, 친구 목록을 조회할 때 아이디로 상태를 먼저 조회하고
친구 정보 테이블에서 그에 해당하는 친구 아이디를 찾아서 띄워주면 된다.
[제 3정규화]
제 2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것.
이행적 종속 ? - A -> B, B -> C가 성립할 때 A -> C가 성립되는 것을 의미.
[BCNF 정규화]
BCNF 정규화란 제 3정규화를 진행한 테이블에 대해 모든 결정자가 후보키가 되도록 테이블을 분해하는 것
슈퍼키 ? - (유일성 O, 최소성 X) 유일성의 특성을 만족하는 속성들의 집합.
후보키 ? - (유일성 O, 최소성 O) 슈퍼키 중에서 최소성을 만족하는 키
[학생번호]는 슈퍼키가 될 수 있다.
[학생번호, 나이, 성별] 은 슈퍼키가 될 수 있다.
(학생번호 만으로 구분할 수 있으므로 최소성을 만족하지 않지만 ㄱㅊ)
[이름, 나이, 성별]은 슈퍼키가 될 수 없다. 유일성이 보장되지 않음.
[학생번호, 나이, 성별] 슈퍼키 중 최소성을 만족하는 [학생번호]가 후보키가 될 수 있다.
정보처리기사를 취득할 때 암기도 했고 이해도 했지만 실제 데이터베이스 테이블 설계에 이용해본 적은 없다.
이번 프로젝트에서 고려하며 설계를 해보려고 한다 !
참고
https://mangkyu.tistory.com/110
'공부 > DB' 카테고리의 다른 글
RDS Maria DB 초기 세팅 + 데이터 저장 시 Incorrect String Value 오류 해결 (0) | 2024.08.07 |
---|---|
MySQL/MariaDB 데이터 타입 정리 (0) | 2024.07.08 |
RDBMS 종류 및 특징 + MySQL vs MariaDB (0) | 2024.07.08 |
RDBMS vs NoSQL (0) | 2024.07.08 |
데이터 모델링 - ERD 다이어그램 (0) | 2024.07.07 |