『DDIA 2장. 데이터 모델과 질의 언어』
- 데이터 모델은 소프트웨어가 어떻게 작성됐는지 뿐만 아니라 해결하려는 문제를 어떻게 생각해야 하는지에 대해서도 지대한 영향을 미친다.
관계형 모델과 문서 모델
- SQL: 가장 잘 알려진 관계형 데이터 모델:
- Table: 데이터는 관계로 구성된다.
- Row: 각 관계는 순서 없는 튜플의 모음이다.
- NoSQL: 관계형 모델을 뒤집으려는 가장 최신 시도:
- 문서 모델은 뛰어난 확장성을 가진다.
- 조인과 중복 데이터 처리에 대한 지원이 부족해 다대일(many-to-one) 관계 표현에 적합하지 않다.
- OOP에서 데이터베이스 모델 객체 사이 전환 계층이 필요하다:
- 이러한 모델 사이의 분리를 임피던스 불일치(impedance mismatch)라고 한다.
asdfasdf
- 일각에서는 JSON 모델이 임피던스 불일치를 줄인다고 생각한다:
자바스크립트라면 객체 리터럴이 JSON과 동일하니까 동의. 하지만 다른 언어에도 타당한지는 모르겠다.
- ORM으로 전환 계층의 코드를 줄일 수는 있지만 모델의 차이를 완벽히 숨기기는 힘들다.
- 이러한 모델 사이의 분리를 임피던스 불일치(impedance mismatch)라고 한다.
- 데이터 베이스의 정규화:
- 정규화의 핵심은 중복을 제거하는 것.
- 정규화에는 다대일 관계가 필요하다:
- SQL에서는 테이블을 조인하면 된다.
- 문서 모델에는 적합하지 않다.
- 애플리케이션이 복잡해지면 엔티티(entity)가 필요해진다.
데이터를 위한 질의 언어
- SQL은 선언형 질의 언어다:
- 선언형 질의 언어는 목표 달성을 위한 방법이 아니라 알고자 하는 데이터의 패턴을 지정하면 된다.
- 선언형 언어는 일반적으로 명령형 API보다 간결하다.
- 데이터베이스 엔진의 상세 구현이 숨겨져 있어 질의를 변경하지 않고도 데이터베이스 시스템의 성능을 향상시킬 수 있다.
- IMS와 코다실은 명령형 코드를 사용해 데이터베이스에 질의한다:
- 대부분의 프로그래밍 언어는 컴퓨터가 특정 순서로 특정 연산을 수행하게끔 지시하는 명령형 언어다.
- 맵리듀스(MapReduce) 질의:
- 여러 함수형 프로그래밍 언어에 있는
map
과reduce
함수를 기반으로 하는 모델. - 몽고DB에서 제한적으로 지원하며, 선언형 질의 언어와 명령형 질의 API의 사이에 있다고 할 수 있다.
- 여러 함수형 프로그래밍 언어에 있는
그래프형 데이터 모델
- 다대다 관계를 구성하기에 효과적이다.
- 그래프는 정점(vertex)과 간선(edge)으로 이뤄진다.
이 문서를 인용한 문서
- 『데이터 중심 어플리케이션 설계(DDIA)』
-
2장. 데이터 모델과 질의 언어
-