[SQL/1과목] 스키마(Schema)란?
홍쌤의 1과목 강의를 듣고, 노랭이 책을 푸는데 "스키마"라는 개념은 처음 보는 것 같아 따로 알아보았다.
스키마란?
스키마는 데이터베이스에 저장될 데이터의 구조, 타입, 관계, 제약조건 등을 논리적으로 정의한 것으로 데이터베이스에서 데이터 구조를 정의한 설계도이다.
즉, 실제 데이터가 아니며
- 어떤 테이블이 존재하는지
- 각 테이블의 컬럼/속성
- 데이터 타입
- 제약조건(PK, FK, UNIQUE 등)
를 포함한다!
스키마는, 사용자의 관점에 따라 세가지 단계로 구분하게 된다.
3단계 스키마 구조
1. 외부 스키마
외부 스키마는 사용자 맞춤형 뷰(view)이며, 개별 사용자나 응용 프로그램이 보는 데이터의 논리적 구조이다. 사용자 맞춤형이기에, 사용자마다 다르게 정의가 가능하다. 그러기에 한 데이터 베이스에 여러개의 외부 스키마가 존재 가능하다! 물리적 저장 방식이나 전체 DB 구조를 몰라도 되는 단계이다.
대충 예시를 봐보자!
CREATE VIEW 직원뷰 AS
SELECT 이름, 부서코드 FROM 직원;
이 직원이라는 사용자에게는 직원 전체 테이블이 아닌 필요한 컬럼만 보이게 되며, 이렇게 생성된 직원 뷰가 사용자 맞춤형 뷰이다!! 그렇기에 사용자가 어떻게 select하여 view를 만드냐에 따라 여러 개의 외부 스키마가 존재 가능한 것이다.
2. 개념 스키마
개념 스키마는 데이터베이스 전체를 논리적으로 통합하여 표현한 것으로 조직 전체의 논리적 관점으로 본다! 모든 사용자나 응용 프로그램이 필요로 하는 데이터를 종합한 데이터 베이스이므로, 단 하나만 존재한다. 모든 엔터티, 속성, 관계, 제약조건(PK, FK 등) 포함하며 중복된 것 없이 통합된 형태이다.
즉, 우리가 일반적으로 생성하는 테이블이 이 개념 스키마이다.
CREATE TABLE 직원 (
사번 INT PRIMARY KEY,
이름 VARCHAR(50),
부서코드 INT,
입사일 DATE
);
우리는 이런 sql문을 통해, 논리적 구조를 정의하고 컬럼, 데이터타입, 제약 조건 등을 설정한다.
3. 내부 스키마
내부 스키마는 시스템 관점으로 데이터가 어떻게 저장되는지를 정의한다. 물리적 저장 구조와 관련되어있으며 저장 경로, 파일 구조, 레코드 형식, 인덱스 등 포함한다. 성능 최적화, 저장 공간 관리 등을 이런 것들을 정의하기 때문에 일반적인 사용자는 보통 알 필요가 없는 것이다!(공부하는 우리가 개념을 몰라도 된다는 것이 아니라 진짜 사용자가 알 필요가 없단 것이다!!)
여기서 봐보면, 외부 스키마는 개념 스키마가 있어야만 정의가 가능하다. 왜냐면 테이블, 컬럼 이름, 타입 등이 개념 스키마에 정의되어 있어야 뷰(View) 정의 가능하기 때문이다. 또한, 개념 스키마는 내부 스키마가 있어야만 정의가 가능하다. 왜냐면 실제로 저장되기 위해선 내부 구조가 필요한데, 내부 구조는 내부 스키마에 정의되어있기 때문이다.
따라서 각 단계 간의 독립성이 중요하다!
데이터 독립성
데이터 독립성이란, 데이터 구조를 변경해도 상위 계층에 영향 없이 유지할 수 있는 능력이다. 만약 DB 구조나 저장 방식이 바뀔 때마다 사용자 프로그램을 수정해야 한다면? 유지보수 비용.. 오류.. 많이 생길 것이다 😢 독립성에는 물리적, 논리적 두가지가 있다.
1. 물리적 독립성(내부 <-> 개념)
물리적 독립성은 내부 스키마(물리 저장 방식)를 변경해도 개념 스키마(논리 구조)는 영향을 받지 않는 것을 말한다.
2. 논리적 독립성(개념 <-> 외부)
논리적 독립성은 개념 스키마(테이블 구조나 논리적 관계)를 바꿔도 외부 스키마(사용자 뷰)는 영향을 받지 않도록 유지되는 것을 말한다.
