데이터 모델과 SQL

[SQL 이해하기] 1. 데이터 모델링의 이해

영바이트 2023. 5. 9. 14:59

 

올 해(2023) 1월부터 4월 초까지 SQL 구문에 대해 정리하는 글들을 [데이터 모델과 SQL]이라는 주제로 포스팅했었다. 포스팅을 하다보니 뭔가 정리된다는 느낌보다 내용을 늘어놓고 있다는 생각이 계속 들었다. 함께 보는 글은 무언가 정리되는 맛이 있어야하는데 그렇지 못했던 점이 계속 아쉬웠다.

 

이전 글들 [데이터 모델과 SQL]과는 다른 관점에서 SQL 그리고 SQL이 다루는 대상인 데이터에 대해 정리해보고자 한다. 정리는 수험서들에 잘 되어 있는 것이 사실이다. SQL의 기본적인 내용에 대해 다시 살펴보고 정리하기 위해 SQLD(SQL Developer, SQL 개발자) 자격증 공부를 위한 교재를 이용하는 것이 좋겠다는 생각이 들었다.

 

SQL 복습을 위해 이용한 책에 대한 광고는 하지 않겠다. 시중에 SQLD 자격증 준비를 위한 여러가지 교재들이 나와 있고 그 내용들도 거의 비슷하기 때문이다. 즉, 모든 책들이 내용 측면에서 잘 정리되어 있었다.

 


SQL에 대해 살펴보기 전에 SQL이 다루는 대상인 데이터 모델에 대해 살펴보자. '모델'은 현실에서 관심의 대상이 되는 부분들을 간략화해서 표현한 것이다. 모델은 단지 유용하기 때문에 사용하는 현실 세계를 표현하는 모형이다. 영국 통계학자인 George Box의 말이 생각나서 아래와 같이 인용해본다.

 

All models are wrong, but some are useful. - George Box

 

따라서 모델은 아래와 같은 특징들을 보여야 '유용하다(useful)'고 할 수 있다.

ⓐ 현실 세계를 반영해야 한다.

ⓑ 대상을 단순화하여 표현해야 한다.

ⓒ 관리하고자 하는 대상(관심의 대상)을 모델로 표현해야 한다.

 

모델을 만드는 과정을 모델링(modeling)이라고 한다. 모델을 만들 때는 아래 요건들을 갖추도록 해야 한다.

 

ⓐ 추상화(abstraction): 현실 세계를 일정한 형식에 맞추어 개념적으로 요약한다.

ⓑ 단순화(Simplification): 현실 세계의 복잡성을 배제하고 단순함과 명료함을 추구한다.

ⓒ 명확화(Clarity): 표현 결과에 불분명함이 없도록 정리한다.

 

데이터를 대상으로 하는 모델링은 데이터 관점(What), 프로세스 관점(How), 그리고 이 둘의 관계 관점(Interaction)을 모두 고려한다.

 

모델링은 세 단계로 이루어진다. 먼저 ①개념적 모델링 단계(Conceptual Data Modeling)에서는 높은 추상화 수준으로 개념을 내용으로 하는 포괄적인 수준의 모델링이 진행된다. 두 번째 단계인 ②논리적 데이터 모델링(Logical Data Modeling)에서는 모델의 개념을 구성하는 요소들을 키(key), 속성 그리고 관계를 이용하여 표현한다. 마지막 단계인 ③물리적 데이터 모델링(Physical Data Modeling) 단계에서는 논리적 모델을 실제 데이터베이스에서 구현할 수 있도록 물리적인 성격을 고려하여 구체화하게 된다.

 


 

데이터베이스에서 사용되는 데이터 모델을 표준으로 정의한 것 중 가장 널리 받아들여 지는 것이 ANSI-SPARC(American National Standard Institute - Standards Planning and Requrements Commitee)에서 제시한 구조이다. ANSI-SPARC에서는 데이터 모델을 3가지 구조(스키마, schema. 데이터베이스에 저장되는 논리적 구조)의 층(layer)으로 정리한다.

 

ANSI-SPARC의 데이터모델 계층

 

ANSI-SPARC에서 제시하는 데이터모델 계층에서 추구하는 목표는 독립성이다. 외부-개념-내부 스키마 중 어느 하나가 변경된다고 해서 다른 층까지 변경될 필요는 없다. 어떤 구조를 설계할 때 반드시 고려해야 하는 목표로 아래와 같이 요약해 볼 수 있다.

 

· 물리적 독립성: 내부 스키마(DB의 물리적 구조) 변경이 개념 스키마(실제 저장되는 데이터)에 영향을 주어서는 안된다.

· 논리적 독립성: 개념 스키마 변경이 외부 스키마(사용자가 데이터를 보는 관점들, 뷰view)에 영향을 주어서는 안된다.

 

이어질 다음 포스팅에서는 데이터베이스 관점에서 데이터를 담는 그릇인 '엔터티(entity)'에 대해 정리해보고자 한다.