[SQLD] 1-2. 데이터 모델과 SQL
제 1과목. 데이터 모델링의 이해
2. 데이터 모델과 SQL
1) 정규화
2) 관계와 조인의 이해
3) 모델이 표현하는 트랜잭션의 이해
4) Null 속성의 이해
5) 본질식별자 vs 인조식별자
* 설계도를 보고 어떤 구조인지 이해하는 게 중요한 것 같다.
1) 정규화
: 데이터에 대한 중복을 제거하고 데이터가 관심사별로 처리되도록 엔터티를 쪼개 성능을 향상 시키는 활동 (↔ * 반정규화)
입력/삭제/수정은 성능 향상, 조회는 성능 향상 혹은 저하될 수 있다.
(* 반정규화 : 정규화한 데이터를 다시 함쳐 중복되기 하거나 통합, 분리등을 수행하는 모델링 방식, 2024 개편되면서 반정규화에 대한 내용이 없어진 듯..?)
* 함수적 종속 : 어떤 기준값(컬럼)에 의해 데이터가 종속되는 현상을 의미
ex) ID라는 속성을 선택 시 이름, 나이, 연봉을 가져올 수 있는 것)
* 정규화 순서
1. 비정규형
↓ (도메인원자성을 확보)
2. 1NF : 엔터티에서 다중 속성이 있거나 하나의 속성에 여러 속성값이 있으면 원자값으로 쪼개준다.
↓ (부분종속성 제거)
3. 2NF : 식별자에 부분 종속하는 대상을 쪼개준다. (하나의 속성만으로도 유일하게 구분이 가능하다면(부분적 종속이라면) 쪼개준다)
↓ (이행종속성 제거)
4. 3NF : 엔터티에서 일반속성끼리 함수종속이 발생하여 쪼개준다. ex) 식별자가 2개일 경우 2개로 쪼개줌
↓ (결정자 제거)
5. BCNF(보이스코드 정규화)
↓ (다치종속 제거)
6. 4NF
↓ (조인속성)
7. 5NF
2) 관계와 조인의 이해
* 조인 (JOIN)
: 식별자를 상속 후 데이터를 결합해 여러 엔터티에서 필요한 데이터를 한 번에 가져오는 것
* 계층형 데이터 모델 : 계층 구조를 가진 데이터를 저장한 모델 자기 자신의 엔터티와 관계가 발생하는 경우
* 상호배타적 관계 : A와 B가 C집단에 소속되었지만, 서로 공통적인 부분이 없는 관계 ( ], [ 으로 표현)
3) 모델이 표현하는 트랜잭션의 이해
* 트랜잭션 (Transaction)
: 데이터베이스의 논리적인 연산 단위 혹은 논리적인 업무 단위 (연산 하나하나를 뜻함)
* 식별 관계 (강한 연결관계, FK가 PK의 일부분) vs 비식별 관계 (약한 연결관계, FK가 PK의 일부분이 아님)
- IE 표기법 : 식별자 (PK), 외래키 (FK)
- BARKER 표기법 : 식별자 (#), 일반속성-필수값 (*), 일반속성-선택값(º)
4) Null 속성의 이해
* Null : 아직 정해지지 않은 값 (0이 아님)
- 필요한 이유?
1) 아직 값이 들어오지 않았음을 표현
2) 엔터티 특성상 행열 형태 유지
=> IE 표기법에서는 알기 어려우나, BARKER 표기법에서는 일반속성(선택값)에 Null을 표현할 수 있다.
5) 본질식별자 vs 인조식별자
* 본질식별자 : 업무에 의해 생성된 식별자
* 인조식별자 : 임의로 만들어낸 식별자
- 언제 써야 하는지? : 식별자로 이루어진 식별자가 너무 많다 = 인조식별자 사용
[ 참고 (이기적 무료강의) : https://www.youtube.com/@ydot0789/videos ]