데이터베이스 schema란?
- 스키마는 데이터베이스에 저장할 데이터를 조직하고 구성하는 방법에 대한 일종의 청사진이라고 볼 수 있다.
- 스키마는 어떤 데이터를 저장하고, 어떻게 저장하고, 어디에 저장할지에 대한 규칙을 정한다.
- 스키마는 데이터베이스에 저장하는 실제 데이터와는 별개이다.
- 스키마를 생성한다는 것은 데이터베이스가 저장할 데이터들을 연결하고, 데이터들이 서로 어떤 관계를 가지고 있고, 이런 데이터들을 관리하는 규칙을 정한다라는 의미이다.
스키마가 필요한 이유
애플리케이션을 만들 때, 일반적으로 가장 먼저 스키마를 만든다. 그 이유는 다음과 같다.
- 애플리케이션이 잘 작동하는데 필요한 데이터와 저장할 데이터가 실제로 일치하는지 확인하기 위함이다.
- 시스템 사이의 상호 운용성을 보장하기 위함이다.
- 스키마는 프로젝트에서 작업하는 모든 개발자들에게 일종의 로드맵 역할을 한다.
스키마가 포함하는 것
스키마는 아래 항목들을 포함할 수 있다.
- 테이블(Tables)
- 필드(Fields)와 속성(Attributes)
- 데이터 타입(Data Types)
- 규칙(Rules)
- 관계(Relationships)
- 뷰(Views)
- 저장 절차(Stored procedures)
- 주요 키와 외래 키(Primary and foreign keys)
스키마의 타입
스키마는 기술적인지, 추상적인지에 따라 세 가지 타입으로 나뉜다.
- 개념적 스키마(Conceptual schemas)
- 논리적 스키마(Logical schemas)
- 물리적 스키마(Physical schemas)
개념적 스키마(Conceptual schemas)
- 애플리케이션의 핵심 요구사항을 충족하기 위해 애플리케이션이 필요로 하는 데이터의 추상적 개요를 말한다.
- 개념적 스키마는 데이터베이스에 실제로 내제된 구조보다, 비즈니스의 정보 요구 사항에 초점이 우선적으로 맞춰져 있다.
- 일반적으로 스키마를 생성하는 첫 번째 단계이다.
- 이 단계에서는 단순히 필요한 엔티티, 각 엔티티가 포함할 속성, 엔티티들의 관계에 대한 개요를 정의한다.
- 이 단계에서는 데이터 형식과 저장 방법에 대해 구체적으로 고민할 필요는 없다.
논리적 스키마(Logical schemas)
- 논리적 스키마는 개념적 스키마 보다 세밀한 기술 세부 사항을 제공한다. 예를 들어, 엔티티들 사이의 관계를 생성하기 위해 사용할 특정 키들이 있을 수 있다.
- 이 단계에서는 엔티티와 속성들을 보다 구체적인 테이블과 칼럼으로 변환한다.
- 이 단계의 목적은 사용할 DBMS와 상관 없이 데이터베이스가 어떻게 구성되어야 할지에 대한 기술적 개요를 생성하는 것이다.
물리적 스키마(Physical schemas)
- 물리적 스키마는 데이터베이스에 대한 구체적이고 기술적인 디자인이다.
- 물리적 스키마의 중요한 부분은 DBMS의 요구사항에 충족시키기 위해 논리적 스키마를 보다 구체적인 모델로 변환하는 것이다.
- 이 단계는 테이블 이름 짓기, 테이블, 속성, 키, 유효성 법칙, 저장 절차, 무결성 제약사항들을 생성하는 것 포함한다.
- 물리적 스키마를 생성한다는 것은 데이터베이스를 생성하는 것과 같다.
데이터베이스 스키마 디자인과 모델
스키마는 데이터베이스 구성 방법에 대한 개요를 말한다. 데이터베이스를 구성하기 위한 아주 많은 방법들이 있는데, 이것을 데이터베이스 스키마 디자인이라고 한다.
애플리케이션의 요구사항에 따라 데이터베이스 스키마 디자인이 달라질 수 있지만 일반적으로 많이 사용하는 모델이 존재한다.
- Flat 모델
- 데이터베이스 스키마의 가장 기본적인 종류로, 단일 테이블로 구성된다.
- CSV 파일이나 스프레드시트와 같다고 볼 수 있다.
- 단일 테이블 형식의 엔티티들의 관계를 정의할 수 없다.
- 작업할 수 있는 하나의 엔티티만 있는 것과 같다.
- Relational 모델
- 애플리케이션에서 아주 흔하게 볼 수 있는 데이터베이스 스키마
- 서로 다른 엔티티들 사이에 관계를 설정하는 것은 애플리케이션 프로젝트의 기능에 필수적이다.
- Primary 키와 Foreign 키를 사용해 엔티티들 사이의 다양한 종류의 관계를 설정할 수 있다.
- Star 모델
- Relational 모델의 진화한 형태로, 엔티티들을 facts와 연관 dimension들로 나눈다.
- 여러 dimension 테이블이 하나의 facts 테이블로부터 갈라지는 형태를 띄고 있다.
- Snowflake 모델
- Star 모델의 복잡한 바리에이션이다.
- Snowflake 스키마에서는 각각의 dimension 테이블이 추가적인 dimension들을 가질 수 있다는 점이 Star 모델과 다르다.
ERD
참고