* Youtube Link - https://www.youtube.com/watch?v=NrbGR_HiN-Y&list=PL6i7rGeEmTvpLoDkB-kECcuD1zDt_gaPn&index=4
정규화란?
데이터 중복을 처리하고
관심사 별로 처리 되도록
엔터티를 쪼개는 활동
정규화의 반대말로 반정규화가 있다.
중복 포함하기 위해서 엔터티를 합치는 활동이다.
거의 정규화 활동을 하고 나서 특수한 사례에만 반정규화 적용
정규화를 하는 것이 대부분 좋다.
정규화시 입력/삭제/수정의 성능은 향상
조회는 성능 향상 혹은 저하될 수도 있음
함수적 종속이란? F(X) = Y
어떤 기준 값(컬럼)에 의해 데이터가 종속되는 현상을 의미
F(X) = Y에서
X에 "Emp001"을 입력하면 Y로 종속된 유일한 인스턴스의 나머지 값들이 나온다는 것이다.
비정규형: 데이터가 중복이 된 아무렇게나 만든 상태
도메인 원자성(한 칸에 한 데이터)을 만족시키면 1차 정규화가 된다.
부분 종속성 제거를 하면 2차 정규화가 된다.
이행 종속성 제거를 하면 3차 정규화가 된다.
결정자 제거를 하면 BCNF가 된다.
다치 종속을 제거하면 4차 정규화가 된다.
조인속성을 제거하면 5차 정규화가 된다.
3차 정규화 이후로는 정말 특수한 사례에 한다.
1차 정규화
한 칸에 한 값만 들어가도록 한다.
도메인 원자성을 지킨다.
다중 속성이 있거나 하나의 속성에 여러 속성값이 있으면 원자값으로 쪼개준다.
2차 정규화
2차 정규화는 부분 종속 제거이다.
학번 + 과목을 통해서 다음 테이블의 인스턴스를 유일하게 식별할 수 있다.
하지만 학번만 갖고도 성적, 담임교수 그리고 소속학과를 유일하게 식별할 수 있다.
그래서 다음과 같이 학생-교수, 성적 테이블로 나눈 것이다.
그리고 학생-교수 테이블과 성적 테이블은 1:N의 관계이다.
3차 정규화
부서 ID가 부서명을 종속하고 있다.
이런 경우 테이블을 나누어 준다.
첫 번째 테이블은 도메인 원자성을 만족하므로 완전함수 종속이다.
반정규화
정규화/반정규화의 목적은 성능 향상이다.
정규화 상태에서의 데이터 입력은 무조건 좋다.
반정규화는 실무에서 거의 하지 않는다.
다른 방법이 없는지 검토해서 정 방법이 없으면 반정규화를 하는 것이다.
또는 연락처의 경우, 직원 연락처라는 작은 테이블을 만드는 것 보다
직원 테이블에 합쳐서
성능 향상을 이루는 것이 바람직하다.
조인
여러번 쿼리를 통해서 가져올 데이터를
한번에 가져오는 기능
또한 여러번 쿼리를 조회하는 것 보다 한번에 가져오면 성능이 더 좋다.
성능 관점 때문에 우리가 쓴다.
계층형 데이터 모델
- 자기 자신과 관계가 발생하는 경우
데이터에 관계가 있다.
다음과 같이 데이터가 관계가 있다.
D과장과 C사원은 같은 엔터티이지만 데이터끼리 서로 관계가 있다.
계층 구조를 가진 데이터를 저장한 모델
자기 자신의 엔터티와 관계가 발생하는 경우
계층 쿼리를 통해서 데이터를 조회할 수 있다.
또는 다음과 같이 상호배타적 관계가 있다.
개인고객과 법인고객은 서로 공통적인 부분이 없는 관계이다.
대출현황은 개인/법인 전부 다 대출받을 수 있다.
이 꺽쇠 표시가 있다면 상호배타적 관계이다. 그래서 개인고객과 법인고객은 전혀 공통적인 부분이 없다.
개인 고객과 법인 고객은 서로 상호배타적 관계이므로
대출현황에 고객구분코드를 통해서 구분해준다.
감사합니다.
'SQLD' 카테고리의 다른 글
[Youtube review] [SQLD] 핵심 이론 강의 06회 (2) | 2024.10.31 |
---|---|
[Youtube review] [SQLD] 핵심 이론 강의 05회 (2) | 2024.10.31 |
[Youtube review] [SQLD] 핵심 이론 강의 03회 (2) | 2024.10.31 |
[Youtube review] [SQLD] 핵심 이론 강의 02회 (2) | 2024.10.31 |
[Youtube review] [SQLD] 핵심 이론 강의 01회 (0) | 2024.10.31 |