study ../SQLD

[과목 I. 데이터 모델링의 이해] 제2장 데이터 모델과 SQL: contents

wlsekf 2025. 8. 13. 23:28
과목 I. 데이터 모델링의 이해
  제2장 데이터 모델과 SQL
    제1절 정규화
    제2절 관계와 조인의 이해
    제3절 모델이 표현하는 트랜잭션의 이해
    제4절 Null 속성의 이해
    제5절 본질식별자 vs. 인조식별자


# 함수 종속성(Functional Dependency)
  * ab → cde, e → b, d → ab: ab는 자신인 ab와 cde를 결정하므로 모든 속성을 결정한다. 따라서 후보 키가 된다.
  * e → b, ae → ab → cde, ae → cde: ae는 모든 속성을 결정한다.
  * d → ab → cde: d는 모든 속성을 결정한다.

# 제2정규형
  * 엔터티의 일반 속성은 주식별자 전체에 종속이어야 한다.

# 정규화와 성능
  * 정규화를 수행하면 중복 속성을 제거하여 용량을 최소화
  * 일반적으로 정규화 수행 시 데이터 처리 성능이 향상
  * 반정규화가 조회 성능을 항상 향상시키는 것은 아니며, 때로는 정규와에 의해 성능이 향상될 수도 있다.
  * 정규화로 인해 조회 성능이 저하될 수 있다. 이 때문에 반정규화를 고려한다.

# 1차 정규화의 대상
  * 칼럼에 의한 반복적인 속성값을 갖는 형태는 속성의 원자성을 위배
  * 반복적인 속성 나열 형태에서는 각 속성에 대해 'or' 연산자로 연결된 조건들이 사용되는데, 이때 어느 하나의 속성이라도 인덱스가 정의되지 않으면 'or'로 연결된 모든 조건절들이 인덱스를 사용하지 않고 한 번의 전체 데이터 스캔으로 처리되게 되어 성능 저하가 나타날 수 있다.
  * 모든 반복 속성에 인덱스를 생성하면 검색 속도는 좋아지겠지만 반대로 너무 많은 인덱스 때문에 입력, 수정, 삭제의 성능이 저하

# 어떤 릴레이션 R이 제2정규형이고, 기본키에 속하지 않은 속성 모두가 기본키에 이행적 함수 종속이 아닐 때 제3정규형에 속한다.

# 데이터 모델링의 정규화
  * 정규화는 논리 데이터 모델 상세화 과정의 대표적인 활동으로, 논리 데이터 모델의 일관성을 확보하고 중복을 제거하여 속성들이 가장 적절한 엔터티에 배치되도록 함으로써 보다 더 신뢰성 있는 데이터 구조를 얻는 데 목적이 있다.
  * 제1정규형은 모든 인스턴스가 반드시 하나의 값을 가져야 함을 의미한다.
  * 제3정규형을 만족하는 엔터티의 일반 속성은 주식별자 전체에 종속적이다.
  * 반정규화는 성능을 위해 데이터 중복을 허용하는 것이지만 성능의 향상을 항상 보장하는 것은 아니다.

# 관계(Relationship)와 조인(Join)
  * 조인(Join)이란 식별자를 상속하고, 상속된 속성을 매핑키로 활용하여 데이터를 결합하는 것을 의미한다.
  * 부모의 식별자를 자식의 식별자로 포함하면 식별 관계, 부모의 식별자를 자식의 일반 속성으로 상속하면 비식별 관계라고 할 수 있다.
  * 관계(Relationship)를 맺는다는 것은 식별자를 상속시키고 해당 식별자를 매핑키로 활용해 데이터를 결합해 보겠다는 것을 의미한다.

# NULL
  * 모르는 값을 의미
  * 값의 부재를 의미
  * 공백 문자(Empty String) 혹은 숫자 0과 동일하지 않다.
  * NULL과의 모든 비교(IS NULL 제외)는 알 수 없음(Unknown)을 반환한다.

# 순차적으로 수행되는 작업 A와 B가 반드시 모두 수행되거나 모두 수행되지 않아야 한다고 할 때, 이에 대한 설명
  * A와 B는 하나의 트랜잭션으로 묶여 처리되어야 한다.
  * 커밋은 A와 B를 모두 수행한 다음에 해주어야 한다.
  * A와 B에 주어진 조건은 트랜잭션의 원자성(Atomicity)에 해당한다.
  * A까지만 수행되고 시스템 장애가 발생했다면 A를 undo해야 한다.

# NULL 값
  * NULL 값에 어떤 숫자를 더해도 결과는 항상 NULL이다.
  * NULL 값과 어떤 숫자의 크기를 비교한 결과는 항상 unknown이다.
  * "NULL = NULL" 연산의 결과는 FALSE 또는 unknown이다.
  * 집계 함수를 계산할 때 NULL 값은 0이 아니라 계산에서 제외된다.

# 본질식별자와 인조식별자
  * 인조식별자는 대체로 본질식별자가 복잡한 구성을 가질 때 만들어진다.
  * 인조식별자를 사용하면 중복 데이터를 막기 어려워진다.
  * 인조식별자를 사용하면 본질식별자를 사용할 때와 비교하여 추가적인 인덱스가 필요해진다.
  * 인조식별자는 단점도 존재하므로 꼭 필요한 경우에만 사용하는 것이 바람직하다.