Database vs DBMS
데이터베이스
는 데이터의 저장소를 말한다. 관계형 데이터베이스, NoSQL 데이터베이스 등 다양한 종류가 있다. DBMS
는 데이터베이스를 생성, 수정, 삭제 및 검색하는 기능을 제공하고 데이터베이스의 유지보수, 보안, 백업 등의 작업을 한다.
데이터베이스
는 DBMS를 통해 관리되고 DBMS
는 데이터베이스 관리를 위한 소프트웨어다.
스키마
- Entity, Attribute, Relationship에 대한 정의와 제약 조건들을 기술한 것.
- 사용자 관점에 따라 External level, Conceptual level, internal level로 나뉜다.
개체 : Entity, 속성들의 집합. 두 개 이상의 애트리뷰트 필요.
속성 : Attribute, 개체들의 특성. 엔터티를 설명하는 요소.
관계 : Relationship, 개체들의 관계를 뜻함.
0. Introduction
DBMS 상에 데이터베이스는 system catalog와 stored database로 나뉜다.
데이터베이스 스키마는 system catalog(data dictionary)에 저장된다.
- DBMS(DataBase Management System): 데이터베이스 관리 소프트웨어.
- Data Dictionary(System Catalog): 데이터 항목들에 대한 정보를 지정한 중앙 저장소. 이 정보에는 참조하는데 사용되는 식별자. 엔터티의 구성요소. 저장 위치 등을 포함.
1. Database 요구사항
- 데이터 독립성
- 액세스 효율성
- 데이터 액세스 동시성
- 백업, 리커버리
- 일관성 (일관성을 위해 중복 최소화하여 허용)
- 데이터 무결성
- 데이터 보안
- 쿼리 언어 지원
2. File system vs DBMS
파일에서 직원의 휴대폰 번호에 대한 필드를 추가적으로 다른 어플리케이션이 필요로 한다면? 파일에서 일일이 찾아 새로 작성해줘야 한다.
위 그림에서 직원에 대한 department는 personal management program과 education management program 모두에서 사용하고 있다.
만약 personal management program에서 부서가 변동되었다고 치자. 파일 시스템은 education management program의 노주민씨에 대한 부서 정보를 자동으로 바꿔주지 않는다. 어떤 것은 변동되고 어떤 것은 변동되지 않는다면 데이터에 대한 불일치
가 발생한다.
File system의 단점
- 멀티 유저에 대한 동시성 제공하지 않음
- 쿼리문 없음
- 보안 취약
- 백업 없음
- Program과 Data에 대한 독립성이 없어 유지보수 비용이 높음
- 프로그래머 입장에서 생산성이 낮음 (데이터 검색, 업데이트 절차 복잡)
- 데이터 공유, 유연성이 부족
DBMS의 장점
- 중복 최소화
- 시스템 유지보수 비용을 줄임
- 표준화 달성
- 보안 향상
- 데이터 무결성
- 백업
- 데이터 액세스 동시성
DBMS의 단점
- 시스템 사용 비용
- 시스템 사용을 위한 인력 교육 비용
3. Evolution of DBMS
-
Hierarchical DBMS : 트리 구조 베이스. 빠른 속도, 효율성. 그러나 각 relation 명시적으로 정의해야 함. record가 링크를 통해 연결되어 구조 변경이 어려움.
-
Relation DBMS : 모델 이해 쉬움. 사용자가 원하는 것만 지정하고 DBMS는 데이터 위치와 액세스 방법을 결정하기만 함. 비절차적 언어
.
-
Object oriented DBMS : 객체 지향 프로그래밍 기반 모델. 데이터와 프로그램을 그룹화해서 복잡한 객체를 이해하기 쉽고 유지보수 및 수정이 편리함.
Data mining
데이터에서 의미 있는 중요 정보를 찾는 것. 마트에서 기저귀를 사면 우유를 사더라~. meaningful, hiden한 정보를 찾는 것.
4. DBMS Language
DDL
create, alter, drop ...
- Data Definition Language
- 스키마, 도메인, 테이블, 뷰를 정의, 변경, 삭제할 때 사용하는 언어.
- 사용자가 정의한 스키마를 시스템 카탈로그에 저장.
- 객체의 생성, 변경, 삭제 명령어.
- 주로 데이터베이스 설계자, 관리자가 사용한다.
DML
select, insert, update, delete ...
- Data Manupulation Language
- 저장된 데이터를 실질적으로 처리하는 데 사용하는 언어.
- 데이터베이스 유저가 데이터를 검색, 수정, 삽입, 삭제함.
- 절차적 언어와 비절차적 언어가 있음.
SQL
은 대표적인 관계적 DBMS를 사용하는 비절차적 언어임.
DCL
grant, commit, rollback...
- Data Control Language
- 데이터 보안, 무결성, 회복, 제어 등을 정의하는 데 사용하는 언어.
- 유저가 데이터베이스 트랜잭션을 지정하고 DCL을 사용해 권한을 취소함.
Transaction
데이터베이스 상태를 변환시키는 기능을 수행하기 위한 작업의 단위. 트랜잭션은 데베 시스템에서 제어 및 회복 작업 시 처리되는 작업 단위다.
5. ANSI/SPARC Architecture
general DBMS architecture.
DB abstraction levels
External Level
- 엔드 유저에게 가장 가까운 레벨. (User view, User interface 라고도 부름)
- 개별 유저의 view를 정의.
- 같은 conceptual level로부터 다양한 뷰가 제공될 수 있음. 같은 데이터로 다른 표현 가능.
Conceptual Level
- Model 측면에서 데이터 구조를 설명. (logical level 이라고도 부름)
- 데이터는 table로 구성되고 table 간의 관계를 정의.
- 데이터베이스의 전체 구조를 설명.
Internal Level
- 데이터의 물리적 저장 및 액세스를 설명. (Physical level 이라고도 부름)
- 데이터베이스에 데이터를 어떻게 저장할지를 고려.
- 어떤 DBMS를 쓰는지에 따라 달라짐.
데이터 독립성
논리적 데이터 독립성
- external level과 conceptual level 관계의 독립성.
- 데이터 모델이 수정되더라도 external level의 변경없이 데이터베이스 스키마가 변경될 수 있다.
물리적 데이터 독립성
- conceptual level과 internal level 관계의 독립성.
- 데이터의 물리적 구조가 수정되더라도 개념적 레벨의 스키마에 영향 없이 데이터에 접근하고 조작할 수 있다.
Mapping
External/Conceptual mapping
- 논리적 데이터 독립성을 유지하기 위한 매핑.
- 익스터널 뷰에서 유저가 입력한 쿼리를 개념적 레벨의 스키마를 사용한 쿼리로 매핑
Conceptyal/Internal mapping
- 물리적 데이터 독립성을 유지하기 위한 매핑.
- 개념적 스키마를 인터널 레벨의 스키마로 변환함으로써 디스크의 데이터베이스로 매핑.
6. Database System Architecture
Query processor module: 질의문을 처리하는 모듈
Run-time database manager module: 질의가 어디 있는지 찾아감. 매핑. 저장장치를 찾음.
DDL compiler module: 데이터 스키마를 만들고 시스템 카탈로그에 저장. (저장을 하면 런타임 데이터베이스 매니저가 나중에 찾겠지)
Transaction management module: 동시성 제어, 리커버리 모듈.
Application Program Interface(API)
Centralized database system
DBMS 마비된다면?
Distributed database system
분산해서 복사한다. --> 일관성 문제. 중복 문제. 비용 문제.
중요 부분만 복사하기, 전체를 복사하기가 있다.
Client-server database system
주로 많이 쓴다. 서버는 클라이언트가 요청하면 database 검색해서 리퀘스트에 응답한다.
클라이언트는 유저 인터페이스 같은 프론트엔드 역할을 하고, 서버는 백엔드 역할을 한다. 클라이언트는 데이터를 입력, 수정한다. 서버는 데이터를 저장, 보안, 백업같은 DB 관리 작업을 한다. 이러한 구조는 다수의 클라이언트가 동시에 데이터에 액세스할 수 있는 환경에 유용하다.
3-tier
- Client 레이어, Application 레이어, Database 레이어로 구성.
- application server를 중간에 둔다. 클라이언트가 만약 공격하려한다 해도, application server 존재만 알 뿐 database server를 알 수 없다. 보안에 좋다.