본문 바로가기

자격증/SQLD

[sqld] 모르는 거 속성 정리

정규형

 

제1정규형: 모든 도메인이 원자값 (모두 ATTR)

제2정규형: 부분 함수 종속 제거 (상이한 ATTR 분리)

제3정규형: 이행적 함수 종속 제거 (이행 -> 삼단논법)

BCNF: 모든 결정자가 후보키

 


정규화와 반정규화

 

정규화:

중복성 제거

입력, 수정, 삭제 성능 향상, 조회 성능 보장 X

 

 

반정규화:

조회 성능 향상 기대 가능

 

테이블 병합 (1:1, 1:M, 슈퍼/서브)

테이블 분할 (수직, 수평)

테이블 추가 (중복, 통계, 이력, 부분)

 

중복칼럼 추가

파생칼럼 추가

이력테이블 칼럼추가

PK에 의한 칼럼 추가

응용시스템 오작동을 위한 칼럼 추가

 

중복 관계 추가

 


엔터티 종류

 

유형과 무형에 따른 엔터티

 

  • 유형 엔터티: 물리적 형태가 있는 엔터티 (EX. 학생, 교수 등)
  • 개념 엔터티: 형태가 없는 엔터티 (EX. 주식, 가상화폐 등)
  • 사건 엔터티: 비즈니스 프로세스를 실행하면서 생성되는 엔터티 (EX. 주문 등)

발생 시점에 따른 엔터티

 

  • 기본 엔터티: 독립적인 엔터티 (EX. 고객)
  • 중심 엔터티: 기본과 행위의 중심 (EX. 주문)
  • 행위 엔터티: 2개 이상의 엔터티로부터 발생 (EX. 주문 내역)

    고객이 주문하면 주문 내역이 발생 (순서대로)

종속 엔터티

 

  • 교차 엔터티: 다대다 관계를 두 개의 일대다 관계로 표현하면서 생기는 엔터티
  • 서브타입 엔터티: INTERFACE같은 슈퍼타입 엔터티에서 파생된 클래스같은 서브타입 엔터티
  • 일대일 엔터티: 엔터티를 수직 분해

 


인덱스

 

테이블을 정렬된 상태로 유지시킨다. 탐색에 용이함.

기존에는 FULL TABLE SCAN을 사용했는데, INDEX를 사용하면 빠른 탐색이 가능하다.

하지만 정렬된 상태로 유지시켜야 하므로 수정이 자주 일어난다면 오히려 손해일 수 있다.

 

HASH TABLE 혹은 B+TREE로 구현할 수 있다.

HASH TABLE은 잘 쓰지 않고 B+TREE를 사용한다.


ORDER BY는 전체 정렬.

ORDER SIBLING BY는 윈도우 내에서 정렬

 


식별관계 비식별관계

 

식별관계: 강한 연결관계, 자식의 PK에 부모의 FK가 포함

비식별관계: 약한 연결관계. 

 


ERD 표기

 

IE 표기법

실선: 식별관계

점선: 비식별관계

일대다 관계표현을 위해 동그라미를 사용

 

IE 표기법

수직선을 사용하여 식별관계를 나타냄

일대다 관계표현을 위해 가지를 사용.

 


식별자

 

주식별자 (PK)

보조식별자 (UK)

 

내부식별자 (NOT FK)

외부식별자 (FK)

 

단일식별자 (ONE COL)

복합식별자 (MANY COLS)

 

본질식별자 (업무에 의해 만들어짐)

인조식별자 (원조식별자가 복잡해서 만든 녀석)

 


조인 최적화

 

NL JOIN: 두 테이블을 조인할 때 선행 테이블에서 조건을 만족하는 ROW를 찾고 후행 테이블로 가서 조인값이 존재하면 추출 버퍼에 넣기

랜덤 액세스 방식이다.

실행 순서는 트리 그려서 전위 순회

 

SORT MERGE JOIN: 선행 테이블에서 조건을 만족하는 모든 ROW와 후행에서 조건을 만족하는 모든 ROW를 모아서 정렬한 후에 조인을 수행하여 추출 버퍼에 넣기 (비동등 조인도 가능)

모두 정렬해야 하므로 느리다.

 

HASH JOIN: NL JOIN의 랜덤 액세스 방식의 문제점과 SORT MERGE JOIN의 정렬의 느림을 해결하는 대안. SORT MERGE JOIN과 동일하지만 모아서 정렬하는 것이 아닌 해싱을 한 상태로 모은다.