『DDIA 2장. 데이터 모델과 질의 언어』

  • 데이터 모델은 소프트웨어가 어떻게 작성됐는지 뿐만 아니라 해결하려는 문제를 어떻게 생각해야 하는지에 대해서도 지대한 영향을 미친다.

관계형 모델과 문서 모델

  • SQL: 가장 잘 알려진 관계형 데이터 모델:
    • Table: 데이터는 관계로 구성된다.
    • Row: 각 관계는 순서 없는 튜플의 모음이다.
  • NoSQL: 관계형 모델을 뒤집으려는 가장 최신 시도:
    • 문서 모델은 뛰어난 확장성을 가진다.
    • 조인과 중복 데이터 처리에 대한 지원이 부족해 다대일(many-to-one) 관계 표현에 적합하지 않다.
  • OOP에서 데이터베이스 모델 객체 사이 전환 계층이 필요하다:
    • 이러한 모델 사이의 분리를 임피던스 불일치(impedance mismatch)라고 한다.

      asdfasdf

    • 일각에서는 JSON 모델이 임피던스 불일치를 줄인다고 생각한다:

      자바스크립트라면 객체 리터럴이 JSON과 동일하니까 동의. 하지만 다른 언어에도 타당한지는 모르겠다.

    • ORM으로 전환 계층의 코드를 줄일 수는 있지만 모델의 차이를 완벽히 숨기기는 힘들다.
  • 데이터 베이스의 정규화:
    • 정규화의 핵심은 중복을 제거하는 것.
    • 정규화에는 다대일 관계가 필요하다:
      • SQL에서는 테이블을 조인하면 된다.
      • 문서 모델에는 적합하지 않다.
    • 애플리케이션이 복잡해지면 엔티티(entity)가 필요해진다.

데이터를 위한 질의 언어

  • SQL은 선언형 질의 언어다:
    • 선언형 질의 언어는 목표 달성을 위한 방법이 아니라 알고자 하는 데이터의 패턴을 지정하면 된다.
    • 선언형 언어는 일반적으로 명령형 API보다 간결하다.
    • 데이터베이스 엔진의 상세 구현이 숨겨져 있어 질의를 변경하지 않고도 데이터베이스 시스템의 성능을 향상시킬 수 있다.
  • IMS와 코다실은 명령형 코드를 사용해 데이터베이스에 질의한다:
    • 대부분의 프로그래밍 언어는 컴퓨터가 특정 순서로 특정 연산을 수행하게끔 지시하는 명령형 언어다.
  • 맵리듀스(MapReduce) 질의:
    • 여러 함수형 프로그래밍 언어에 있는 mapreduce 함수를 기반으로 하는 모델.
    • 몽고DB에서 제한적으로 지원하며, 선언형 질의 언어와 명령형 질의 API의 사이에 있다고 할 수 있다.

그래프형 데이터 모델

  • 다대다 관계를 구성하기에 효과적이다.
  • 그래프는 정점(vertex)과 간선(edge)으로 이뤄진다.

이 문서를 인용한 문서