1. 용어 정의
① 데이터 모델
- 데이터의 세부 사항은 은닉하고 필요한 개념만 제공(데이터 추상화)하기 위해 사용한다.
- 데이터 추상화는 feature extraction 과정을 포함하는데, 이 과정은 나중에 스키마를 구성하기 위해 필요하다.
- 데이터의 타입, 관계, 제약 조건을 명시하기 위해 사용한다.
- 최근에는 데이터모델에 사용자 정의 연산을 포함하는 추세이다.
② 스키마
- 테이블, 열, 관계 및 제약 조건과 같은 데이터 구조를 정의한다.
- 스키마는 데이터베이스의 구조를 설명하며, 데이터베이스 관리 시스템 (DBMS)을 통해 데이터를 저장, 검색 및 관리한다.
- DDL(Data Definition Language)을 이용해 테이블을 만들 때에도 사용된다.
- 스키마에 필드를 추가 및 삭제하는 과정을 스키마 진화라고 하는데, 대부분의 DBMS가 이를 지원한다.
③ Database Status
- 테이블에 존재하는 아이템을 인스턴스라고 하는데, 이러한 인스턴스의 집합을 데이터베이스 상태라고 한다.
- 데이터베이스를 갱신하는 연산이 수행될 때마다 새로운 데이터베이스 상태가 된다.
- 데이터베이스의 상태는 스키마에 명시된 구조와 제약 조건을 만족해야 한다.
- 다른 말로 Entity Set이라고도 한다.
④ extension과 intension
- 데이터베이스 상태는 extension(외연)이라 하고, 스키마는 intension(내포)이라고 한다.
2. Three-Schema Architecture
1) 구성
① 1단계: Internal Level
- 내부 스키마를 가지며, 내부 스키마는 물리적 데이터 모델(하드웨어 의존적 모델)을 사용한다.
- 데이터 저장 구조의 세부 사항과 데이터베이스에 대한 접근 경로를 포함한다.
② 2단계: Conceptual Level
- 개념 스키마를 가지며, 이는 전체 사용자를 위한 데이터베이스의 구조를 기술한다.
- 엔티티, 데이터 타입, 관계, 사용자 연산, 제약 조건을 나타낸다.
③ 3단계: External Level(View Level)
- 외부 스키마나 사용자 뷰를 포함한다.
- 사용자가 관심을 갖는 부분만 나타내고, 나머지는 은닉한다.
2) Mapping
① 외부 스키마 → 개념 스키마
- 사용자가 외부 스키마를 참조하여 데이터를 요구하면, 데이터베이스에서는 이를 개념 스키마에 대한 요구로 변환한다.
② 개념 스키마 → 내부 스키마
- 개념 스키마는 다시 내부 스키마에 대한 요구로 변환되어 데이터베이스(memory 또는 disk)에 접근하여 사용자의 요구에 알맞는 결과를 얻는다.
③ 내부 스키마 → 개념 스키마 → 외부 스키마
- 해당 결과를 사용자의 뷰에 나타내기 위해 재구성하는 과정을 거친다.
- 이를 사상(Mapping)이라 한다.
여기서 논리적 데이터 독립성은 외부 스키마(뷰)를 변경하지 않으면서 개념 스키마(테이블)를 변경할 수 있는 능력으로, 테이블의 구조나 내용이 변경되더라도 뷰에는 영향이 없어야 함을 의미한다.
이와 비슷하게 물리적 데이터 독립성은 개념 스키마(테이블 구조 등)를 변경하지 않으면서 내부 스키마(접근 경로 등)를 변경할 수 있는 능력으로, 내부 스키마를 변경하더라도 개념 스키마에는 영향이 없어야 한다.
3) 장단점
① 장점
- Mapping만 적절히 변경하면, 각 단계의 독립성이 유지된다.
→ 물리적, 논리적 독립성을 확보하기에 용이하다.
② 단점
- 두번의 Mapping은 DBMS의 비효율성(오버헤드)을 유발한다.
→ 엄격히 구분된 3단계 스키마를 지원하는 DBMS는 거의 없다.
3. DBMS Architecture
1) 언어
① DDL(Data Definition Language)
- 개념 스키마와 내부 스키마를 정의
- CREATE TABLE, DROP, ALTER 등
② DML(Data Manipulate Language)
- 데이터를 검색, 삽입, 삭제, 수정하기 위한 조작 언어
- 비절차적(nonprocedural) 언어, SQL 언어
③ DCL(Data Control Language)
- 데이터베이스에 접근하고 객체의 사용 권한을 부여 또는 회수하는 명령어
- GRANT, REVOKE 등
④ TCL(Transaction Control Language)
- DML에 의한 결과를 트랜잭션 별로 제어하는 명령어
- COMMIT, ROLLBACK, SAVEPOINT 등
2) 구성 모듈
① DDL Compiler
- DDL을 해석해여 데이터베이스 객체를 생성, 수정 또는 삭제한다.
- 이 과정에서 데이터베이스 스키마를 변경하고, 업데이트 된 메타데이터를 데이터베이스 카탈로그(데이터베이스의 메타데이터를 저장하는 곳) 안에 저장한다.
② Stored Data Manager
- 디스크에 저장되어있는 DBMS의 정보(DB 또는 카탈로그)에 대한 접근을 제어한다.
③ Query Compiler
- 인터페이스에 입력된 쿼리를 컴파일하여 Runtime Database Processor가 처리할 수 있는 형식으로 변환한다.
④ Runtime Database Processor
⑤ Query Optimizer
- 데이터베이스의 정보를 활용하여 연산 재배치, 중복 연산 제거 등의 작업을 수행함으로써 쿼리를 최적화한다.
- GA(Genetic Algorithm)나 AI, Rule-based Planner를 이용해 여러가지 Query Execution Plan을 세운 후, 가장 효율적인 쿼리문을 선택한다.
⑥ Pre-Compiler
- 호스트 프로그래밍 언어(DML이 삽입되어 있는 자바나 파이썬 등)에서 DML을 추출한 후 DML 컴파일러로 컴파일한다.
- Web Application User에 의해 사용된다.
⑦ DML Compiler
- 데이터 조작어 명령들을 데이터베이스 접근을 위한 실행 가능한 코드로 컴파일한다.
3) Query의 동작원리
① Database User(Casual User)
- Query(DML, DCL) → Query Parser → Query Compiler → Query Optimizer → Execute(Runtime Database Processor)
② Database Administrator
- Query(DDL) → Query Parser → DDL Compiler → Execute(Runtime Database Processor) → Storage(Catalog)